How game websites carry identity without art #48

Closed
opened 2026-07-28 08:10:35 +00:00 by archvillainette · 1 comment
Owner

Part of #47

Question

How do live game websites — not studio or publisher sites — carry a strong visual identity using chrome, typography, and ornament rather than photography? Look at the actual pages of Path of Exile, Warframe, RuneScape, EVE Online, and Albion Online, plus one or two smaller persistent-world or MMO community sites.

Come back with concrete, copyable patterns, not adjectives:

  • Frame vocabulary: how panels, plaques, cards, and section headers are bounded. Corner treatments, double rules, inset borders, notched edges, hairlines.
  • How a section header earns ornament, and what an unornamented one looks like.
  • Divider and rule inventory: what separates things, at what weight.
  • Iconography: where icons are load-bearing versus decorative, and how many they actually use.
  • Texture: is there any, where, at what opacity, and what happens on cheap displays.
  • Home page information architecture: what is above the fold when there is no hero art, and what order the blocks come in.
  • Status and server widgets: what they show, and what they show when the data is missing.
  • Density: how the marketing-ish pages and the forum/wiki pages differ in width, spacing, and ornament weight on the same site.

Note explicitly which patterns survive with zero images, since that is a standing law of this map.

Part of #47 ## Question How do live game websites — not studio or publisher sites — carry a strong visual identity using chrome, typography, and ornament rather than photography? Look at the actual pages of Path of Exile, Warframe, RuneScape, EVE Online, and Albion Online, plus one or two smaller persistent-world or MMO community sites. Come back with concrete, copyable patterns, not adjectives: - Frame vocabulary: how panels, plaques, cards, and section headers are bounded. Corner treatments, double rules, inset borders, notched edges, hairlines. - How a section header earns ornament, and what an unornamented one looks like. - Divider and rule inventory: what separates things, at what weight. - Iconography: where icons are load-bearing versus decorative, and how many they actually use. - Texture: is there any, where, at what opacity, and what happens on cheap displays. - Home page information architecture: what is above the fold when there is no hero art, and what order the blocks come in. - Status and server widgets: what they show, and what they show when the data is missing. - Density: how the marketing-ish pages and the forum/wiki pages differ in width, spacing, and ornament weight on the same site. Note explicitly which patterns survive with **zero images**, since that is a standing law of this map.
archvillainette added the wayfinder:research label 2026-07-28 08:10:35 +00:00
archvillainette added a new dependency 2026-07-28 08:10:53 +00:00
archvillainette added a new dependency 2026-07-28 08:10:54 +00:00
Author
Owner

Resolved. Findings committed as docs/research/game-site-chrome.md on branch research/game-site-chrome (commit dcadc72, not pushed).

Method. Live shipped CSS and HTML only, fetched 2026-07-28, read directly — 19 properties: Path of Exile (+ its wiki), Warframe (+ forums, wiki), Old School RuneScape, RuneScape 3, OSRS Wiki, EVE Online (+ forums, EVE University wiki), Albion Online (+ forum, wiki), and five smaller worlds: Arelith (NWN persistent world), Project 1999, Discworld MUD, Aardwolf, Zalanthas. Achaea, UO Outlands and UO Second Age surveyed and discarded, reasons recorded. Every number below is a declaration in production right now.

The headline result

Only four big-studio home pages survive image removal, and two barely. EVE's home page is a <video> and three headings. Albion's is 47 headings, every one a caption on a photo. RuneScape 3 renders its section headings as PNGs of words with the real text at text-indent:-9999px, and PoE does the same for forum category headers with alt="" — both sites literally have no headings with images off. So the copyable vocabulary is not in the big-studio home pages. It is in five places: EVE's Frame component, Warframe's home.css, the dense list pages of PoE and RuneScape, the OSRS Wiki's .tile tokens, and two twenty-year-old text worlds.

Count: 68 patterns survive with zero images. 8 die. 3 survive rebuilt. 2 are bugs to design out. The zero-image law is not a handicap — nearly the whole vocabulary is CSS, and the image-dependent parts are the expensive bits that date fastest.

Frame vocabulary

The workhorse hairline is DARKER than the surface. PoE's forum: row #1a1b18, rule border-top:1px solid #050505, header band #1e1f1e, zebra #0f0f0f — four values inside 6% lightness, and the divider is the darkest. Panel is border:1px solid #1b1b1b; box-shadow:0 0 3px #1b1b1b — the shadow is a blurred copy of the border. No border anywhere in its 939 KB exceeds 2px. Westgate does the inverse (gold lighter than panel); worth prototyping the dark rule in #54. SURVIVES.

EVE's Frame is a full notched-panel system in clip-path, zero images. The border is not a border — it is a filled div in #29353a/95% clipped to a 1px ring, over content at #212121/95%, so the hairline follows the notches. ~20 modifiers from three parameters: bottom-right chamfer always 10px; notch x-range 45→108px (small) or 108→191px (medium/large); depth 5px or 8px. border-radius is 0 more often than any other value. Cautions: the ring can't animate border-color, absolute notch offsets can exceed a narrow card, and a clipped element can't show box-shadow. SURVIVES.

Cheaper notch, use this first: EVE's card tab is three borders on a zero-height element — border-bottom:5px solid #29353a; border-left/right:5px solid transparent; width:83px. Four lines, works at any density, and unlike clip-path it can ride a forum row. Warframe's wiki does a parallelogram plate with skew(30deg) + inner skew(-30deg). SURVIVES.

RuneScape has one panel rule, repeated 14× verbatim: background:black; border:2px solid #382418; padding:7px 15px — nav boxes, pagination, tabs, dropdowns, login bar, hiscores buttons. It becomes a bevel by recolouring edges: border-top:2px solid #8E7246 over border-bottom:2px solid black. RS3's pressed button does the four-colour version (top/left #9f4000, bottom/right #f0d079). Soft surfaces: rgba(60,39,11,.5) wash + box-shadow:0 0 3px 3px #4a381f — no offset, 3px blur, 3px spread: a second frame, blurred. Four values carry all of it. SURVIVES.

