/* Weather Operations Mode's tracking wall (review of 2026-10-27, R7): the map at about 70% of the
 * width; beside it a pinned emergency, the board, the hour's latest changes and the spotlight; the
 * complete alert list over the wall on demand. Single-product bookmarks keep the full-screen product. */
.sm-wall .smw { background:var(--st-bg);color:var(--st-text); }
.sm-wall .smw-title h1 { color:var(--st-text); }
.sm-wall .smw-bar,.sm-wall .smw-foot { border-color:var(--st-border); }
.sm-wall .smw-kicker,.sm-wall .smw-area,.sm-wall .smw-clocks,.sm-wall .smw-foot { color:var(--st-secondary); }
.st-wall-grid { grid-template-columns:minmax(0,7fr) minmax(0,3fr);grid-template-rows:minmax(0,1fr); }
.st-wall-grid>.st-wall-map { grid-column:1;grid-row:1;min-height:0;padding:.5rem;display:flex;flex-direction:column;background:var(--st-panel); }
.st-wall-grid>.st-wall-side { grid-column:2;grid-row:1;display:flex;flex-direction:column;gap:.5rem;min-height:0;min-width:0;overflow:hidden; }
.st-wall-side>.sm-card { background:var(--st-panel); }

/* The map's head: its name, its clocks as chips, its two controls. */
.st-wall-grid .st-wall-map-head { display:flex;align-items:center;gap:.4rem .6rem;flex-wrap:wrap;flex:none;padding-bottom:.4rem; }
.st-wall-map-head h2 { font-size:var(--fs-remarks);margin:0; }
.st-wall-chips { display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin:0;flex:1;min-width:0; }
.st-wall-chip { display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .55rem;border:1px solid var(--st-border);border-radius:1rem;font-family:var(--font-body,inherit);font-variant-numeric:tabular-nums;font-size:var(--fs-bulletin);font-weight:700;white-space:nowrap;color:var(--st-text); }
.st-wall-chip::before { content:"";width:.5rem;height:.5rem;border-radius:50%;background:var(--st-secondary); }
.st-wall-chip[data-state=current]::before { background:#43d17c;box-shadow:0 0 0 1px #0006; }
/* Not current is said in words; the ring is only its echo. */
.st-wall-chip[data-state=attention] { border-color:var(--st-attention);border-width:2px; }
.st-wall-chip[data-state=attention]::before { background:transparent;border:2px solid var(--st-attention); }
.st-wall-map-note:not([data-problem]) { position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0; }
.st-wall-map-note[data-problem] { flex-basis:100%;font-size:var(--fs-micro);line-height:1.35;padding:.2rem .5rem;border-left:.25rem solid var(--st-attention);background:var(--st-bg); }
.st-wall-map-head .st-button { font-size:var(--fs-micro);min-height:44px;padding:.3rem .5rem; }
.st-wall-map-stage { flex:1;min-height:0;position:relative;overflow:hidden;border:1px solid var(--st-border);border-radius:8px; }
[data-st-wall-live],[data-st-wall-fallback] { position:absolute;inset:0; }
[data-st-wall-fallback] { overflow:auto; }
.st-wall-map.is-live [data-st-wall-fallback] { display:none; }
.st-wall-map [data-st-wall-fallback]>.sm-mapcard { height:100%;padding:.3rem; }
.st-wall-map [data-st-wall-fallback] .sm-mapframe { height:calc(100% - 3rem); }
.st-wall-map [data-st-wall-fallback] img { width:100%;height:100%;object-fit:contain; }
.st-wall-map [data-st-wall-fallback] .sm-graphic { width:100%;height:100%; }
.st-wall-map a { color:var(--st-info); }
.st-wall-map .maplibregl-ctrl-attrib { color:#102a43; }
.st-wall-map .maplibregl-ctrl-attrib a { color:#0759c7;text-decoration:underline; }
/* The source's own legend, over the map's top right corner. */
.st-wall-legend { position:absolute;top:.4rem;right:.4rem;z-index:2;font-size:var(--fs-small);max-width:45%;padding:.2rem .3rem;background:var(--st-panel);border:1px solid var(--st-border);border-radius:.3rem; }
.st-wall-legend:empty { display:none; }
.st-wall-legend img { width:14rem;max-width:100%;height:auto;display:block;background:#fff;padding:3px; }

/* The board: one row per event, its count in large figures, its alerts' earliest to latest end. */
.st-wall-side>.sm-board { flex:0 1 auto;min-height:0;max-height:40%; }
.st-wall-side .sm-board-head { display:flex;align-items:baseline;gap:.5rem; }
.st-wall-side .sm-board-head>.sm-h { flex:1;margin:0 0 .3rem; }
.st-wall-list-open { font-size:var(--fs-micro);min-height:44px;padding:.2rem .5rem;display:inline-flex;align-items:center;gap:.35rem; }
.st-wall-list-open kbd { font:700 var(--fs-micro)/1 var(--font-mono,monospace);padding:.15rem .3rem;border:1px solid currentColor;border-radius:.2rem; }
.st-wall-side .sm-board-rows { display:grid;gap:.15rem;padding:0;margin:0;list-style:none; }
.st-wall-side .sm-board-rows li { display:grid;grid-template-columns:2.6rem minmax(0,1fr);align-items:center;column-gap:.5rem;padding:.2rem 0;border-top:1px solid var(--st-line); }
.st-wall-side .sm-board-rows .sm-count { font:800 1.9rem/1 var(--font-mono,monospace);text-align:right;font-variant-numeric:tabular-nums; }
.st-wall-side .sm-row { display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;min-width:0; }
.st-wall-side .sm-row .sm-chip { font-size:var(--fs-bulletin); }
.st-wall-side .sm-row .sm-sub { font-size:var(--fs-bulletin);font-family:var(--font-mono,monospace); }
/* An emergency on the board is one line, the event and where; the pinned card carries its words,
   the full list and the ticker its time. */
.st-wall-side .sm-pin { margin-bottom:.25rem;flex-wrap:nowrap;align-items:center;min-width:0; }
.st-wall-side .sm-pin .sm-pin-word { font-size:var(--fs-small);line-height:1.3;letter-spacing:0;padding:.1rem .3rem;white-space:nowrap; }
/* Where the emergency is, on two lines rather than cut (critique of 2026-11-02). */
.st-wall-side .sm-pin .sm-pin-where { font-size:var(--fs-bulletin);min-width:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden; }
.st-wall-side .sm-pin .sm-sub { display:none; }
.st-wall-side .sm-notice { font-size:var(--fs-small);line-height:1.4; }
.st-wall-side .sm-actions { flex-wrap:wrap; }
.st-wall-side .sm-actions .btn { font-size:var(--fs-micro);padding:.35rem; }

/* The hour's three latest changes, under the board. */
.st-wall-side>.sm-changed { display:block;flex:0 1 auto;min-height:0;max-height:26%; }
.st-wall-side .sm-changed>.sm-h { display:inline-block;margin:0 .5rem .3rem 0; }
.st-wall-side .sm-changed>.sm-h+.sm-sub { display:inline; }
.st-wall-side .sm-changes { display:grid;gap:.2rem;padding:0;margin:0;list-style:none; }
.st-wall-side .sm-changes li { display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;font-size:var(--fs-bulletin);line-height:1.3; }
.st-wall-side .sm-changes li>span:not(.sm-change-at) { overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical; }
.st-wall-side .sm-changed .sm-empty { font-size:var(--fs-bulletin);margin:0; }
.st-wall-side [data-sm-earlier-line][hidden] { display:none; }

/* The spotlight takes what is left; an emergency's card, first in the column, takes the most. */
.st-wall-side>.sm-spot { flex:1 1 0;min-height:10rem; }
/* The map beside it already draws the emergency: the card keeps its room for NWS's words. */
.st-wall-side .sm-pinned-cols>.sm-figure { display:none; }
/* While emergencies hold the spotlight the queue stays reachable to prepare; only the pin, which cannot apply, goes
   (critique of 2026-11-02, seventh run). */
.st-wall-side>.sm-spot--pinned .sm-spot-tools [data-st-pin-product] { display:none; }
.st-wall-side .sm-spot-head { display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .5rem; }
.st-wall-side .sm-spot-head>.sm-h { flex:1 1 auto;margin:0;font-size:var(--fs-small); }
.st-wall-side .sm-spot-status { font-size:var(--fs-bulletin); }
/* The spotlight's steps and its queue share one row, so its picture keeps the room (critique of 2026-11-02, fourth run:
   the WSSI map had been drawn 531×20px under three rows of controls). */
.st-wall-side .sm-spot-tools { display:flex;flex-wrap:wrap;align-items:center;gap:.3rem;flex:0 1 auto; }
.st-wall-side .sm-spot-tools:empty { display:none; }
.st-wall-side .sm-spot-tools .btn,.st-wall-side .sm-spot-tools summary,.st-wall-side .st-ops-queue-open { font-size:var(--fs-micro); }
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current { display:flex;flex-direction:column;overflow:hidden; }
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current>.sm-figure { flex:1;min-height:0; }
/* A storm's forecast graphic takes the panel's height, its caption beside it: under the graphic the caption had left it
   168×100px in a 531px card (critique of 2026-11-03, thirteenth run). */
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current:has(>.sm-figure--graphic) { display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);grid-template-rows:repeat(3,auto) minmax(0,1fr);column-gap:.7rem; }
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current:has(>.sm-figure--graphic)>.sm-figure--graphic { grid-column:1;grid-row:1 / -1;min-height:0;overflow:hidden; }
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current:has(>.sm-figure--graphic)>:not(.sm-figure):not(.sm-panel-h) { grid-column:2;align-self:start;margin:0; }
.st-wall-grid .sm-panel:not(.sm-panel--pinned).is-current .sm-rows { display:flex;flex-wrap:wrap;gap:.3rem; }
.st-wall-grid .sm-pinned-cols { grid-template-columns:minmax(0,1fr); }
.st-wall-grid .maplibregl-ctrl-group button { width:max(44px,2.2rem);height:max(44px,2.2rem); }
.st-wall-grid :focus-visible { outline:3px solid var(--st-action);outline-offset:2px; }
.st-wall-coverage { font-size:var(--fs-micro);margin:0;padding:.5rem .7rem;border:1px solid var(--st-border);border-radius:8px;background:var(--st-panel); }

/* The complete list, over the wall: the board's button or L opens it, Escape or L closes it. */
.st-wall-alert-list { position:fixed;inset:auto 1rem 5rem auto;width:min(32rem,calc(100vw - 2rem));max-height:calc(100dvh - 9rem);margin:0;padding:.6rem .7rem;display:none;flex-direction:column;min-height:0;border:1px solid var(--st-border);border-radius:8px;background:var(--st-panel);color:var(--st-text);box-shadow:0 .6rem 2rem #0008; }
.st-wall-alert-list:popover-open { display:flex; }
.st-wall-alert-list::backdrop { background:#0006; }
.st-wall-alert-head { display:flex;align-items:center;gap:.5rem;padding-bottom:.3rem; }
.st-wall-alert-list h2 { font-size:var(--fs-bulletin);margin:0;flex:1; }
.st-wall-alert-head .st-button { font-size:var(--fs-micro);min-height:44px; }
.st-wall-alert-list ol { list-style:none;padding:0;margin:0; }
.st-wall-alert-list > ol { overflow:auto;min-height:0; }
.st-wall-alert-list li { padding:.4rem 0;border-top:1px solid var(--st-line); }
.st-wall-alert-list a { display:flex;gap:.25rem;flex-direction:column;color:var(--st-text);text-decoration:none;min-height:44px; }
.st-wall-alert-list strong { font-size:var(--fs-bulletin); }
/* Each message's tag, as the workspace's list carries it: four Tornado Warning rows had read alike (critique of
   2026-11-03, fourteenth run). */
.st-wall-alert-list .st-wall-tag { display:inline-block;margin-right:.35rem;padding:0 .35rem;border:1px solid currentColor;border-radius:4px;font-size:var(--fs-small);font-weight:700;color:var(--st-text);vertical-align:.08em; }
.st-wall-alert-list span:not(.sm-chip) { font-size:var(--fs-bulletin);color:var(--st-secondary); }
.st-wall-alert-list [data-emergency] { border-left:3px solid var(--st-attention);padding-left:.3rem; }

@media(max-width:1400px) { .st-wall-grid { grid-template-columns:minmax(0,2.2fr) minmax(300px,1fr); } }
@media(max-width:1023px),(max-height:600px) { body.sm-wall:has(.st-wall-grid) { height:auto;overflow:auto; }.smw:has(.st-wall-grid){height:auto;min-height:100dvh}.st-wall-grid{display:flex;flex-direction:column}.st-wall-grid>.st-wall-map{min-height:400px}.st-wall-grid>.st-wall-side{overflow:visible}.st-wall-side>.sm-spot{min-height:400px} }
@media(forced-colors:active) { .st-wall-alert-list,[data-st-wall-live],.st-wall-map-stage,.st-wall-chip { border:2px solid CanvasText; } }
/* MapLibre sets its scale at 10px; on a wall it takes the scale's floor in the wall's rem (critique of 2026-11-02). */
.smw .maplibregl-ctrl-scale { font-size:var(--fs-micro); }
/* Read across a room (critique of 2026-11-02): NWS's words take the lead role, 24px at 1080 and 48px at 4K in the
   wall's rem, and the last hour and where an emergency is the bulletin role; what does not fit folds into words, never smaller. The
   towns on the map are the site's, in the same rem. */
.smw .st-tropical-town { font:600 var(--fs-bulletin)/1.2 Manrope,sans-serif;color:#f1f7fc;text-shadow:0 0 2px #0b1520,0 0 2px #0b1520,0 0 5px #0b1520;white-space:nowrap;pointer-events:none; }
html[data-theme=light] .smw .st-tropical-town { color:#102a43;text-shadow:0 0 2px #fff,0 0 2px #fff,0 0 5px #fff; }
/* A folded tile's hazard at the lead role, 24px at 1080, from the small role's 16px (critique of 2026-11-04, sixteenth run):
   at the section role, two to a row, a tile's name ran to three lines and the spotlight lost its share. */
.st-wall-side .sm-more .sm-chip { font-size:var(--fs-lead);margin-right:.2rem; }
/* What the board folds is tiles, each a count in the board's figures and its chip, two to a row. */
.st-wall-side .sm-board .sm-more:has(.sm-fold-tiles) { display:grid;gap:.2rem;margin:.25rem 0 0; }
.st-wall-side .sm-fold-label { font-size:var(--fs-small);font-weight:700;color:var(--st-muted,inherit); }
.st-wall-side .sm-fold-tiles { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.2rem .6rem; }
.st-wall-side .sm-fold-tile { display:flex;align-items:center;gap:.4rem;min-width:0; }
.st-wall-side .sm-fold-tile .sm-count { flex:none;min-width:2.2rem;text-align:right;font:800 1.5rem/1 var(--font-mono,monospace);font-variant-numeric:tabular-nums; }
.st-wall-side .sm-fold-tile .sm-chip { min-width:0;overflow-wrap:anywhere; }
/* While the spotlight holds the emergencies with their places and what NWS says to do, the board names each on one
   line with when it ends (critique of 2026-11-02, fifth run): the places twice had cost the board its rows. */
.st-wall-side:has(>.sm-spot--pinned) .sm-pin .sm-pin-where,.st-wall-side:has(>.sm-spot--pinned) .sm-pin .sm-pin-link { display:none; }
.st-wall-side:has(>.sm-spot--pinned) .sm-pin .sm-sub { display:block;margin:0;font-size:var(--fs-bulletin); }
/* Then they give way: the held spotlight names each emergency with when it ends and what NWS says to do, the ticker
   and the map's rings name them again, and the board's rows were the third telling. With NWS's instruction at 35px, two
   emergencies' rows had cost the spotlight its second instruction at 1080 (critique of 2026-11-04, sixteenth run). The
   board's tiles count them with their kind, and the full list names each. */
.st-wall-side:has(>.sm-spot--pinned) .sm-board .sm-pin { display:none; }
/* While emergencies are pinned the spotlight is what a room reads: it takes half the column, and the board, whose
   emergency rows repeat it, folds sooner. */
.st-wall-side>.sm-spot--pinned { min-height:50%; }
.st-wall-side:has(>.sm-spot--pinned)>.sm-board { max-height:34%; }
/* And the hour folds to its count, which still says when its latest change was: its three rows had taken the room the
   second emergency's instruction needed at 1080 (critique of 2026-11-04, sixteenth run). */
.st-wall-side:has(>.sm-spot--pinned)>.sm-changed { max-height:12%; }
/* Under the outage banner the column is shorter: the board had folded all it can into tiles, whose row was cut 10px
   short at 1080, and the second emergency's instruction 30px (critique of 2026-11-03, eleventh run). The hour's changes,
   a record that stopped with the display, give their room to them; the ticker and the full list still carry each. */
.is-dimmed .st-wall-side>.sm-changed { display:none; }
.is-dimmed .st-wall-side>.sm-spot--pinned { min-height:46%; }
.is-dimmed .st-wall-side:has(>.sm-spot--pinned)>.sm-board { max-height:38%; }

/* Reading at distance (critique of 2026-11-02, seventh run): a hazard's name is the board's largest word after its
   count, at the lead role, not smaller than the office line beside it; the status chips are words in the body face. */
/* Read across a room (critique of 2026-11-04, sixteenth run, the owner's choice): a board's hazard names at the section
   role, 35px at 1080 and 70px at 4K, beside their 38px counts; they had been 24px. */
.st-wall-side .sm-row .sm-chip { font-size:var(--fs-section); }
.st-wall-side .sm-pin .sm-pin-word { font-size:var(--fs-remarks); }
.st-wall-side:has(>.sm-spot--pinned) .sm-pin { margin-bottom:.1rem; }

/* The full list and the queue open under the wall's header, never over its clock and controls; the header's foot is
   measured by script (--smw-bar-bottom). Their foot is the ticker's top less 8px (--smw-ticker-top): anchored 5rem up,
   they had covered the 121px ticker's top 21px at 1080 (critique of 2026-11-03, tenth run). */
.st-wall-alert-list,.st-ops-queue-menu { bottom:calc(100dvh - var(--smw-ticker-top, calc(100dvh - 5rem))); max-height:calc(100dvh - var(--smw-bar-bottom, 9rem) - 5.5rem); max-height:calc(var(--smw-ticker-top, calc(100dvh - 5.5rem)) - var(--smw-bar-bottom, 9rem)); }
/* The site underlines every link in a list item; a row here is a whole target, underlined only when pointed at. */
#st-wall-alerts li a { text-decoration:none; }
#st-wall-alerts li a:is(:hover,:focus-visible) strong { text-decoration:underline; }
.st-wall-alert-list .sm-chip { align-self:flex-start;font-size:var(--fs-bulletin); }
.st-wall-alert-filter { display:flex;flex-wrap:wrap;gap:.3rem;margin:0 0 .4rem;padding:0;list-style:none; }
.st-wall-alert-filter button { min-height:44px;padding:.2rem .6rem;border:1px solid var(--st-border);border-radius:1rem;background:var(--st-panel);color:var(--st-text);font:inherit;font-size:var(--fs-micro);cursor:pointer; }
.st-wall-alert-filter button[aria-pressed=true] { background:var(--st-action);border-color:var(--st-action);color:var(--st-action-text); }
.st-wall-alert-list .st-wall-group { padding:.4rem 0;border-top:1px solid var(--st-line); }
.st-wall-alert-list .st-wall-group>h3 { display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .5rem;margin:0 0 .2rem;font-size:var(--fs-micro); }
.st-wall-alert-list .st-wall-group>h3 .sm-chip { font-size:var(--fs-small); }
.st-wall-alert-list .st-wall-group ol { list-style:none;margin:0;padding:0; }
.st-wall-alert-list .st-wall-group li { padding:.15rem 0;border-top:0; }
.st-wall-alert-list .st-wall-group a { min-height:44px; }
/* MapLibre's credit links are targets too: 24px tall at the least (WCAG 2.5.8). */
.st-wall-map .maplibregl-ctrl-attrib a { display:inline-block;min-height:24px;line-height:24px;padding:0 2px; }
/* The ticker's area may take two lines rather than end in an ellipsis. */
.sm-wall .st-ticker-words>span { white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;line-height:1.15; }
.st-wall-side .sm-fold-tile .sm-chip { padding:.12rem .4rem;line-height:1.1; }
/* Folded into tiles, the board takes the room its names need at the lead role: seven winter kinds at two lines each had
   run 97px past its 40% at 1080. The spotlight gives way, its captions first (fitPanel). */
.st-wall-side>.sm-board:has(.sm-fold-tiles) { max-height:54%; }
/* And the hour folds to its count beside them: its rows had taken the storm wall's forecast graphic to 169px wide. */
.st-wall-side:has(>.sm-board .sm-fold-tiles)>.sm-changed { max-height:12%; }
/* A step down, only when the spotlight is still cramped (fitWall): the bulletin role, 19px at 1080, from the 16px they had. */
.st-wall-side>.sm-board.is-snug .sm-fold-tile .sm-chip { font-size:var(--fs-bulletin); }
/* Past the budget the wall's banner takes the outage's amber, as the ticker and the workspace's banner do; it had been a
   white bar where every other outage state was amber (critique of 2026-11-03, thirteenth run). */
.smw-banner[data-sm-lost] { background:#f4c653;color:#34220a;border-left:.5rem solid #b48619; }