Warframe's home.css is the most stealable file found. Gold #ddc57d as hsla(45,59%,68%,α) so alpha moves without the hue. Alpha ladder .5 / .15 / .1 (card border / structural hairline / wash) — Westgate's is .08/.14/.22, so Warframe's top rung is more than double. Then:

  • a border that dissolvesborder:1px solid hsla(45,59%,68%,.15) on an overlay :before with mask-image:linear-gradient(180deg,#000,rgba(0,0,0,.1)), full at top, 10% at bottom;
  • a rule that bleeds lightborder-top:1px solid hsla(45,59%,68%,.5) + linear-gradient(180deg,hsla(45,59%,68%,.1),transparent 32px);
  • hover raises border alpha to 1 and swaps the offset shadow for a 0-offset coloured glow, never changing weight;
  • filter:drop-shadow(0 4px 8px rgba(0,0,0,.5)) instead of box-shadow, so the shadow follows a clipped or masked shape. All SURVIVE.

Gradient borders, arrived at independently by two sites: Warframe border-image:linear-gradient(to left,#1d1c20 50px,var(--panel-accent-color) 50px) 1 (first 50px of the edge accented); Albion border-image:linear-gradient(90deg,#FFFFFF00,#FFD972FF 50%,#FFFFFF00) 1 (fades to nothing at both ends). Caveat: a gradient border-image kills border-radius. SURVIVES.

A ribbon made entirely of borders — Albion's wiki banner: background:#912e16; border:.875em solid transparent; border-left-color:#531405; border-right-color:#531405; line-height:0. A banderole, a very gothic shape, with no asset at all. SURVIVES.

Parchment as an inset shadow, not a texture — Albion: background-color:#f6f5f1; box-shadow:inset 0 0 120px rgba(102,81,35,.28). That is the entire aged-paper effect. Westgate's inset 0 0 34px rgba(96,32,68,.11) is this device with plenty of headroom on both radius and alpha. SURVIVES.

Panels with no border at all: Albion's cards are a hsla(50,8%,72%,.5) wash + 10px padding + 18px rhythm, bleeding margin:0 -6px past the column. Project 1999 has no border property on its panelscellspacing="1" over .tborder{background:#D1D1E1} makes every cell gap a hairline, with three header tiers (#869BBF/#5C7099/#3E5C92) and two zebra values carrying the whole hierarchy in 6 KB of inline CSS. SURVIVES.

What dies: PoE's ornate crests are nine absolutely-positioned PNG slices per frame (tl/tr 50×32, bl 52×34, br 51×35, two repeat-y side strips, two flanking pieces) plus border-image:url(border1.png) 3 3 3 3 repeat; its status bar is a 359×41 sprite window; its top nav is a 119×50 sprite with text-indent:-9999em. RuneScape's parchment caps, border.webp (slice 62), 26 nav bullet GIFs. RS3's point-border.png 40 and box-border-gold.png 18 round. Warframe's 105px filigree strips.

Two things to notice anyway: ornament always lives in the left/right gutters of the column, 23–105px wide, never inside the content (PoE, Warframe and Albion's wiki reached this independently; Albion drops it entirely below 1385px). And Warframe recolours instead of re-exporting — background-color:var(--shop-filigree-color,#ddc57d); mask:url(bg-shop-filigree.svg). If Westgate ever gets one ornament asset, ship it as a mask over a token, not as a coloured image — one file then serves every state, accent and forced-colors mode, versus PoE's nine slices and thirteen separator PNGs.

Section headers: when one earns ornament

Warframe states it outright in shipped CSS — two parallel scales, not a header plus decorations. .h1alt/.h2alt = title face + text-transform:uppercase + 3rem/2.5rem + line-height:1.3–1.4. Plain .h5/h5 = subtitle face + text-transform:none + 1.4375rem + line-height:1.25. Same component, one class swap. And a section title earns emphasis by overriding one token.HomeNewsTitle{--color-title:#ddc57d} — not by gaining a rule. Markup is <h2 class="h1alt HomeNewsTitle">: size class decoupled from semantic level. The rule: a header earns ornament by switching to the display face and uppercase. It does not earn ornament by gaining a rule, a flourish or a background. SURVIVES.

The plaque — the cheapest big win, and Westgate has nothing like it. OSRS: .banner__options{background:black; border:2px solid #382418; display:inline-block; padding:3px 15px; margin-top:45px} wrapping the h1 plus one secondary link. display:inline-block is the whole idea — a name plate, not a band. Reduced form on the same page is a bare <h2 class="slu-quick__title">. And .home .banner__options{display:none}suppressed on home, because the logo does that job; you don't get both. Type ladder is five em steps and nothing else: 3.5 / 1.9 / 1.5 / 1.3em / 15px. No tracking, no uppercase, no rules. SURVIVES.

The straddling legend — same site: .home-nav__box{border:2px solid #382418; position:relative} with .home-nav__title{position:absolute; top:-7px; width:100%; text-align:center}. A title sitting on its own panel border; on black the border just stops behind the text. A <fieldset> legend by hand. SURVIVES.

The plaque is also the one primitive Albion carries across the density boundary. Four components share one rule — .news-banner__headline, .news-category-header, .titled-box__headline, .top-table__headline { background:#441003; margin:0 -6px; padding:8px 10px; font-size:1rem; font-weight:700; text-transform:uppercase; color:#fff } — and the wiki repeats it byte-identically at #531405 with margin:-0.5em -0.5em 0.5em. margin:0 -6px is the bleed-past-the-card-edge trick: the header is 12px wider than its container, so it reads as a band nailed across the card rather than a row inside it. (Its box-shadow:inset inset … is a shipped typo, so the plaque is in fact flat.) Strongest evidence for map #47's one-shell law: the thing that survived the density boundary was the plaque — not the frame, not the texture, not the layout. SURVIVES.

The tick — EVE: :before{content:""; background:#5ccbcb; width:4px; min-height:30px} (6px/34px at wide), margin-left:15–20px, on a heading with letter-spacing:0. Note EVE tracks its small labels heavily and its headings not at all — exactly Westgate's Engraving Rule. SURVIVES.

The full-ornament centred header — EVE: uppercase h3 36px weight 500 tracking 0, over a light uppercase h4 26px weight 300 tracking .05em, over .headings_line{background:#154f5b; height:3px; margin:0 auto} animating width 0→340px. Two details worth stealing: the rule is #154f5b, a darker relative of the accent #5ccbcb, so it frames without competing; and line-height:55px on a 24px title reserves the air that makes it read as a title page rather than a row. PoE's wiki does the eyebrow version with a bloom instead of a rule: .h1-1{font-size:26px;letter-spacing:.07em} over .h1-2{font-size:38px;bold}, both on a shared radial-gradient(ellipse at center, rgba(154,2,0,.9) 0%, transparent 65%), heading text-shadow:0 0 10px rgba(209,28,0,1). Very close to Westgate's existing etch — the radial bloom behind the heading is what's missing. SURVIVES.

.tile h2 { border:none } — the heading that knows it is inside a panel. OSRS Wiki: MediaWiki's default h2 carries a bottom rule; the tile strips it, because a heading inside a bounded panel doesn't need its own boundary. Header ornament is conditional on the container. Its tokens are also the model for #55 — named for the panel, not the colour: --tile-border-color:#cabe9b, --tile-background-color:#f9f3eb, --tile-dark-bg:#5d6773, plus a six-step --body-main/-light/-mid/-dark/-border ramp. Its byline is an eyebrow before the heading with .tile .byline + h2{margin-top:-0.5em}. SURVIVES.

Ornament as a character. Project 1999 prefixes every plaque header with &raquo; and encodes nav depth in the number of glyphs» Project 1999, then » » Forum Home, » » Wiki. Zalanthas uses as a section divider. Draw it (::before{content:""}, aria-hidden) rather than typing it, but the idea — one repeated mark meaning "this is a section" — is free and is the whole reason P1999's sidebar reads as designed. Note it also puts live data in the header string: » Online Users: 25,581. SURVIVES.

Ornament as tracking — Discworld MUD, the purest case. h1{letter-spacing:3pt; font-size:14pt; bold}, h1.topborder{border-top:1px solid #BDB7B1}, h3{border-bottom:1px solid #BDB7B1}heading level encoded by which side the rule sits on, with two named opt-outs (h3.subhead, h3.plain) proving the rule is the default. #sidebar a{font-variant:small-caps} is the second and last ornament. Four colours total (#fff, #444, #BDB7B1, #E7E5E3), exactly one bounded panel type (blockquote), zero radius, zero shadow. This is the floor for an artless site, and it is defensible. But read it as evidence for Westgate's Engraving Rule, not against: Discworld gets away with 3pt on a compact humanist sans; Cinzel already carries the engraved weight in its letterforms and would disintegrate.

The failure mode, cited only as that. PoE's forum category headings are server-generated PNGs — the base64 decodes to {"string":"…","size":18,"fontColour":"rgba(206,197,159,1)","tPad":3,"lPad":6} — shipped with alt="", so a screen reader gets nothing where the section name should be. RS3 does the same plus two 70×80px sprite ornaments as :before/:after. DIES, and should. The buried correct instinct: PoE reuses that same #cec59f live in CSS — .layoutBoxTitle{color:#cec59f; font-size:180%; text-shadow:0 0 2px rgb(171,156,91)}.

Divider inventory

Full 40-entry table in the doc, at weights 1 / 2 / 3 / 4 / 5 / 8 / 25px + glyphs. The distinct kinds, all zero-image unless noted:

1px — darker than surface (#050505 on #1a1b18); olive card rule (.news-article:after{background:#6B7B17;height:1px;bottom:0}, so first/last card have no stray edge); neutral hsla(0,0%,69%,.2); gold at .5; gold at .15 fading down via mask; fading at both ends (two techniques, below); part-accented along its length; inset 5% each side (.forumTable hr{margin:0 5%}); recoloured by role; 50%-width centred; top rule + 32px wash; full grid on both axes (RuneScape th,td{border:1px solid #382418}); vertical 1px between nav items (height:50%; transform:translateY(-50%)); from cellspacing; top rule (Discworld h1/h2) vs bottom rule (h3); dashed (1px dashed #80808080); dotted with cursor:help; and a double rule bevel — RS3 dropdown rows border-top:solid 1px #223843; border-bottom:solid 1px #000.

2px — heading underline; dashed; top-light/bottom-dark bevel (border-top:2px solid #8E7246; border-bottom:2px solid black); border:2px outset. 3px — centred animated #154f5b; heading underline. 4px — vertical tick; blockquote spine border-left:4px solid #ECEDEE; sub-nav underline. 5px — three-border trapezoid tab. 8px — accent spine border-width:1px 1px 1px 8px. 25px — CSS trapezoid bezel.

The rule that dissolves, two techniques — pick by whether you need radius:

/* A. border-image + gradient. Simplest. Kills border-radius. */
border-style:solid; border-width:1px 0 0;
border-image:linear-gradient(90deg,transparent,#c2a35a 50%,transparent) 1;

/* B. masked 1px block. Keeps radius, any edge, any direction,
      and gives the fading *frame* with no extra vocabulary. */
height:1px; background-color:#c2a35a;
-webkit-mask-image:linear-gradient(90deg,transparent,#000 50%,transparent);
        mask-image:linear-gradient(90deg,transparent,#000 50%,transparent);

Route B should be Westgate's house divider.

PoE proves both routes in one codebase and the cheap one wins. It needs a divider whose colour encodes a class. For item rarities it shipped 13 separate PNGs (7–13px, one per rarity). For forum post roles it shipped one hr plus a border-color override.staff/.support/.valued-poster/.valued-thread .content-container hr{border-color:#a87a00}. Same requirement, 13 files versus one line, and the one-line solution is on the page players look at daily. Its own wiki goes further and tokenises outright: 20 --poe-color-* properties + one .item-box frame + a modifier class per rarity. That is the shape #55 should take.

Role emphasis with no fill: .forumTable tr.staff{outline:1px solid #db9f00; border:1px solid #db9f00} — five roles, five colours (staff #db9f00, support #867747, official #5e84ab, valued-poster #9d9d9d, valued-thread #614506), both outline and border* because table rows are unreliable about which paints. Same five recolour the quote blocks and the hr`. No tinted row, no badge, no icon. Directly applicable to Westgate's staff/DM posts, and better than a tinted background under the Sparing Red Rule. SURVIVES.

The separator that doesn't get copied: Jagex draws all of them as pseudo-elements — .news-article__time:before{content:'|'; margin:0 5px}, .server-list__status-link:before{content:'['} / :after{content:']'}, .breadcrumb li:before{content:'>'}. So Game Updates | 22 July 2026 has a pipe that isn't in the markup and a copied timestamp comes back clean. The OSRS Wiki reaches it from the other side: <span style="user-select:none"><b>•</b></span>. SURVIVES.

On tracked caps — the honest count corrects the obvious guess. text-transform:uppercase occurrences: Albion 109, Warframe app.css 77, EVE 72, RS3 responsive all of h1–h6 globally, PoE 6 in 939 KB, OSRS 1, Arelith/P1999/Discworld 0. But letter-spacing: Albion two uses in 631 KB, RS3 responsive none in 388 KB, Arelith zero, OSRS one, PoE mostly negative (-.025em ×19). Only EVE has a real tracking scale (.01–.2em) and it applies it exclusively to uppercase while giving prose negative tracking (-.01em). So: uppercase is near-universal; tracking is rare and caps-only. DESIGN.md's Engraving Rule matches EVE's actual practice exactly — keep it tight. The warning is against reaching for more tracking when a header needs presence; every site here answers that with the display face, the frame or the colour.

For #59: two of the largest game sites ship Cinzel in production. PoE's font chunk has @font-face{font-family:Cinzel; src:local("Cinzel-Regular"),url(/font/Cinzel-Regular.woff)} plus Cinzel-Medium, alongside OptimusPrincepsSemiBold, FrizQuadrataC and four Fontin cuts. RS3 declares @font-face{font-family:"cinzel"} and uses it on tabs (font-size:2.2em; letter-spacing:0.04em), sidebar article titles, and inside hand-typed news posts. Also: nobody in the survey pairs two sans faces — RuneScape (Kingthings Petrock + Arial), Albion (Lora + Open Sans), Arelith (Neverwinter + Roboto Slab), PoE (Fontin/Friz/Optimus + Verdana). Cinzel + Jost is the same shape.

Iconography

Very few, almost all load-bearing. A stat gets a word, not a picture. PoE prints <strong>Threads:</strong> <span>14899</span> and Posts: <span>31657</span> — no icon, no tooltip; its only load-bearing icon is a 15×15 sprite for read/unread state. OSRS has skill icons in HiScores (the icon is the row identity) and three Grand Exchange trend markers; the whole home page has zero UI icons. EVE has essentially none in CSS. Arelith's 18 destination tiles carry no icons at all. P1999 has two icon types in the entire site.

Where they'd reach for an icon, they use words or CSS: OSRS's sort controls are links whose text is literally ascending and descending; its sort arrows are linear-gradient(#1d4f1b,#61ca5c) circles with a CSS-triangle :after (red variant #990A03→#D83530); its external-link mark is a 24-point clip-path:polygon in #90c040. EVE University's wiki main-page search control is a <div role="button"> labelled 🔍 Search the EVE University Wiki — honest about the cost of an icon system.

Budget for Westgate: an icon only where the icon is the data. Two notes — Westgate inherits Bootstrap Icons / Font Awesome via Harmony, so icon fonts and inline SVG are not "images" for the zero-image law; this is the one place the law doesn't bind. Which makes GAME_ICONS.md matter more than any ornament budget: decorative icons cut first, state icons last. And Warframe's technique — --icon-filter:invert(1), .Filigree.is-themed{filter:var(--filter-filigree)}, 18 faction variants all one property — is how one monochrome source serves gold, ash and wax-seal; prefer currentColor on inline SVG over a hue-rotate chain. SURVIVES REBUILT.

Texture — and the recommendation is: don't

Only one site ships one. Warframe: background: top/172px 104px repeat url(bg-pattern-lotus.png); opacity:.25; position:absolute; inset:0; z-index:-1 on three section pseudo-elements over #111. Section-scoped, never global, never behind body text. PoE's texture strip is overridden by a gradient on the next line and never renders. Albion ships none (its parchment is the 120px inset glow). EVE's stars.jpg is art, not texture. The only CSS-generated texture in the entire survey is the Warframe wiki's repeating-linear-gradient(-45deg, …) hazard stripe.

The arithmetic on cheap displays is unkind. A tile at opacity:.25 over #111 (RGB 17) with darks near RGB 40 moves each pixel by about 6 levels out of 255. A 6-bit TN/budget IPS panel quantises to 64 levels — steps of 4 — so a 6-level swing is one or two steps: it reads as banding, not grain, and panel dithering makes it crawl on scroll. On OLED, near-black is genuinely black and the same 6 levels are clearly visible, so it's stronger than intended. One declaration, three different outcomes.

Verdict: DIES as shipped, and CONDITIONAL even with images. If Westgate wants grain, generate it (repeating-linear-gradient at a fractional angle, or inline SVG feTurbulence data URI) — but the same quantisation applies, so: never behind body text; keep the swing above the 6-bit step (~8–10 levels, which means it will not be subtle — pick one); drop it under prefers-reduced-transparency / prefers-contrast:more. Honest recommendation: DESIGN.md already gets its texture from the velvet gradient, and Albion shows that device has room (120px radius, 28% alpha vs Westgate's 34px/11%). Warframe's live site and everyone else's absence both say stop there.

Home-page IA with no hero art

Heading counts and survival: EVE 3 (a <video>) — no. Albion 47, all photo captions — no. RS3 news 0 rendered — no. Warframe 16 — yes. OSRS 11 — mostly. Arelith ~20 — structure yes, mood no. Project 1999 — yes, completely. Discworld 4 — yes. The pages that survive are the ones whose home page is a news list or a directory, not a showcase.

The block order, consistent across all survivors:

  1. Identity band (logo + nav). Nothing above it but a login link — Discworld's <p class="screenreader"><a href="#welcome">Skip to main content</a></p> as the literal first element in <body> is the one correct exception.
  2. One-line claim of what this is: h1 + one short paragraph. OSRS 67 words, Arelith 13.
  3. A small fixed set of primary actions — 3 CTAs (OSRS "Try Free" / "Become a Member" / "Visit HiScores" plus a small foot-link), or none, with them in the nav (Arelith).
  4. Optional single art slot — one <a><img></a> banner that collapses (OSRS), or one fixed backdrop on its own layer (Arelith). Never a grid of art holes.
  5. News, exactly four to five items. OSRS 4–5, Warframe 4, P1999 5 announcements. Nobody ships three or ten.
  6. Destinations — one-sentence tiles (Arelith), a plaque rail (P1999), or further news-ish blocks (Warframe).
  7. Footer link columns, often with the in-fiction voice intact (Discworld's legal footer: "Brought to you by CMOT Dibbler's Sensational Sausages; buy one while they're hot.").

Status is never above the fold, with exactly one exception: OSRS puts its player-count sentence third on the page. Everyone else has it in a rail plaque, a directory tile, a one-line link, or nowhere.

The news item worth copying verbatim (OSRS, and RS3 uses the same geometry and the same #6B7B17 rule — it has survived two brand redesigns):

<article class='news-article'>
  <figure class='news-article__figure'>…<img …></figure>
  <div class='news-article__details'>
    <h3 class='news-article__title'><a>Summer Sweep-Up Gear &amp; PvM Changes</a></h3>
    <span class='news-article__sub'>Game Updates
      <time datetime='2026-07-22'>22 July 2026</time></span>
    <p class='news-article__summary'>… <a class='news-article__read-more'>Read More...</a></p>

.news-article{width:540px;padding:20px 0}, :after{background:#6B7B17;height:1px;bottom:0}, __figure{float:left;width:175px}, __details{float:right;width:350px}, __sub{font-style:italic}, __time:before{content:'|';margin:0 5px}. The thumbnail is a separate <figure> sibling — delete it and the details block is a complete, well-formed news item (the 350px float just becomes 540px). Category and date share one italic meta line with a real <time datetime>. The affordance is inside the sentence, not a button below it.

The best zero-image answer to "no hero art" is Warframe's masthead:

.MastheadFooter:before{ background:radial-gradient(80% 100% at bottom,
  transparent 72%, #ddc57d 75%, hsla(45,59%,68%,.1) 78%, transparent 100%) }
#home{ --masthead-footer-height:10vw; --masthead-gradient-lower:72%; --masthead-gradient-upper:78% }

A gold horizon glow, one gradient, 10vw tall, over a flat black field. And the art slot degrades cleanly because the overlay is linear-gradient(to bottom, transparent 0 56px, #000 88px) — with the art absent, that gradient over nothing is flat black and no layout moves. Also note Warframe's lead story is grid-row:1/span 3 + font-size:2.5rem against the others' 1.1875rem — hierarchy by span and type size, not by bigger art, so it survives losing the images. Its tiles ship alt="": Warframe declares its own news thumbnails decorative.

Project 1999 is the leanest working home page found: logo, login row, navbar, then two columns — prose + 5 announcements, and a width="190" right rail of eleven collapsible plaques (» Navigation, » Log in, » Online Users: 25,581, » Server Status, » Donate, » Stats, » Current Poll, » Recent Threads…). A fixed-width rail of small labelled plaques is a complete home page.

Arelith needs a correction, and it's the useful part. Structure transfers perfectly: h1 + 13-word tagline, then four press pull-quotes with attributions as the above-the-fold ("Arelith's players sink themselves into a world where their actions feel consequential." — Vice, plus PC Gamer, Massively OP, Engadget), then 18 destination tiles, each a linked title plus exactly one sentence, no icons, no images. Its display face is scoped to two strings only — --chakra-fonts-accent:'Neverwinter',serif on the logo and the one hero heading; every other h2 is plain bold 1.25rem with no rule; letter-spacing appears zero times. But: its atmosphere is 22 dimmed in-game screenshots behind translucent glass (position:fixed; filter:grayscale(30%) + 50%-black scrim + 60s crossfade, panels blackAlpha-700 + backdrop-filter:blur(20px), all borders zeroed by Chakra preflight). Strip the images and you get black glass rectangles with Roboto Slab in them. Arelith is the cautionary case, not the model — right structure, mood leased entirely from screenshots. Westgate cannot make that trade, which is exactly why it needs the frame vocabulary Arelith skipped. (Two things to steal anyway: the one-sentence-per-tile rule, and press-quote-shaped text as an above-the-fold — Westgate has no press quotes but has epigraphs, proclamations, ledger entries; text set as a quotation reads as content, where a large empty ornament reads as a missing image.)

Status and server widgets

Half of them don't have one. EVE has nothing — I checked the home SSR payload, the 1.07 MB JS bundle, the news pages, the forums, /status and /api/server-status; grepping for tranquility|players online|server.?status returns backend:"tranquility" and a recruitment URL, neither a widget. The count lives only in ESI: {"players":20008,"server_version":"3444265","start_time":"2026-07-27T11:02:58Z"}the absence of a 200 is the offline state. Community sites display it; CCP doesn't. Albion's is a bare JSON endpoint (/status and /serverstatus both 404, status.albiononline.com 403). Warframe's world-state widget lives on the community wiki. PoE has none at all — #statusBar is the account bar.

The one good implementation is RuneScape's world list (/slu). Five columns — World, Players, Location, Type, Activity — 318 rows:

Old School 93   | 30 players  | United States | Free | 750 skill total
Old School 183  | 98 players  | United States | Free | PvP Arena (Legacy Duels)
Old School 117  | 125 players | United States | Free | -

Six load-bearing details:

  1. The aggregate is a sentence, not a stat block<p class='player-count'>There are currently 68,432 people playing!</p>, font-size:1.3em; text-align:center. No big number, no label, no gauge, no icon. It cannot look broken because there is no chrome to be empty.
  2. The unit lives in the cell, not the header — header Players, cell 37 players. A cell read out of context still makes sense; a screen-reader row is a sentence. No singular form in 318 rows; 0 players renders as-is.
  3. Missing data is a literal -. Not blank, not "N/A", not "None", not a hidden cell. One character that keeps the row's rhythm and claims nothing.
  4. No "Full" and no "Offline" string anywhere — capacity is the number alone.
  5. Controls are words (ascending/descending), brackets are CSS (:before{content:'['}).
  6. State recolours the text, not the fill.server-list__row--pvp .server-list__row-cell{color:red} over a uniform #362D1A with no zebra. 70 Activity strings do the rest in plain words (Deadman - Permanent, High Risk World, Role-playing, Trade - Free).
    Header row bevel: background:#362D1A; border-top:2px solid #8E7246; border-bottom:2px solid black. SURVIVES, 100% — every part is text in a table.

Discworld's home form is one sentence with no box: <p><a href="…?status">Game Status</a>: Driver <a>rebooted</a> about 33 days ago, 49 people logged in.</p> — the label is the link, the value is inline prose. Its detail page is <h1>System Status</h1> + a bare unstyled label-colon-value table (Driver uptime: 33 days and 4 hours, Number of users: 44, Using MCCP: 36, Plain telnet: 8, Objects: 175759, Memory usage: 2140 MBytes) where 44 = 36 + 8 and two labels link into the in-game docs. SURVIVES.

Two named bugs to design out, both live:

  • A server-rendered 0 as the resting value. RS3 ships <span id="playerCount">0</span> Online and re-polls only when <1 || isNaN — so a failed poll reads 0 Online indefinitely, and on a cold fetch that is exactly what it shows. Arelith's /portal ships <h2>Total players: 0 (0 Hidden)</h2> server-side, so with JS off or slow it states that the world is empty. Not a skeleton, not an em-dash — a confident 0. A resting 0 is indistinguishable from an outage and, unlike a missing value, looks authoritative.
  • Colour hardcoded on the value instead of derived from state. P1999's status plaque prints <b><font color="green">UP<br>267 per shard (Green/Blue/Red, labels Status: / Players: / Total Players:, <hr> between) — a shard that went down would print its DOWN in green. Tags left unclosed, no DOWN string and no unknown placeholder anywhere in the markup.

Real contracts observed. Albion, 56 bytes: { "status" : "online", "message" : "Server is online." } — a machine enum plus a human sentence rendered verbatim, so the page never has to invent copy. Its weakness: no third value, so a fetch failure is indistinguishable from an outage. Arelith's /api/portal is richer: per shard {id, name, address, port, playerCount, state, startup} plus a top-level hidden count. state is a numeric enum (8 everywhere) with no published mapping; ids are non-contiguous (1,2,5,6,8,9 — retired shards left gaps); startup is per-shard, and five of six within 10 seconds of each other makes a coordinated restart visible in the data — uptime per shard tells you more than a boolean.

Warframe's wiki has the label grammar for a clock, and it removes the loading problem entirely: three forms — "<Entity> in" (recurring reset), "<Entity> arrives in" (scheduled), "<Entity> is present for" (window currently open) — with epoch, period and a format mask (D h m s) as data attributes, computed client-side from a server-seeded epoch. There is no loading state and no empty state because there is nothing to load. The only placeholder string in the whole page is the word Unknown.

Proposed contract for #51, synthesising Albion's shape + Arelith's richness + the three lessons:

{ "state": "online" | "offline" | "unknown",
  "message": "The city keeps its hours.",
  "servers": [ { "name": "…", "players": 12, "since": 1785219140 } ],
  "hidden": 0, "checkedAt": 1785226820 }

state drives styling (never the template), message renders verbatim, since gives per-shard uptime, checkedAt lets the UI say "last heard from the watch 4 minutes ago" instead of pretending the number is live. Resting render is a sentence — a sentence has a natural unknown form ("The gates are unattended.") where a stat block's unknown form is a hole with a border round it. Missing field inside a row is -. Never render an empty framed panel: every ornamented empty container in this survey reads as a failed image; Warframe's alt="" and OSRS's collapsing <a><img></a> both show the right instinct — the optional thing is a child that disappears, not a slot that stays. Under the Sparing Red Rule, offline is a state colour and unknown is Dust Text; red for "we couldn't reach our own endpoint" over-states it.

One thing to steal outright: Arelith's portal also carries an in-fiction dual calendar15:15 on day 22 of month 3 (Ches), 190 AR (1390 DR). Arelith Reckoning plus Dale Reckoning. The best example in the survey of a status widget carrying setting rather than data — and it needs no server feed at all. Westgate has a city, a court and a calendar.

Density

The measured gap is about ten to one, on one scale. Showcase section padding: EVE 120px×7, 100px 0×5, 80px×6, .Download{padding:90px 0 230px}, article padding-top:200px; Warframe 128px, 80px×7, 60px×6; Albion 120px, 0 150px, 60px×5; OSRS .content{padding:50px 75px}; PoE 150px, 140px. Dense cells: PoE 5px ×70 (its single most common value in 939 KB), 10px×35, 4px×17, 2px×18; EVE 20px×26, 10px×23; Warframe 8px×18, 8px 16px×7; Albion forum 7px×24. Not two systems — one scale at opposite ends. Westgate's --wg-space-* tops out at 2rem, so there is no token for a showcase rhythm at all; #56 needs rungs above it or showcase pages get hand-written pixels.

Widths. OSRS .page-wrap{width:815px;padding:0 50px}715px content; PoE forum and all showcase pages share 920px, with vertOrnate1 giving 820px inside it — 50px of ornament gutter per side, ~11% of the column; EVE shell 1310→1370px (xlWide 1680px) but prose capped at 850/700/600/500px; Warframe --page-content-width:1760px but single-column max-width:800px; Albion marketing 67.5rem = 1080px, forum 1240px, wiki 1385px (dropping its side ornament below that); RS3 legacy 1000px, responsive 2600px; P1999, Discworld and Aardwolf have no max-width at all. Westgate's 1420px is a reasonable shell but far too wide as a measureprose needs its own 715–850px cap. And if flanking ornament is wanted, that's ~11% of a column that isn't 1420px.

The uncomfortable finding: most studios don't carry ornament into the forum.

  • RuneScape deleted its forum rather than theme it. secure.runescape.com/m=forum/forums 302s to a news post, "A Farewell to our Forums" (<time datetime='2024-03-28'>), pointing at Discord, Reddit and the community wiki. The RS3 header still shows a "Forums" nav item; it links to the farewell.
  • EVE's forum is stock Discourse. Its palette file sets seven seed values (--primary:#dddddd; --secondary:#222222; --tertiary:#0f82af; --quaternary:#c14924; --header_background:#111111; --highlight:#11263b) and lets Discourse derive ~80 ramp steps. Plus exactly one custom line in the document: a webfont <link>. No Frame, no clip-path, no chamfer, no notches, no tracked caps. The palette doesn't even match — forum links #0f82af, site accent #5ccbcb. Its category table is down to two columns: Category | Topics.
  • Albion's is the same with WoltLab. The OSRS Wiki is a partial exception: it does carry a parchment palette — a six-step token ramp, better organised than the game site's four hand-picked browns — but shares no component, no face and no measure (2px #382418 on black vs 1px #cabe9b; Kingthings vs default; 715px vs 40em tiles). Same material, different vocabulary.
  • Only Path of Exile honours "one shell, two densities": its forum is .layoutBox1 .layoutBoxFull .forumTheme — the same panel component as its marketing pages, same 920px, same near-blacks. Achievable precisely because that vocabulary is cheap: 1px #1b1b1b, 2px radius on the end caps, a 3-stop gradient band, a 4px warm inset.

So map #47's one-shell law is more ambitious than four of six studios manage. The lesson: the shared vocabulary has to be cheap enough to survive a 25px table header row. EVE's clip-path frame is beautiful and cannot ride a forum row. PoE's band can. The three-border tab can. The plaque is the one thing Albion actually carried across. Design for padding:5px first and let showcase surfaces add — never the reverse.

And the fallback if the law proves too expensive is not "make the forum plain". It's EVE's and Albion's real fallback: carry the identity in the copy. Every EVE category has a one-sentence description and 13 of 22 begin with the same three words"The place for…" / "The place to…" (Fiction Portal — "The place to discuss the lore of New Eden, and post in character."). Albion puts the game's own zone metaphor on the boards: Beginner's Questions"This is the forums' 'Green Zone'."; Forum Banter"This is the Black Zone of the forums. … Enter at your own risk." No CSS, no assets, and it is the highest-identity-per-byte move in the whole document. Available today.

Mechanically, express density as Warframe does — one variable block per surface (#home{--masthead-footer-height:10vw; --shop-bar-height:4rem; …}) with var(--token, fallback) in every component, so a component is correct unscoped and re-tuned by one wrapper class. Better than PoE's seven theme classes sharing one rule. Caution for #55 from the same file: Warframe declares six font tokens (--font-family-navigation/-body/-title/-subtitle/-form/-button) and all six resolve to Roboto,Arial,Helvetica,sans-serif. Name the axes you actually vary.

Against DESIGN.md / PRODUCT.md as they stand

Confirmed: gold as edging not paint (Warframe's identical .5/.15/.1 ladder); hierarchy by panel tone and border alpha not shadow (PoE's four values inside 6%); tracked caps restricted to small labels (EVE tracks only its caps and gives prose negative tracking; RuneScape ships one uppercase declaration; PoE tightens); Cinzel (PoE and RS3 both ship it); serif display + humanist/geometric sans body (nobody pairs two sans faces); red as state only (no site uses its danger hue as a surface); and restraint over ornament — Discworld and P1999 carry two decades of identity on four colours and no ornament at all, which is the strongest confirmation in the document.

Missing, worth adding in #54, ranked by value per line: (1) the plaque; (2) the masked fading rule as the house divider, which brings the fading frame free; (3) the radial horizon glow as the no-hero answer; (4) the role ring; (5) the three-border trapezoid tab; (6) the band frame; (7) the straddling legend; (8) .tile h2{border:none} — heading ornament conditional on container; (9) content:'|' separators; (10) filter:drop-shadow for masked surfaces; (11) a wider inset bloom (Albion's 120px/28% vs Westgate's 34px/11%); (12) the border-only ribbon if a banderole is ever wanted.

Deliberately not transferring: EVE's chamfer geometry (the clip-path technique is perfect, but a 10px 45° cut is a sci-fi signature — the gothic equivalent is a pointed or ogee edge, also a clip-path:polygon problem, so keep the technique and reject the geometry); tiled texture; Discworld's 3pt tracking (right instinct, wrong typeface); any ornament needing an asset (every site with one maintains 10+ PNGs); Warframe's six-token font contract.

Inputs to sibling tickets

  • #51 — the contract above, the sentence-not-stat-block resting render, - for a missing field, the two named bugs (0 as resting value; colour on the template), epoch-seeded client-side computation where the datum is a clock, and the in-fiction date line as a status widget needing no feed.
  • #54 — the twelve components, plus the must-work-at-padding:5px test.
  • #55 — PoE's wiki --poe-color-* set and the OSRS Wiki's --tile-*/--body-* ramps as the worked examples (tokens named for role or panel, not colour); Warframe's six identical font tokens as the anti-pattern.
  • #561420px is fine as a shell, far too wide as a measure (prose 715–850px); spacing scale needs rungs above 2rem; density as one variable block per surface class; ornament gutters cost ~11%.
  • #57 — the seven-step block order, four to five news items, one sentence per tile, the plaque rail.
  • #59 — PoE and RS3 both ship Cinzel; display-face sites tighten tracking rather than loosen it.

What this does not answer

Wiki reader typography has no good reference. All five wikis read are community MediaWiki installs; the best shares a palette with its game site but no component, face or measure, and the worst share nothing. #58 will have to invent it — the nearest transferable pieces are the OSRS .tile tokens and the four infobox patterns (PoE's .item-box, Warframe's 1px dashed #80808080 row rule, OSRS's 2px solid var(--body-dark) label rule and its height:0.5em; border:0 spacer-row idiom). Also unanswered: any modern dense list carrying heavy chrome (only PoE does it, and PoE's forum is a <table>); down-state renderings — every server checked was up, so the missing-data guidance is reasoned from the patterns rather than copied from an outage, and is worth re-checking during a real maintenance window; texture on real 6-bit hardware (5.2 is arithmetic, not measurement); and recruitment/gallery surfaces, which have no analogue in this set.

Not readable, and no conclusion rests on them: Warframe forum CSS (Cloudflare), live PoE Wiki CSS (Anubis proof-of-work — Wayback used, dated in the doc), the English-language Albion board listing (Cloudflare).

Resolved. Findings committed as `docs/research/game-site-chrome.md` on branch `research/game-site-chrome` (commit dcadc72, not pushed). **Method.** Live shipped CSS and HTML only, fetched 2026-07-28, read directly — 19 properties: Path of Exile (+ its wiki), Warframe (+ forums, wiki), Old School RuneScape, RuneScape 3, OSRS Wiki, EVE Online (+ forums, EVE University wiki), Albion Online (+ forum, wiki), and five smaller worlds: **Arelith** (NWN persistent world), **Project 1999**, **Discworld MUD**, Aardwolf, Zalanthas. Achaea, UO Outlands and UO Second Age surveyed and discarded, reasons recorded. Every number below is a declaration in production right now. ## The headline result **Only four big-studio home pages survive image removal, and two barely.** EVE's home page is a `<video>` and three headings. Albion's is 47 headings, every one a caption on a photo. **RuneScape 3 renders its section headings as PNGs of words** with the real text at `text-indent:-9999px`, and PoE does the same for forum category headers with `alt=""` — both sites literally have no headings with images off. So the copyable vocabulary is *not* in the big-studio home pages. It is in five places: EVE's `Frame` component, Warframe's `home.css`, the dense list pages of PoE and RuneScape, the OSRS Wiki's `.tile` tokens, and two twenty-year-old text worlds. **Count: 68 patterns survive with zero images. 8 die. 3 survive rebuilt. 2 are bugs to design out.** The zero-image law is not a handicap — nearly the whole vocabulary is CSS, and the image-dependent parts are the expensive bits that date fastest. ## Frame vocabulary **The workhorse hairline is DARKER than the surface.** PoE's forum: row `#1a1b18`, rule `border-top:1px solid #050505`, header band `#1e1f1e`, zebra `#0f0f0f` — four values inside 6% lightness, and the divider is the darkest. Panel is `border:1px solid #1b1b1b; box-shadow:0 0 3px #1b1b1b` — the shadow is a blurred copy of the border. No border anywhere in its 939 KB exceeds 2px. Westgate does the inverse (gold *lighter* than panel); worth prototyping the dark rule in #54. **SURVIVES.** **EVE's `Frame` is a full notched-panel system in `clip-path`, zero images.** The border is not a `border` — it is a filled div in `#29353a`/95% clipped to a 1px ring, over content at `#212121`/95%, so the hairline follows the notches. ~20 modifiers from three parameters: bottom-right chamfer always **10px**; notch x-range 45→108px (small) or 108→191px (medium/large); depth **5px** or **8px**. `border-radius` is `0` more often than any other value. Cautions: the ring can't animate `border-color`, absolute notch offsets can exceed a narrow card, and a clipped element can't show `box-shadow`. **SURVIVES.** **Cheaper notch, use this first:** EVE's card tab is three borders on a zero-height element — `border-bottom:5px solid #29353a; border-left/right:5px solid transparent; width:83px`. Four lines, works at any density, and unlike `clip-path` it can ride a forum row. Warframe's wiki does a parallelogram plate with `skew(30deg)` + inner `skew(-30deg)`. **SURVIVES.** **RuneScape has one panel rule, repeated 14× verbatim:** `background:black; border:2px solid #382418; padding:7px 15px` — nav boxes, pagination, tabs, dropdowns, login bar, hiscores buttons. It becomes a bevel by recolouring edges: `border-top:2px solid #8E7246` over `border-bottom:2px solid black`. RS3's pressed button does the four-colour version (`top/left #9f4000`, `bottom/right #f0d079`). Soft surfaces: `rgba(60,39,11,.5)` wash + `box-shadow:0 0 3px 3px #4a381f` — no offset, 3px blur, 3px spread: **a second frame, blurred**. Four values carry all of it. **SURVIVES.** **Warframe's `home.css` is the most stealable file found.** Gold `#ddc57d` as `hsla(45,59%,68%,α)` so alpha moves without the hue. Alpha ladder **.5 / .15 / .1** (card border / structural hairline / wash) — Westgate's is .08/.14/.22, so Warframe's top rung is more than double. Then: - **a border that dissolves** — `border:1px solid hsla(45,59%,68%,.15)` on an overlay `:before` with `mask-image:linear-gradient(180deg,#000,rgba(0,0,0,.1))`, full at top, 10% at bottom; - **a rule that bleeds light** — `border-top:1px solid hsla(45,59%,68%,.5)` + `linear-gradient(180deg,hsla(45,59%,68%,.1),transparent 32px)`; - hover raises border alpha to 1 and swaps the offset shadow for a 0-offset coloured glow, never changing weight; - `filter:drop-shadow(0 4px 8px rgba(0,0,0,.5))` instead of `box-shadow`, so the shadow follows a clipped or masked shape. **All SURVIVE.** **Gradient borders**, arrived at independently by two sites: Warframe `border-image:linear-gradient(to left,#1d1c20 50px,var(--panel-accent-color) 50px) 1` (first 50px of the edge accented); Albion `border-image:linear-gradient(90deg,#FFFFFF00,#FFD972FF 50%,#FFFFFF00) 1` (fades to nothing at both ends). Caveat: a gradient `border-image` **kills `border-radius`**. **SURVIVES.** **A ribbon made entirely of borders** — Albion's wiki banner: `background:#912e16; border:.875em solid transparent; border-left-color:#531405; border-right-color:#531405; line-height:0`. A banderole, a very gothic shape, with no asset at all. **SURVIVES.** **Parchment as an inset shadow, not a texture** — Albion: `background-color:#f6f5f1; box-shadow:inset 0 0 120px rgba(102,81,35,.28)`. That is the entire aged-paper effect. Westgate's `inset 0 0 34px rgba(96,32,68,.11)` is this device with plenty of headroom on both radius and alpha. **SURVIVES.** **Panels with no border at all:** Albion's cards are a `hsla(50,8%,72%,.5)` wash + 10px padding + 18px rhythm, bleeding `margin:0 -6px` past the column. Project 1999 has *no border property on its panels* — `cellspacing="1"` over `.tborder{background:#D1D1E1}` makes every cell gap a hairline, with three header tiers (`#869BBF`/`#5C7099`/`#3E5C92`) and two zebra values carrying the whole hierarchy in 6 KB of inline CSS. **SURVIVES.** **What dies:** PoE's ornate crests are **nine absolutely-positioned PNG slices** per frame (`tl`/`tr` 50×32, `bl` 52×34, `br` 51×35, two repeat-y side strips, two flanking pieces) plus `border-image:url(border1.png) 3 3 3 3 repeat`; its status bar is a 359×41 sprite window; its top nav is a 119×50 sprite with `text-indent:-9999em`. RuneScape's parchment caps, `border.webp` (slice 62), 26 nav bullet GIFs. RS3's `point-border.png 40` and `box-border-gold.png 18 round`. Warframe's 105px filigree strips. Two things to notice anyway: **ornament always lives in the left/right gutters of the column, 23–105px wide, never inside the content** (PoE, Warframe and Albion's wiki reached this independently; Albion drops it entirely below 1385px). And Warframe recolours instead of re-exporting — `background-color:var(--shop-filigree-color,#ddc57d); mask:url(bg-shop-filigree.svg)`. **If Westgate ever gets one ornament asset, ship it as a mask over a token, not as a coloured image** — one file then serves every state, accent and forced-colors mode, versus PoE's nine slices and thirteen separator PNGs. ## Section headers: when one earns ornament **Warframe states it outright in shipped CSS — two parallel scales, not a header plus decorations.** `.h1alt/.h2alt` = title face + `text-transform:uppercase` + 3rem/2.5rem + `line-height:1.3–1.4`. Plain `.h5/h5` = subtitle face + `text-transform:none` + 1.4375rem + `line-height:1.25`. Same component, one class swap. And a section title earns emphasis by overriding **one token** — `.HomeNewsTitle{--color-title:#ddc57d}` — not by gaining a rule. Markup is `<h2 class="h1alt HomeNewsTitle">`: size class decoupled from semantic level. **The rule: a header earns ornament by switching to the display face and uppercase. It does not earn ornament by gaining a rule, a flourish or a background.** **SURVIVES.** **The plaque — the cheapest big win, and Westgate has nothing like it.** OSRS: `.banner__options{background:black; border:2px solid #382418; display:inline-block; padding:3px 15px; margin-top:45px}` wrapping the `h1` plus one secondary link. `display:inline-block` is the whole idea — a **name plate, not a band**. Reduced form on the same page is a bare `<h2 class="slu-quick__title">`. And `.home .banner__options{display:none}` — **suppressed on home, because the logo does that job; you don't get both.** Type ladder is five `em` steps and nothing else: 3.5 / 1.9 / 1.5 / 1.3em / 15px. No tracking, no uppercase, no rules. **SURVIVES.** **The straddling legend** — same site: `.home-nav__box{border:2px solid #382418; position:relative}` with `.home-nav__title{position:absolute; top:-7px; width:100%; text-align:center}`. A title sitting *on* its own panel border; on black the border just stops behind the text. A `<fieldset>` legend by hand. **SURVIVES.** **The plaque is also the one primitive Albion carries across the density boundary.** Four components share one rule — `.news-banner__headline, .news-category-header, .titled-box__headline, .top-table__headline { background:#441003; margin:0 -6px; padding:8px 10px; font-size:1rem; font-weight:700; text-transform:uppercase; color:#fff }` — and the **wiki repeats it byte-identically** at `#531405` with `margin:-0.5em -0.5em 0.5em`. `margin:0 -6px` is the bleed-past-the-card-edge trick: the header is 12px wider than its container, so it reads as a band nailed across the card rather than a row inside it. (Its `box-shadow:inset inset …` is a shipped typo, so the plaque is in fact flat.) Strongest evidence for map #47's one-shell law: **the thing that survived the density boundary was the plaque — not the frame, not the texture, not the layout.** **SURVIVES.** **The tick** — EVE: `:before{content:""; background:#5ccbcb; width:4px; min-height:30px}` (6px/34px at wide), `margin-left:15–20px`, on a heading with `letter-spacing:0`. Note EVE tracks its small labels heavily and its headings not at all — exactly Westgate's Engraving Rule. **SURVIVES.** **The full-ornament centred header** — EVE: uppercase `h3` 36px weight 500 tracking 0, over a light uppercase `h4` 26px weight 300 tracking `.05em`, over `.headings_line{background:#154f5b; height:3px; margin:0 auto}` animating width 0→340px. Two details worth stealing: **the rule is `#154f5b`, a *darker* relative of the accent `#5ccbcb`, so it frames without competing**; and `line-height:55px` on a 24px title reserves the air that makes it read as a title page rather than a row. PoE's wiki does the eyebrow version with a bloom instead of a rule: `.h1-1{font-size:26px;letter-spacing:.07em}` over `.h1-2{font-size:38px;bold}`, both on a shared `radial-gradient(ellipse at center, rgba(154,2,0,.9) 0%, transparent 65%)`, heading `text-shadow:0 0 10px rgba(209,28,0,1)`. Very close to Westgate's existing etch — the radial bloom behind the heading is what's missing. **SURVIVES.** **`.tile h2 { border:none }` — the heading that knows it is inside a panel.** OSRS Wiki: MediaWiki's default `h2` carries a bottom rule; the tile strips it, because a heading inside a bounded panel doesn't need its own boundary. **Header ornament is conditional on the container.** Its tokens are also the model for #55 — named for the *panel*, not the colour: `--tile-border-color:#cabe9b`, `--tile-background-color:#f9f3eb`, `--tile-dark-bg:#5d6773`, plus a six-step `--body-main/-light/-mid/-dark/-border` ramp. Its byline is an eyebrow *before* the heading with `.tile .byline + h2{margin-top:-0.5em}`. **SURVIVES.** **Ornament as a character.** Project 1999 prefixes every plaque header with `&raquo;` and **encodes nav depth in the number of glyphs** — `» Project 1999`, then `» » Forum Home`, `» » Wiki`. Zalanthas uses `✦` as a section divider. Draw it (`::before{content:""}`, aria-hidden) rather than typing it, but the idea — one repeated mark meaning "this is a section" — is free and is the whole reason P1999's sidebar reads as designed. Note it also puts live data in the header string: `» Online Users: 25,581`. **SURVIVES.** **Ornament as tracking — Discworld MUD, the purest case.** `h1{letter-spacing:3pt; font-size:14pt; bold}`, `h1.topborder{border-top:1px solid #BDB7B1}`, `h3{border-bottom:1px solid #BDB7B1}` — **heading level encoded by which side the rule sits on**, with two named opt-outs (`h3.subhead`, `h3.plain`) proving the rule is the default. `#sidebar a{font-variant:small-caps}` is the second and last ornament. Four colours total (`#fff`, `#444`, `#BDB7B1`, `#E7E5E3`), exactly **one** bounded panel type (`blockquote`), zero radius, zero shadow. This is the floor for an artless site, and it is defensible. But read it as evidence *for* Westgate's Engraving Rule, not against: Discworld gets away with 3pt on a compact humanist sans; Cinzel already carries the engraved weight in its letterforms and would disintegrate. **The failure mode, cited only as that.** PoE's forum category headings are server-generated PNGs — the base64 decodes to `{"string":"…","size":18,"fontColour":"rgba(206,197,159,1)","tPad":3,"lPad":6}` — shipped with `alt=""`, so a screen reader gets nothing where the section name should be. RS3 does the same plus two 70×80px sprite ornaments as `:before`/`:after`. **DIES, and should.** The buried correct instinct: PoE reuses that same `#cec59f` live in CSS — `.layoutBoxTitle{color:#cec59f; font-size:180%; text-shadow:0 0 2px rgb(171,156,91)}`. ## Divider inventory Full 40-entry table in the doc, at weights **1 / 2 / 3 / 4 / 5 / 8 / 25px + glyphs**. The distinct kinds, all zero-image unless noted: 1px — darker than surface (`#050505` on `#1a1b18`); olive card rule (`.news-article:after{background:#6B7B17;height:1px;bottom:0}`, so first/last card have no stray edge); neutral `hsla(0,0%,69%,.2)`; gold at .5; gold at .15 fading down via mask; fading at both ends (two techniques, below); part-accented along its length; inset 5% each side (`.forumTable hr{margin:0 5%}`); recoloured by role; 50%-width centred; top rule + 32px wash; full grid on both axes (RuneScape `th,td{border:1px solid #382418}`); vertical 1px between nav items (`height:50%; transform:translateY(-50%)`); from `cellspacing`; top rule (Discworld h1/h2) vs bottom rule (h3); dashed (`1px dashed #80808080`); dotted with `cursor:help`; and a **double rule bevel** — RS3 dropdown rows `border-top:solid 1px #223843; border-bottom:solid 1px #000`. 2px — heading underline; dashed; **top-light/bottom-dark bevel** (`border-top:2px solid #8E7246; border-bottom:2px solid black`); `border:2px outset`. 3px — centred animated `#154f5b`; heading underline. 4px — vertical tick; blockquote spine `border-left:4px solid #ECEDEE`; sub-nav underline. 5px — three-border trapezoid tab. 8px — accent spine `border-width:1px 1px 1px 8px`. 25px — CSS trapezoid bezel. **The rule that dissolves, two techniques — pick by whether you need radius:** ``` /* A. border-image + gradient. Simplest. Kills border-radius. */ border-style:solid; border-width:1px 0 0; border-image:linear-gradient(90deg,transparent,#c2a35a 50%,transparent) 1; /* B. masked 1px block. Keeps radius, any edge, any direction, and gives the fading *frame* with no extra vocabulary. */ height:1px; background-color:#c2a35a; -webkit-mask-image:linear-gradient(90deg,transparent,#000 50%,transparent); mask-image:linear-gradient(90deg,transparent,#000 50%,transparent); ``` **Route B should be Westgate's house divider.** **PoE proves both routes in one codebase and the cheap one wins.** It needs a divider whose colour encodes a class. For item rarities it shipped **13 separate PNGs** (7–13px, one per rarity). For forum post roles it shipped **one `hr` plus a `border-color` override** — `.staff/.support/.valued-poster/.valued-thread .content-container hr{border-color:#a87a00}`. Same requirement, 13 files versus one line, and the one-line solution is on the page players look at daily. Its own **wiki** goes further and tokenises outright: 20 `--poe-color-*` properties + one `.item-box` frame + a modifier class per rarity. That is the shape #55 should take. **Role emphasis with no fill:** `.forumTable tr.staff{outline:1px solid #db9f00; border:1px solid #db9f00}` — five roles, five colours (staff `#db9f00`, support `#867747`, official `#5e84ab`, valued-poster `#9d9d9d`, valued-thread `#614506`), both `outline` *and* `border* because table rows are unreliable about which paints. Same five recolour the quote blocks and the `hr`. No tinted row, no badge, no icon. Directly applicable to Westgate's staff/DM posts, and better than a tinted background under the Sparing Red Rule. **SURVIVES.** **The separator that doesn't get copied:** Jagex draws all of them as pseudo-elements — `.news-article__time:before{content:'|'; margin:0 5px}`, `.server-list__status-link:before{content:'['}` / `:after{content:']'}`, `.breadcrumb li:before{content:'>'}`. So `Game Updates | 22 July 2026` has a pipe that isn't in the markup and a copied timestamp comes back clean. The OSRS Wiki reaches it from the other side: `<span style="user-select:none"><b>•</b></span>`. **SURVIVES.** **On tracked caps — the honest count corrects the obvious guess.** `text-transform:uppercase` occurrences: Albion **109**, Warframe `app.css` **77**, EVE **72**, RS3 responsive **all of h1–h6 globally**, PoE **6** in 939 KB, OSRS **1**, Arelith/P1999/Discworld **0**. But `letter-spacing`: Albion **two uses in 631 KB**, RS3 responsive **none in 388 KB**, Arelith **zero**, OSRS one, PoE mostly *negative* (`-.025em` ×19). Only EVE has a real tracking scale (`.01–.2em`) and it applies it **exclusively to uppercase while giving prose negative tracking (`-.01em`)**. So: **uppercase is near-universal; tracking is rare and caps-only.** DESIGN.md's Engraving Rule matches EVE's actual practice exactly — keep it tight. The warning is against reaching for more *tracking* when a header needs presence; every site here answers that with the display face, the frame or the colour. **For #59: two of the largest game sites ship Cinzel in production.** PoE's font chunk has `@font-face{font-family:Cinzel; src:local("Cinzel-Regular"),url(/font/Cinzel-Regular.woff)}` plus `Cinzel-Medium`, alongside OptimusPrincepsSemiBold, FrizQuadrataC and four Fontin cuts. RS3 declares `@font-face{font-family:"cinzel"}` and uses it on tabs (`font-size:2.2em; letter-spacing:0.04em`), sidebar article titles, and inside hand-typed news posts. Also: **nobody in the survey pairs two sans faces** — RuneScape (Kingthings Petrock + Arial), Albion (Lora + Open Sans), Arelith (Neverwinter + Roboto Slab), PoE (Fontin/Friz/Optimus + Verdana). Cinzel + Jost is the same shape. ## Iconography **Very few, almost all load-bearing. A stat gets a word, not a picture.** PoE prints `<strong>Threads:</strong> <span>14899</span>` and `Posts: <span>31657</span>` — no icon, no tooltip; its only load-bearing icon is a 15×15 sprite for read/unread state. OSRS has skill icons in HiScores (the icon *is* the row identity) and three Grand Exchange trend markers; the whole home page has **zero UI icons**. EVE has essentially none in CSS. Arelith's 18 destination tiles carry **no icons at all**. P1999 has two icon types in the entire site. Where they'd reach for an icon, they use words or CSS: OSRS's sort controls are links whose text is literally `ascending` and `descending`; its sort arrows are `linear-gradient(#1d4f1b,#61ca5c)` circles with a CSS-triangle `:after` (red variant `#990A03→#D83530`); its external-link mark is a 24-point `clip-path:polygon` in `#90c040`. EVE University's wiki main-page search control is a `<div role="button">` labelled `🔍 Search the EVE University Wiki` — honest about the cost of an icon system. **Budget for Westgate: an icon only where the icon is the data.** Two notes — Westgate inherits Bootstrap Icons / Font Awesome via Harmony, so icon fonts and inline SVG are *not* "images" for the zero-image law; this is the one place the law doesn't bind. Which makes `GAME_ICONS.md` matter more than any ornament budget: decorative icons cut first, state icons last. And Warframe's technique — `--icon-filter:invert(1)`, `.Filigree.is-themed{filter:var(--filter-filigree)}`, 18 faction variants all one property — is how one monochrome source serves gold, ash and wax-seal; prefer `currentColor` on inline SVG over a `hue-rotate` chain. **SURVIVES REBUILT.** ## Texture — and the recommendation is: don't **Only one site ships one.** Warframe: `background: top/172px 104px repeat url(bg-pattern-lotus.png); opacity:.25; position:absolute; inset:0; z-index:-1` on three section pseudo-elements over `#111`. Section-scoped, never global, **never behind body text**. PoE's texture strip is overridden by a gradient on the next line and never renders. Albion ships none (its parchment is the 120px inset glow). EVE's `stars.jpg` is art, not texture. The **only CSS-generated texture in the entire survey** is the Warframe wiki's `repeating-linear-gradient(-45deg, …)` hazard stripe. **The arithmetic on cheap displays is unkind.** A tile at `opacity:.25` over `#111` (RGB 17) with darks near RGB 40 moves each pixel by about **6 levels out of 255**. A 6-bit TN/budget IPS panel quantises to 64 levels — steps of 4 — so a 6-level swing is one or two steps: it reads as **banding, not grain**, and panel dithering makes it crawl on scroll. On OLED, near-black is genuinely black and the same 6 levels are clearly visible, so it's *stronger* than intended. One declaration, three different outcomes. **Verdict: DIES as shipped, and CONDITIONAL even with images.** If Westgate wants grain, generate it (`repeating-linear-gradient` at a fractional angle, or inline SVG `feTurbulence` data URI) — but the same quantisation applies, so: never behind body text; keep the swing above the 6-bit step (~8–10 levels, which means it will *not* be subtle — pick one); drop it under `prefers-reduced-transparency` / `prefers-contrast:more`. **Honest recommendation: DESIGN.md already gets its texture from the velvet gradient, and Albion shows that device has room (120px radius, 28% alpha vs Westgate's 34px/11%). Warframe's live site and everyone else's absence both say stop there.** ## Home-page IA with no hero art Heading counts and survival: EVE **3** (a `<video>`) — no. Albion **47**, all photo captions — no. RS3 news **0 rendered** — no. Warframe 16 — yes. OSRS 11 — mostly. Arelith ~20 — structure yes, mood no. **Project 1999 — yes, completely.** Discworld 4 — yes. **The pages that survive are the ones whose home page is a news list or a directory, not a showcase.** **The block order, consistent across all survivors:** 1. Identity band (logo + nav). Nothing above it but a login link — Discworld's `<p class="screenreader"><a href="#welcome">Skip to main content</a></p>` as the literal first element in `<body>` is the one correct exception. 2. One-line claim of what this is: `h1` + one short paragraph. OSRS 67 words, Arelith 13. 3. A small fixed set of primary actions — 3 CTAs (OSRS "Try Free" / "Become a Member" / "Visit HiScores" plus a small foot-link), or none, with them in the nav (Arelith). 4. **Optional single art slot** — one `<a><img></a>` banner that collapses (OSRS), or one fixed backdrop on its own layer (Arelith). **Never a grid of art holes.** 5. **News, exactly four to five items.** OSRS 4–5, Warframe 4, P1999 5 announcements. Nobody ships three or ten. 6. Destinations — one-sentence tiles (Arelith), a plaque rail (P1999), or further news-ish blocks (Warframe). 7. Footer link columns, often with the in-fiction voice intact (Discworld's legal footer: *"Brought to you by CMOT Dibbler's Sensational Sausages; buy one while they're hot."*). **Status is never above the fold, with exactly one exception:** OSRS puts its player-count sentence third on the page. Everyone else has it in a rail plaque, a directory tile, a one-line link, or nowhere. **The news item worth copying verbatim** (OSRS, and RS3 uses the same geometry and the same `#6B7B17` rule — it has survived two brand redesigns): ``` <article class='news-article'> <figure class='news-article__figure'>…<img …></figure> <div class='news-article__details'> <h3 class='news-article__title'><a>Summer Sweep-Up Gear &amp; PvM Changes</a></h3> <span class='news-article__sub'>Game Updates <time datetime='2026-07-22'>22 July 2026</time></span> <p class='news-article__summary'>… <a class='news-article__read-more'>Read More...</a></p> ``` `.news-article{width:540px;padding:20px 0}`, `:after{background:#6B7B17;height:1px;bottom:0}`, `__figure{float:left;width:175px}`, `__details{float:right;width:350px}`, `__sub{font-style:italic}`, `__time:before{content:'|';margin:0 5px}`. **The thumbnail is a separate `<figure>` sibling — delete it and the details block is a complete, well-formed news item** (the 350px float just becomes 540px). Category and date share one italic meta line with a real `<time datetime>`. The affordance is *inside* the sentence, not a button below it. **The best zero-image answer to "no hero art" is Warframe's masthead:** ``` .MastheadFooter:before{ background:radial-gradient(80% 100% at bottom, transparent 72%, #ddc57d 75%, hsla(45,59%,68%,.1) 78%, transparent 100%) } #home{ --masthead-footer-height:10vw; --masthead-gradient-lower:72%; --masthead-gradient-upper:78% } ``` A gold horizon glow, one gradient, 10vw tall, over a flat black field. And **the art slot degrades cleanly because the overlay is `linear-gradient(to bottom, transparent 0 56px, #000 88px)`** — with the art absent, that gradient over nothing is flat black and no layout moves. Also note Warframe's lead story is `grid-row:1/span 3` + `font-size:2.5rem` against the others' 1.1875rem — **hierarchy by span and type size, not by bigger art**, so it survives losing the images. Its tiles ship `alt=""`: Warframe declares its own news thumbnails decorative. **Project 1999 is the leanest working home page found**: logo, login row, navbar, then two columns — prose + 5 announcements, and a `width="190"` right rail of eleven collapsible plaques (`» Navigation`, `» Log in`, `» Online Users: 25,581`, `» Server Status`, `» Donate`, `» Stats`, `» Current Poll`, `» Recent Threads`…). **A fixed-width rail of small labelled plaques is a complete home page.** **Arelith needs a correction, and it's the useful part.** Structure transfers perfectly: `h1` + 13-word tagline, then **four press pull-quotes with attributions as the above-the-fold** (*"Arelith's players sink themselves into a world where their actions feel consequential." — Vice*, plus PC Gamer, Massively OP, Engadget), then **18 destination tiles, each a linked title plus exactly one sentence, no icons, no images**. Its display face is scoped to two strings only — `--chakra-fonts-accent:'Neverwinter',serif` on the logo and the one hero heading; every other `h2` is plain bold 1.25rem with no rule; `letter-spacing` appears **zero** times. But: **its atmosphere is 22 dimmed in-game screenshots behind translucent glass** (`position:fixed; filter:grayscale(30%)` + 50%-black scrim + 60s crossfade, panels `blackAlpha-700` + `backdrop-filter:blur(20px)`, all borders zeroed by Chakra preflight). Strip the images and you get black glass rectangles with Roboto Slab in them. **Arelith is the cautionary case, not the model** — right structure, mood leased entirely from screenshots. Westgate cannot make that trade, which is exactly why it needs the frame vocabulary Arelith skipped. (Two things to steal anyway: the one-sentence-per-tile rule, and press-quote-shaped text as an above-the-fold — Westgate has no press quotes but has epigraphs, proclamations, ledger entries; **text set as a quotation reads as content, where a large empty ornament reads as a missing image**.) ## Status and server widgets **Half of them don't have one.** **EVE has nothing** — I checked the home SSR payload, the 1.07 MB JS bundle, the news pages, the forums, `/status` and `/api/server-status`; grepping for `tranquility|players online|server.?status` returns `backend:"tranquility"` and a recruitment URL, neither a widget. The count lives only in ESI: `{"players":20008,"server_version":"3444265","start_time":"2026-07-27T11:02:58Z"}` — **the absence of a 200 is the offline state.** Community sites display it; CCP doesn't. Albion's is a bare JSON endpoint (`/status` and `/serverstatus` both 404, `status.albiononline.com` 403). Warframe's world-state widget lives on the community *wiki*. PoE has none at all — `#statusBar` is the account bar. **The one good implementation is RuneScape's world list** (`/slu`). Five columns — **World, Players, Location, Type, Activity** — 318 rows: ``` Old School 93 | 30 players | United States | Free | 750 skill total Old School 183 | 98 players | United States | Free | PvP Arena (Legacy Duels) Old School 117 | 125 players | United States | Free | - ``` Six load-bearing details: 1. **The aggregate is a sentence, not a stat block** — `<p class='player-count'>There are currently 68,432 people playing!</p>`, `font-size:1.3em; text-align:center`. No big number, no label, no gauge, no icon. **It cannot look broken because there is no chrome to be empty.** 2. **The unit lives in the cell, not the header** — header `Players`, cell `37 players`. A cell read out of context still makes sense; a screen-reader row is a sentence. No singular form in 318 rows; `0 players` renders as-is. 3. **Missing data is a literal `-`.** Not blank, not "N/A", not "None", not a hidden cell. One character that keeps the row's rhythm and claims nothing. 4. **No "Full" and no "Offline" string anywhere** — capacity is the number alone. 5. Controls are words (`ascending`/`descending`), brackets are CSS (`:before{content:'['}`). 6. **State recolours the text, not the fill** — `.server-list__row--pvp .server-list__row-cell{color:red}` over a uniform `#362D1A` with **no zebra**. 70 `Activity` strings do the rest in plain words (`Deadman - Permanent`, `High Risk World`, `Role-playing`, `Trade - Free`). Header row bevel: `background:#362D1A; border-top:2px solid #8E7246; border-bottom:2px solid black`. **SURVIVES, 100% — every part is text in a table.** **Discworld's home form is one sentence with no box:** `<p><a href="…?status">Game Status</a>: Driver <a>rebooted</a> about 33 days ago, 49 people logged in.</p>` — the label *is* the link, the value is inline prose. Its detail page is `<h1>System Status</h1>` + a bare unstyled label-colon-value table (`Driver uptime: 33 days and 4 hours`, `Number of users: 44`, `Using MCCP: 36`, `Plain telnet: 8`, `Objects: 175759`, `Memory usage: 2140 MBytes`) where `44 = 36 + 8` and two labels link into the in-game docs. **SURVIVES.** **Two named bugs to design out, both live:** - **A server-rendered `0` as the resting value.** RS3 ships `<span id="playerCount">0</span> Online` and re-polls only when `<1 || isNaN` — so a failed poll reads `0 Online` indefinitely, and on a cold fetch that is exactly what it shows. Arelith's `/portal` ships `<h2>Total players: 0 (0 Hidden)</h2>` server-side, so with JS off or slow it **states that the world is empty**. Not a skeleton, not an em-dash — a confident `0`. **A resting `0` is indistinguishable from an outage and, unlike a missing value, looks authoritative.** - **Colour hardcoded on the value instead of derived from state.** P1999's status plaque prints `<b><font color="green">UP<br>267` per shard (`Green`/`Blue`/`Red`, labels `Status:` / `Players:` / `Total Players:`, `<hr>` between) — **a shard that went down would print its `DOWN` in green.** Tags left unclosed, no `DOWN` string and no unknown placeholder anywhere in the markup. **Real contracts observed.** Albion, 56 bytes: `{ "status" : "online", "message" : "Server is online." }` — a machine enum plus a human sentence rendered verbatim, so the page never has to invent copy. Its weakness: **no third value**, so a fetch failure is indistinguishable from an outage. Arelith's `/api/portal` is richer: per shard `{id, name, address, port, playerCount, state, startup}` plus a top-level `hidden` count. `state` is a **numeric enum** (`8` everywhere) with no published mapping; `id`s are non-contiguous (1,2,5,6,8,9 — retired shards left gaps); `startup` is per-shard, and five of six within 10 seconds of each other makes **a coordinated restart visible in the data** — uptime per shard tells you more than a boolean. **Warframe's wiki has the label grammar for a clock**, and it removes the loading problem entirely: three forms — `"<Entity> in"` (recurring reset), `"<Entity> arrives in"` (scheduled), `"<Entity> is present for"` (window currently open) — with epoch, period and a format mask (`D h m s`) as data attributes, computed client-side from a server-seeded epoch. **There is no loading state and no empty state because there is nothing to load.** The only placeholder string in the whole page is the word `Unknown`. **Proposed contract for #51**, synthesising Albion's shape + Arelith's richness + the three lessons: ``` { "state": "online" | "offline" | "unknown", "message": "The city keeps its hours.", "servers": [ { "name": "…", "players": 12, "since": 1785219140 } ], "hidden": 0, "checkedAt": 1785226820 } ``` `state` drives styling (never the template), `message` renders verbatim, `since` gives per-shard uptime, `checkedAt` lets the UI say *"last heard from the watch 4 minutes ago"* instead of pretending the number is live. Resting render is **a sentence** — a sentence has a natural unknown form (*"The gates are unattended."*) where a stat block's unknown form is a hole with a border round it. Missing field inside a row is `-`. **Never render an empty framed panel:** every ornamented empty container in this survey reads as a failed image; Warframe's `alt=""` and OSRS's collapsing `<a><img></a>` both show the right instinct — the optional thing is a child that *disappears*, not a slot that stays. Under the Sparing Red Rule, `offline` is a state colour and `unknown` is Dust Text; red for "we couldn't reach our own endpoint" over-states it. **One thing to steal outright:** Arelith's portal also carries an **in-fiction dual calendar** — `15:15 on day 22 of month 3 (Ches), 190 AR (1390 DR)`. Arelith Reckoning plus Dale Reckoning. **The best example in the survey of a status widget carrying setting rather than data — and it needs no server feed at all.** Westgate has a city, a court and a calendar. ## Density **The measured gap is about ten to one, on one scale.** Showcase section padding: EVE `120px`×7, `100px 0`×5, `80px`×6, `.Download{padding:90px 0 230px}`, article `padding-top:200px`; Warframe `128px`, `80px`×7, `60px`×6; Albion `120px`, `0 150px`, `60px`×5; OSRS `.content{padding:50px 75px}`; PoE `150px`, `140px`. Dense cells: PoE **`5px` ×70** (its single most common value in 939 KB), `10px`×35, `4px`×17, `2px`×18; EVE `20px`×26, `10px`×23; Warframe `8px`×18, `8px 16px`×7; Albion forum `7px`×24. **Not two systems — one scale at opposite ends.** Westgate's `--wg-space-*` tops out at `2rem`, so **there is no token for a showcase rhythm at all**; #56 needs rungs above it or showcase pages get hand-written pixels. **Widths.** OSRS `.page-wrap{width:815px;padding:0 50px}` → **715px content**; PoE forum and all showcase pages share **920px**, with `vertOrnate1` giving `820px` inside it — **50px of ornament gutter per side, ~11% of the column**; EVE shell `1310→1370px` (`xlWide 1680px`) but **prose capped at 850/700/600/500px**; Warframe `--page-content-width:1760px` but single-column `max-width:800px`; Albion marketing `67.5rem = 1080px`, forum `1240px`, wiki `1385px` (dropping its side ornament below that); RS3 legacy `1000px`, responsive `2600px`; P1999, Discworld and Aardwolf have **no `max-width` at all**. Westgate's `1420px` is a reasonable *shell* but far too wide as a *measure* — **prose needs its own 715–850px cap.** And if flanking ornament is wanted, that's ~11% of a column that isn't 1420px. **The uncomfortable finding: most studios don't carry ornament into the forum.** - **RuneScape deleted its forum rather than theme it.** `secure.runescape.com/m=forum/forums` **302s to a news post**, "A Farewell to our Forums" (`<time datetime='2024-03-28'>`), pointing at Discord, Reddit and the community wiki. The RS3 header still shows a "Forums" nav item; it links to the farewell. - **EVE's forum is stock Discourse.** Its palette file sets **seven seed values** (`--primary:#dddddd; --secondary:#222222; --tertiary:#0f82af; --quaternary:#c14924; --header_background:#111111; --highlight:#11263b`) and lets Discourse derive ~80 ramp steps. Plus exactly **one** custom line in the document: a webfont `<link>`. No `Frame`, no `clip-path`, no chamfer, no notches, no tracked caps. **The palette doesn't even match** — forum links `#0f82af`, site accent `#5ccbcb`. Its category table is down to **two columns: `Category` | `Topics`**. - Albion's is the same with WoltLab. The OSRS Wiki is a partial exception: it **does** carry a parchment palette — a six-step token ramp, better organised than the game site's four hand-picked browns — but shares **no component, no face and no measure** (2px `#382418` on black vs 1px `#cabe9b`; Kingthings vs default; 715px vs `40em` tiles). Same material, different vocabulary. - **Only Path of Exile honours "one shell, two densities":** its forum *is* `.layoutBox1 .layoutBoxFull .forumTheme` — the same panel component as its marketing pages, same 920px, same near-blacks. Achievable precisely because that vocabulary is cheap: 1px `#1b1b1b`, 2px radius on the end caps, a 3-stop gradient band, a 4px warm inset. **So map #47's one-shell law is more ambitious than four of six studios manage. The lesson: the shared vocabulary has to be cheap enough to survive a 25px table header row.** EVE's `clip-path` frame is beautiful and cannot ride a forum row. PoE's band can. The three-border tab can. The plaque is the one thing Albion actually carried across. **Design for `padding:5px` first and let showcase surfaces add — never the reverse.** **And the fallback if the law proves too expensive is not "make the forum plain".** It's EVE's and Albion's real fallback: **carry the identity in the copy.** Every EVE category has a one-sentence description and **13 of 22 begin with the same three words** — *"The place for…"* / *"The place to…"* (`Fiction Portal` — "The place to discuss the lore of New Eden, and post in character."). Albion puts the game's own zone metaphor on the boards: `Beginner's Questions` — *"This is the forums' 'Green Zone'."*; `Forum Banter` — *"This is the Black Zone of the forums. … Enter at your own risk."* **No CSS, no assets, and it is the highest-identity-per-byte move in the whole document. Available today.** **Mechanically**, express density as Warframe does — one variable block per surface (`#home{--masthead-footer-height:10vw; --shop-bar-height:4rem; …}`) with `var(--token, fallback)` in every component, so a component is correct unscoped and re-tuned by one wrapper class. Better than PoE's seven theme classes sharing one rule. **Caution for #55 from the same file:** Warframe declares six font tokens (`--font-family-navigation/-body/-title/-subtitle/-form/-button`) and **all six resolve to `Roboto,Arial,Helvetica,sans-serif`**. Name the axes you actually vary. ## Against DESIGN.md / PRODUCT.md as they stand **Confirmed:** gold as edging not paint (Warframe's identical `.5/.15/.1` ladder); hierarchy by panel tone and border alpha not shadow (PoE's four values inside 6%); tracked caps restricted to small labels (EVE tracks only its caps and gives prose *negative* tracking; RuneScape ships one uppercase declaration; PoE tightens); Cinzel (PoE and RS3 both ship it); serif display + humanist/geometric sans body (nobody pairs two sans faces); red as state only (no site uses its danger hue as a surface); and **restraint over ornament** — Discworld and P1999 carry two decades of identity on four colours and no ornament at all, which is the strongest confirmation in the document. **Missing, worth adding in #54, ranked by value per line:** (1) the plaque; (2) the masked fading rule as the house divider, which brings the fading frame free; (3) the radial horizon glow as the no-hero answer; (4) the role ring; (5) the three-border trapezoid tab; (6) the band frame; (7) the straddling legend; (8) `.tile h2{border:none}` — heading ornament conditional on container; (9) `content:'|'` separators; (10) `filter:drop-shadow` for masked surfaces; (11) a wider inset bloom (Albion's 120px/28% vs Westgate's 34px/11%); (12) the border-only ribbon if a banderole is ever wanted. **Deliberately not transferring:** EVE's chamfer geometry (the `clip-path` technique is perfect, but a 10px 45° cut is a sci-fi signature — the gothic equivalent is a pointed or ogee edge, also a `clip-path:polygon` problem, so keep the technique and reject the geometry); tiled texture; Discworld's 3pt tracking (right instinct, wrong typeface); any ornament needing an asset (every site with one maintains 10+ PNGs); Warframe's six-token font contract. ## Inputs to sibling tickets - **#51** — the contract above, the sentence-not-stat-block resting render, `-` for a missing field, the two named bugs (`0` as resting value; colour on the template), epoch-seeded client-side computation where the datum is a clock, and the in-fiction date line as a status widget needing no feed. - **#54** — the twelve components, plus the must-work-at-`padding:5px` test. - **#55** — PoE's wiki `--poe-color-*` set and the OSRS Wiki's `--tile-*`/`--body-*` ramps as the worked examples (tokens named for role or panel, not colour); Warframe's six identical font tokens as the anti-pattern. - **#56** — `1420px` is fine as a shell, far too wide as a measure (prose 715–850px); spacing scale needs rungs above `2rem`; density as one variable block per surface class; ornament gutters cost ~11%. - **#57** — the seven-step block order, four to five news items, one sentence per tile, the plaque rail. - **#59** — PoE and RS3 both ship Cinzel; display-face sites tighten tracking rather than loosen it. ## What this does not answer **Wiki reader typography has no good reference.** All five wikis read are community MediaWiki installs; the best shares a palette with its game site but no component, face or measure, and the worst share nothing. **#58 will have to invent it** — the nearest transferable pieces are the OSRS `.tile` tokens and the four infobox patterns (PoE's `.item-box`, Warframe's `1px dashed #80808080` row rule, OSRS's `2px solid var(--body-dark)` label rule and its `height:0.5em; border:0` spacer-row idiom). Also unanswered: any *modern* dense list carrying heavy chrome (only PoE does it, and PoE's forum is a `<table>`); **down-state renderings** — every server checked was up, so the missing-data guidance is reasoned from the patterns rather than copied from an outage, and is worth re-checking during a real maintenance window; texture on real 6-bit hardware (5.2 is arithmetic, not measurement); and recruitment/gallery surfaces, which have no analogue in this set. Not readable, and no conclusion rests on them: Warframe forum CSS (Cloudflare), live PoE Wiki CSS (Anubis proof-of-work — Wayback used, dated in the doc), the English-language Albion board listing (Cloudflare).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Blocks
#54 The ornament and frame component set
ShadowsOverWestgate/sow-nodebb-theme
#56 Page width and density system
ShadowsOverWestgate/sow-nodebb-theme
Reference: ShadowsOverWestgate/sow-nodebb-theme#48