/* T4b｜黑色沙漠 — art pack v1 integration (網藝 /sink-website-art-t4b, style lock 01, cut specs 02, R3 decisions 03).
   Loaded only when Sink:MaterialR3 && Sink:MaterialT4b on public pages; admin never loads it, and R2/R3 frame CSS is not loaded with it.
   R3 decisions: keep 0 · change 1 (rock-seamless, desaturated ≤8% behind header only) · drop 9 (recess/brass/rails/corners unused here).
   All copy is native HTML; art files contain no text. See docs/T4B-SKELETON.md. */
.sink-t4b{
  --bg-page:#FDFDFD;--bg-deck-alt:#F3F2F0;--hero-gloom:#0A0909;--hero-mid:#332E2F;--hero-haze:#3E3B40;
  --panel-fill:#17181B;--panel-border:#3B3535;--cta-border:#564A42;--accent-ember:#E69F4A;--accent-ember-dim:#C88951;
  --text-on-dark:#F4F2EF;--text-on-dark-2:#A9A6A3;--text-on-light:#17181B;--text-on-light-2:#5E5B58;--rule-light:#E8E8E9;
  --t4b-serif:"Noto Serif TC","Source Han Serif TC","Songti TC",serif;
  --t4b-sans:"Noto Sans TC","PingFang TC",system-ui,sans-serif;
  --t4b-max:1200px;
  font-family:var(--t4b-sans);
  background:var(--bg-page);
  color:var(--text-on-light)}
.sink-t4b a:focus-visible,.sink-t4b button:focus-visible,.sink-t4b input:focus-visible,.sink-t4b select:focus-visible,.sink-t4b textarea:focus-visible{outline:2px solid var(--accent-ember);outline-offset:3px}

/* Header: sticky scrim (cuts/header-bar.png) + ash-seamless (T4b bg pack, same source as body) desaturated ≤8% — replaces R3 rock-seamless (polish-20261010). */
.t4b-header{position:sticky;top:0;z-index:20;height:72px;background:url(/assets/t4b/header-bar.png) center top/100% 100% no-repeat,linear-gradient(rgba(8,8,10,.78),rgba(8,8,10,.55));border-bottom:1px solid rgba(255,255,255,.08);box-shadow:none;isolation:isolate}
.t4b-header::before{content:"";position:absolute;inset:0;z-index:-1;background:url(/assets/t4b/bg/ash-seamless.webp) repeat;background-size:512px auto;opacity:.08;filter:grayscale(1)}
.t4b-header .header-inner{max-width:var(--t4b-max);min-height:72px;height:72px;display:grid;grid-template-columns:1fr auto 1fr;gap:16px;padding:0 24px}
.t4b-header .brand{font-family:var(--t4b-serif);font-size:24px;font-weight:700;letter-spacing:.18em;color:var(--text-on-dark)}
.t4b-header .brand img{width:28px;height:28px;opacity:.9}
.t4b-header nav{grid-column:2;display:flex;gap:0;font-size:15px;letter-spacing:.06em}
.t4b-header nav a{display:flex;align-items:center;min-height:44px;padding:6px 16px;border:0;background:none;color:var(--text-on-dark);box-shadow:none}
.t4b-header nav a+a{border-left:1px solid rgba(244,242,239,.28)}
.t4b-header nav a:hover{color:#fff;background:none;box-shadow:inset 0 -2px 0 var(--accent-ember-dim)}
.t4b-header nav a[aria-current=page]{color:#fff;background:none;box-shadow:inset 0 -2px 0 var(--accent-ember)}

/* Homepage main is full-bleed; header overlays the hero top (master rhythm). */
.sink-t4b main.t4b-main-home{max-width:none;padding:0;margin:0}
.t4b-home{margin-top:-72px}

/* Cinematic hero: wide cut ≥1025px (1920×720), native 1024×677 below. Aspect locked so the CTA slot covers the inpainted plate. */
.t4b-hero{position:relative;aspect-ratio:1920/720;max-height:760px;width:100%;overflow:hidden;background:var(--hero-mid);isolation:isolate;color:var(--text-on-dark)}
.t4b-hero-scene,.t4b-hero-scene picture{position:absolute;inset:0;z-index:-1}
.t4b-hero-image{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 40%}
.t4b-hero-copy{position:absolute;left:50%;top:15%;width:min(760px,90%);transform:translateX(-50%);text-align:center}
.t4b-hero-copy h1{margin:0;font-family:var(--t4b-serif);font-size:clamp(2.25rem,4vw,3.5rem);line-height:1.15;font-weight:700;letter-spacing:.04em;color:var(--text-on-dark);text-shadow:0 2px 24px rgba(0,0,0,.6)}
.t4b-hero-sub{margin:.6rem 0 0;font-size:1.125rem;line-height:1.6;letter-spacing:.06em;color:var(--text-on-dark);text-shadow:0 2px 16px rgba(0,0,0,.7)}
/* hero.cta slot = master [401,566,622,617] of 1024×677 → centre x 50%, top 83.6%, height 7.5%. */
.t4b-hero-cta{position:absolute;left:50%;top:83.6%;transform:translateX(-50%);min-width:220px;min-height:52px}
.sink-t4b .hero-art-label{position:absolute;right:14px;bottom:12px;padding:3px 7px;background:rgba(10,9,9,.78);color:var(--text-on-dark-2);font-size:12px;z-index:1}

/* 9-slice chrome (cut specs 02). */
.t4b-btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:14px 32px;border:1px solid var(--cta-border);border-image:url(/assets/t4b/btn-primary-9slice.png) 12 fill / 12px stretch;border-radius:4px;background:transparent;color:var(--text-on-dark);font-size:.9375rem;font-weight:600;line-height:1;letter-spacing:.08em}
.t4b-btn-primary:hover{box-shadow:0 0 0 1px var(--accent-ember);color:#fff}
.t4b-btn-ghost{display:flex;align-items:center;justify-content:center;gap:6px;min-height:44px;margin-top:auto;padding:10px 16px;border:1px solid var(--panel-border);border-image:url(/assets/t4b/btn-ghost-9slice.png) 8 / 8px stretch;border-radius:4px;color:var(--text-on-dark);font-size:.9375rem;font-weight:600;line-height:1;letter-spacing:.08em}
.t4b-btn-ghost:hover{box-shadow:0 0 0 1px var(--accent-ember);color:#fff}
.t4b-card{display:flex;flex-direction:column;gap:10px;min-width:0;padding:20px;border:1px solid var(--panel-border);border-image:url(/assets/t4b/panel-card-9slice.png) 16 fill / 16px stretch;border-radius:6px;background:var(--panel-fill);color:var(--text-on-dark);box-shadow:0 8px 24px rgba(0,0,0,.18)}
.t4b-card p{margin:0;color:var(--text-on-dark-2);font-size:.9375rem;line-height:1.65}
.t4b-card-title{margin:0;font-size:1.5rem;font-weight:700;line-height:1.3;letter-spacing:.02em;color:var(--text-on-dark)}
.t4b-card-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px}
.t4b-meta{font-size:.8125rem;line-height:1.5;letter-spacing:.02em;color:var(--text-on-dark-2)}
.t4b-card .sample-label,.t4b-card .pin-label{align-self:flex-start}

/* Deck: 3 cols — env thumb | 公告 | 活動 / env thumb→討論區 | 討論區 | 連結 (IA order, docs/T4B-IA-NAV.md). */
.t4b-deck{background:var(--bg-page);padding:32px 24px 48px}
.t4b-context{max-width:var(--t4b-max);margin:0 auto 16px;color:var(--text-on-light-2);font-size:.8125rem}
.t4b-grid{max-width:var(--t4b-max);margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:stretch}
.t4b-thumb{position:relative;display:block;min-height:180px;overflow:hidden;border-radius:6px;background:var(--panel-fill);box-shadow:0 8px 24px rgba(0,0,0,.18)}
.t4b-thumb picture,.t4b-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.t4b-thumb-label{position:absolute;left:12px;top:12px;padding:4px 10px;border-radius:4px;background:rgba(10,9,9,.72);color:var(--text-on-dark);font-size:.9375rem;font-weight:600;letter-spacing:.04em}
a.t4b-thumb:hover .t4b-thumb-label{box-shadow:inset 0 -2px 0 var(--accent-ember)}
.t4b-tabs{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.8125rem}
.t4b-tabs a{min-height:32px;display:inline-flex;align-items:center;color:var(--text-on-dark-2)}
.t4b-tabs a:hover{color:var(--text-on-dark)}
.t4b-tabs a[aria-current=page]{color:var(--text-on-dark);box-shadow:inset 0 -2px 0 var(--accent-ember)}
.t4b-example{font-size:.8125rem!important}
.t4b-notice-list,.t4b-event-list,.t4b-link-list{list-style:none;margin:0;padding:0;display:grid}
.t4b-notice-list li+li,.t4b-link-list li+li,.t4b-event-list li+li{border-top:1px solid rgba(255,255,255,.08)}
.t4b-notice-list a{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;min-height:44px;padding:8px 0;color:var(--text-on-dark)}
.t4b-notice-list a:hover .t4b-notice-title{box-shadow:inset 0 -1px 0 var(--accent-ember)}
.t4b-notice-title{flex:1 1 12em;min-width:0;font-weight:600}
.t4b-tag{padding:1px 8px;border:1px solid var(--panel-border);border-radius:3px;color:var(--accent-ember-dim);font-size:.75rem;letter-spacing:.04em}
.t4b-event-list li{display:grid;gap:4px;padding:10px 0}
.t4b-event-list h3{margin:0;font-size:1.125rem;font-weight:600;line-height:1.4;color:var(--text-on-dark)}
.t4b-event-list h3 a:hover{color:var(--accent-ember)}
.t4b-link-list a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:6px 0;color:var(--text-on-dark)}
.t4b-link-list a:hover{color:var(--accent-ember)}

/* Sub-pages: see "Polish pass" section at the end of this file (page band + per-module floating cards). */

/* Minimal footer on the light deck: footer-rule hairline + one centred meta line. */
.sink-t4b .t4b-footer{display:block;max-width:none;margin:0;padding:18px 24px 28px;border:0;background:var(--bg-page) url(/assets/t4b/footer-rule.png) center top/min(1440px,100%) 2px no-repeat;color:var(--text-on-light);text-align:center}
.t4b-footer nav{display:flex;justify-content:center;flex-wrap:wrap;font-size:.8125rem;letter-spacing:.02em}
.t4b-footer nav>*{display:inline-flex;align-items:center;min-height:32px;padding:0 12px}
.t4b-footer nav>*+*{border-left:1px solid var(--rule-light)}
.t4b-footer a{color:var(--text-on-light)}
.t4b-footer a:hover{box-shadow:inset 0 -2px 0 var(--accent-ember)}
.sink-t4b .t4b-footer p{margin:6px 0 0;color:var(--text-on-light-2);font-size:.75rem}

@media (max-width:1024px){
  .t4b-hero{aspect-ratio:1024/677}
  .t4b-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .t4b-thumb{min-height:160px}
}
@media (max-width:768px){
  .t4b-header{height:auto}
  .t4b-header .header-inner{height:auto;min-height:56px;grid-template-columns:1fr;justify-items:center;gap:0;padding:6px 12px}
  .t4b-header nav{grid-column:1;font-size:14px}
  .t4b-header nav a{padding:6px 12px}
  .t4b-home{margin-top:0}
  .t4b-hero{aspect-ratio:auto;max-height:none;display:flex;flex-direction:column;background:var(--hero-gloom)}
  .t4b-hero-scene{position:relative;inset:auto;aspect-ratio:1024/677;z-index:0}
  .t4b-hero-scene picture{position:absolute;inset:0}
  .t4b-hero-cta{top:calc((100vw * 677 / 1024) * .836);min-width:0;min-height:44px;padding:10px 20px;font-size:.875rem}
  .t4b-hero-copy{position:static;transform:none;width:auto;padding:20px 16px 24px}
  .t4b-hero-copy h1{font-size:2.25rem}
  .sink-t4b .hero-art-label{bottom:auto;top:8px;right:8px}
  .t4b-deck{padding:24px 16px 40px}
  .t4b-grid{grid-template-columns:1fr;gap:16px}
  .t4b-card-title{font-size:1.25rem}
}

/* ==========================================================================================
   Polish pass (2026-10-09 #2): self-hosted Noto TC, draft logo slot, scroll-solid header,
   sub-page T4b presentation (page band + per-module floating cards), ~390px layout.
   Still only loaded when Sink:MaterialR3 && Sink:MaterialT4b on public pages. See docs/T4B-POLISH.md.
   ========================================================================================== */

/* Self-hosted Noto TC subsets (SIL OFL 1.1, wwwroot/fonts/OFL.txt). Same-origin only: CSP default-src 'self'.
   Subset = Basic Latin/Latin-1 + punctuation/CJK symbols/fullwidth + ~3.7k most common TC ideographs + every
   character in repo Razor/C# copy. Rare ideographs fall back to PingFang TC / system fonts via the stacks. */
@font-face{font-family:"Noto Sans TC";src:url(/fonts/noto-sans-tc-400-t4b-subset.woff2) format("woff2");font-weight:100 500;font-style:normal;font-display:swap}
@font-face{font-family:"Noto Sans TC";src:url(/fonts/noto-sans-tc-700-t4b-subset.woff2) format("woff2");font-weight:600 900;font-style:normal;font-display:swap}
@font-face{font-family:"Noto Serif TC";src:url(/fonts/noto-serif-tc-700-t4b-subset.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}
.sink-t4b{overflow-x:clip;--error:#F0A592;--t4b-header-h:72px;
  --bg:var(--bg-page);--panel:var(--panel-fill);--panel-light:#202126;--line:var(--panel-border);--text:var(--text-on-dark);--muted:var(--text-on-dark-2);--gold:var(--accent-ember-dim);--gold-light:var(--accent-ember);--font:var(--t4b-sans)}
.sink-t4b,.sink-t4b button,.sink-t4b input,.sink-t4b select,.sink-t4b textarea{font-family:var(--t4b-sans)}
html:has(>body.sink-t4b){background:#FDFDFD}
.sink-t4b{min-height:100vh}

/* Header: draft logo slot (header.logo) + solid --hero-gloom after scroll (js/t4b.js toggles .is-solid). */
.t4b-header{transition:background-color .2s ease,box-shadow .2s ease}
.t4b-header.is-solid{background:var(--hero-gloom);border-bottom-color:rgba(255,255,255,.12);box-shadow:0 1px 0 rgba(0,0,0,.35),0 8px 24px rgba(0,0,0,.18)}
.t4b-header.is-solid::before{opacity:.05}
.t4b-header .t4b-brand{display:inline-flex;align-items:center;gap:10px;justify-self:start;min-height:44px;font-family:var(--t4b-sans);font-size:0;letter-spacing:0}
.t4b-header .t4b-brand picture{display:block;line-height:0}
.t4b-header .t4b-brand img.t4b-logo{display:block;width:auto;height:44px;max-width:none;opacity:1}
.t4b-draft-badge{display:inline-flex;align-items:center;padding:2px 6px;border:1px solid var(--accent-ember-dim);border-radius:3px;color:var(--accent-ember-dim);font-size:11px;font-weight:600;line-height:1.4;letter-spacing:.06em;white-space:nowrap}

/* Sub-page frame: light deck container; modules float as dark 9-slice cards. */
.sink-t4b main.t4b-sub{max-width:calc(var(--t4b-max) + 48px);margin:0 auto;padding:0 24px 64px;border:0;background:none;box-shadow:none;color:var(--text-on-light)}
.t4b-sub>.community-layout.thread-layout,.t4b-sub>.receipt-card{margin-top:32px}

/* Page band: cinematic strip under the header (hero wide cut, darkened); hard bottom edge per style lock §4.2. */
.t4b-sub>.page-heading{position:relative;margin:calc(-1 * var(--t4b-header-h)) calc(50% - 50vw) 0;padding:calc(var(--t4b-header-h) + 56px) max(24px,calc(50vw - var(--t4b-max) / 2)) 44px;background:linear-gradient(180deg,rgba(10,9,9,.62) 0%,rgba(10,9,9,.38) 48%,rgba(10,9,9,.9) 100%),url(/assets/t4b/hero-cinematic-wide-1920x720.webp) 50% 42%/cover no-repeat,var(--hero-gloom);color:var(--text-on-dark);text-align:left}
.t4b-sub>.page-heading .eyebrow{display:flex;align-items:center;gap:10px;margin:0 0 14px;color:var(--text-on-dark-2);font-size:.75rem;font-weight:600;letter-spacing:.24em}
.t4b-sub>.page-heading .eyebrow::before{content:"";width:24px;height:2px;background:var(--accent-ember)}
.t4b-sub>.page-heading h1{margin:0 0 10px;font-family:var(--t4b-serif);font-size:2.5rem;font-weight:700;line-height:1.2;letter-spacing:.02em;color:var(--text-on-dark);text-shadow:0 2px 24px rgba(0,0,0,.6)}
.t4b-sub>.page-heading .title-dot{display:none}
.t4b-sub>.page-heading p:last-child{max-width:40em;margin:0;font-size:1.125rem;line-height:1.6;letter-spacing:.04em;color:var(--text-on-dark);opacity:.86}

/* Card chrome shared by every sub-page module. */
.t4b-sub :is(.stone-panel,.sidebar-panel,.form-card,.feedback-aside,.receipt-card,.article-wrap>article,.thread-layout>.community-main>.empty-state,.article-wrap>.empty-state){position:relative;border:1px solid var(--panel-border);border-image:url(/assets/t4b/panel-card-9slice.png) 16 fill / 16px stretch;border-radius:6px;background:var(--panel-fill);color:var(--text-on-dark);box-shadow:0 8px 24px rgba(0,0,0,.18)}
.t4b-sub :is(.stone-panel,.sidebar-panel)::before,.t4b-sub :is(.stone-panel,.sidebar-panel)::after{display:none}
.t4b-sub .stone-panel .empty-state{margin:16px 0;padding:48px 16px;border:1px dashed rgba(255,255,255,.12);border-radius:4px;background:none;box-shadow:none;color:var(--text-on-dark)}
.t4b-sub :is(h1,h2,h3){color:inherit}
.t4b-sub .badge,.t4b-sub .bulletin-category,.t4b-sub .forum-row .badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 8px;border:1px solid var(--panel-border);border-radius:3px;background:none;color:var(--accent-ember-dim);font-size:.75rem;line-height:1.6;letter-spacing:.04em;white-space:nowrap}
.t4b-sub .pin-label{color:var(--accent-ember);font-size:.75rem}
.t4b-sub .sample-label{color:var(--text-on-dark-2);font-size:.75rem}
.t4b-sub .text-link{color:var(--text-on-dark);border-bottom:1px solid var(--accent-ember-dim);font-size:.875rem}
.t4b-sub .text-link:hover{color:#fff;border-bottom-color:var(--accent-ember)}
.t4b-sub .count{margin:0;color:var(--text-on-dark-2);font-size:.8125rem;letter-spacing:.02em}

/* Community layout: content + 320px rail. */
.t4b-sub .community-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:24px;align-items:start;margin:32px 0 0}
.t4b-sub .panel-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-height:0;padding:22px 24px 14px;background:none}
.t4b-sub .panel-heading h2{margin:0;font-family:var(--t4b-sans);font-size:1.5rem;font-weight:700;line-height:1.3;letter-spacing:.02em}
.t4b-sub .category-tabs{display:flex;flex-wrap:wrap;gap:0 24px;margin:0;padding:0 24px;border:0;border-bottom:1px solid rgba(255,255,255,.08);background:none}
.t4b-sub .category-tabs a{flex:none;min-height:44px;padding:8px 0;border:0;border-bottom:2px solid transparent;background:none;color:var(--text-on-dark-2);font-size:.875rem;letter-spacing:.04em}
.t4b-sub .category-tabs a:hover{background:none;color:var(--text-on-dark)}
.t4b-sub .category-tabs a[aria-current=page]{background:none;color:var(--text-on-dark);border-bottom-color:var(--accent-ember)}
.t4b-sub .example-line{margin:0;padding:10px 24px;border-bottom:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.025);color:var(--text-on-dark-2);font-size:.8125rem}
.t4b-sub .example-line>span{margin-right:8px;color:var(--accent-ember-dim);font-weight:600}
.t4b-sub .panel-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:52px;padding:10px 24px;border-top:1px solid rgba(255,255,255,.08);background:none}
.t4b-sub .panel-bottom>span{color:var(--text-on-dark-2);font-size:.75rem;letter-spacing:.16em}

/* Announcement rows. */
.t4b-sub .bulletin-list{padding:0 24px;background:none}
.t4b-sub .bulletin-row{display:grid;grid-template-columns:96px 96px minmax(0,1fr) 16px;align-items:center;gap:16px;min-height:76px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,.08);color:var(--text-on-dark)}
.t4b-sub .bulletin-row:last-child{border-bottom:0}
.t4b-sub .bulletin-row:hover,.t4b-sub .forum-row:hover{background:linear-gradient(90deg,transparent,rgba(255,255,255,.03) 12%,rgba(255,255,255,.03) 88%,transparent)}
.t4b-sub .bulletin-date{color:var(--text-on-dark-2);font-size:.8125rem;letter-spacing:.02em;font-variant-numeric:tabular-nums}
.t4b-sub .bulletin-title{min-width:0;font-size:1rem;line-height:1.5}
.t4b-sub .bulletin-title>span{font-weight:600;color:var(--text-on-dark)}
.t4b-sub .bulletin-row:hover .bulletin-title>span,.t4b-sub .forum-row:hover h3{box-shadow:inset 0 -1px 0 var(--accent-ember)}
.t4b-sub .bulletin-title>div{display:flex;gap:10px;margin-top:4px}
.t4b-sub .bulletin-arrow{color:var(--accent-ember-dim);font-size:1rem}
.t4b-sub .bulletin-row:hover .bulletin-arrow,.t4b-sub .forum-row:hover .bulletin-arrow{color:var(--accent-ember)}

/* Announcement detail + forum thread article. */
.t4b-sub .back-link{display:inline-flex;align-items:center;gap:8px;min-height:44px;margin:0 0 12px;padding:0;border:0;color:var(--text-on-light-2);font-size:.875rem;letter-spacing:.04em}
.t4b-sub .back-link::before{content:"←";color:var(--text-on-light)}
.t4b-sub .back-link:hover{color:var(--text-on-light);box-shadow:inset 0 -2px 0 var(--accent-ember)}
.t4b-sub .article-wrap>article{padding:40px 48px 8px}
.t4b-sub .thread-article{padding:36px 40px 32px}
.t4b-sub .article-heading .card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.t4b-sub .article-heading h1,.t4b-sub .thread-article .article-heading h1{margin:14px 0 10px;font-family:var(--t4b-serif);font-size:2.25rem;font-weight:700;line-height:1.3;letter-spacing:.02em;color:var(--text-on-dark)}
.t4b-sub .thread-article .article-heading h1{font-size:2rem}
.t4b-sub .article-heading p{margin:0;color:var(--text-on-dark-2);font-size:.8125rem;letter-spacing:.02em}
.t4b-sub .sample-notice{display:flex;align-items:center;gap:12px;margin:20px 0 0;padding:10px 14px;border-left:2px solid var(--accent-ember-dim);background:rgba(255,255,255,.03)}
.t4b-sub .sample-notice p{margin:0;color:var(--text-on-dark-2);font-size:.875rem}
.t4b-sub .thread-article .example-line{margin:20px 0 0;padding:10px 14px;border:0;border-left:2px solid var(--accent-ember-dim)}
.t4b-sub .article-lead{margin:24px 0 24px;padding:0 0 24px;border-bottom:1px solid rgba(255,255,255,.08);color:var(--text-on-dark);font-size:1.125rem;line-height:1.8}
.t4b-sub .article-body,.t4b-sub .thread-article .article-body{max-width:72ch;margin-top:20px;color:#D9D6D2;font-size:1rem;line-height:1.85}
.t4b-sub .article-footer{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:40px;padding:18px 0 24px;border-top:1px solid rgba(255,255,255,.08);color:var(--text-on-dark-2);font-size:.75rem;letter-spacing:.16em}

/* Forum list, replies, pagination, write notice. */
.t4b-sub .forum-row{display:flex;align-items:center;gap:20px;min-height:84px;padding:14px 24px;border-bottom:1px solid rgba(255,255,255,.08);background:none;color:var(--text-on-dark)}
.t4b-sub .forum-row .card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.t4b-sub .forum-row h3{display:inline;margin:0;font-size:1.0625rem;font-weight:600;line-height:1.5;color:var(--text-on-dark)}
.t4b-sub .forum-row-main>h3{display:block;margin:6px 0 2px}
.t4b-sub .forum-row p{margin:0;color:var(--text-on-dark-2);font-size:.8125rem}
.t4b-sub .reply-count strong{color:var(--text-on-dark);font-size:1.125rem}
.t4b-sub .reply-count span{color:var(--text-on-dark-2);font-size:.75rem}
.t4b-sub .pagination{display:flex;justify-content:center;align-items:center;gap:16px;padding:14px 24px;border-top:1px solid rgba(255,255,255,.08);color:var(--text-on-dark-2);font-size:.8125rem}
.t4b-sub .pagination a{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border:1px solid var(--panel-border);border-image:url(/assets/t4b/btn-ghost-9slice.png) 8 / 8px stretch;border-radius:4px;color:var(--text-on-dark);font-weight:600;letter-spacing:.06em}
.t4b-sub .pagination a:hover{box-shadow:0 0 0 1px var(--accent-ember);color:#fff}
.t4b-sub .replies-panel{margin-top:24px}
.t4b-sub .forum-reply{display:flex;gap:14px;padding:18px 24px;border-top:1px solid rgba(255,255,255,.08)}
.t4b-sub .reply-avatar{display:grid;place-items:center;width:32px;height:32px;flex-shrink:0;border:1px solid var(--panel-border);border-radius:50%;background:none;color:var(--accent-ember-dim)}
.t4b-sub .forum-reply h3{margin:0 0 6px;font-size:.875rem;font-weight:600;color:var(--text-on-dark)}
.t4b-sub .reply-body{color:#D9D6D2;font-size:.9375rem;line-height:1.8}
.t4b-sub .replies-panel .sidebar-empty{padding:16px 24px 20px;color:var(--text-on-dark-2)}
.t4b-sub .forum-write-notice{display:flex;align-items:flex-start;gap:14px;margin-top:24px;padding:18px 22px;border:1px solid var(--rule-light);border-left:2px solid var(--accent-ember);border-radius:4px;background:var(--bg-deck-alt);color:var(--text-on-light)}
.t4b-sub .forum-write-notice>span{color:var(--text-on-light-2);font-size:1.25rem;line-height:1.4}
.t4b-sub .forum-write-notice h2{margin:0 0 4px;font-size:1.0625rem;font-weight:700;color:var(--text-on-light)}
.t4b-sub .forum-write-notice p{margin:0 0 8px;color:var(--text-on-light-2);font-size:.875rem;line-height:1.6}
.t4b-sub .forum-write-notice .text-link{color:var(--text-on-light);border-bottom-color:var(--accent-ember)}

/* Sidebar rail (activity + links). */
.t4b-sub .community-sidebar{min-width:0}
.t4b-sub .sidebar-sticky{position:sticky;top:calc(var(--t4b-header-h) + 24px);display:grid;gap:24px}
.t4b-sub .sidebar-panel{margin:0;padding:0 0 12px}
.t4b-sub .panel-title{margin:0;min-height:0;padding:20px 20px 12px;border:0;background:none;box-shadow:none;color:var(--text-on-dark);font-family:var(--t4b-sans);font-size:1.25rem;font-weight:700;line-height:1.3;letter-spacing:.02em;text-align:left}
.t4b-sub .activity-banner{display:block;margin:0 12px 12px;padding:0;overflow:hidden;border:1px solid rgba(255,255,255,.08);border-radius:4px;background:#1D1E22;box-shadow:none}
.t4b-sub .activity-banner:last-child{margin-bottom:0}
.t4b-sub .activity-symbolic{display:flex;align-items:center;gap:12px;padding:12px}
.t4b-sub .activity-symbolic .activity-copy{padding:0}
.t4b-sub .activity-media{display:block;width:auto;height:120px;border:0;background:var(--hero-mid)}
.t4b-sub .activity-media img{display:block;width:100%;height:100%;object-fit:cover}
.t4b-sub .activity-copy{padding:10px 14px 12px}
.t4b-sub .activity-heading{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.t4b-sub .activity-heading h3{margin:0;font-family:var(--t4b-sans);font-size:1rem;font-weight:600;line-height:1.5;color:var(--text-on-dark)}
.t4b-sub .activity-heading>span{color:var(--accent-ember-dim)}
.t4b-sub .activity-banner:hover .activity-heading h3{color:var(--accent-ember)}
.t4b-sub .activity-copy p{margin:2px 0 4px;color:var(--text-on-dark-2);font-size:.8125rem;line-height:1.5}
.t4b-sub .activity-icon{width:36px;height:36px;color:var(--accent-ember-dim)}
.t4b-sub .sidebar-links{display:grid;padding:0 20px}
.t4b-sub .sidebar-links a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:8px 0;border:0;border-top:1px solid rgba(255,255,255,.08);background:none;color:var(--text-on-dark);font-size:.9375rem}
.t4b-sub .sidebar-links a:hover{background:none;color:var(--accent-ember)}
.t4b-sub .sidebar-links a>span:last-child{color:var(--accent-ember-dim)}
.t4b-sub .sidebar-empty{margin:0;padding:4px 20px 12px;color:var(--text-on-dark-2);font-size:.875rem}
.t4b-sub .sidebar-note{margin:0;padding:0 4px;color:var(--text-on-light-2);font-size:.75rem;line-height:1.6}

/* Buttons inside sub-pages map to the 9-slice primary / ghost chrome. */
.t4b-sub .button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:12px 28px;border-radius:4px;font-size:.9375rem;font-weight:600;line-height:1;letter-spacing:.08em;box-shadow:none}
.t4b-sub .button.gold{border:1px solid var(--cta-border);border-image:url(/assets/t4b/btn-primary-9slice.png) 12 fill / 12px stretch;background:transparent;color:var(--text-on-dark)}
.t4b-sub .button.quiet{border:1px solid var(--panel-border);border-image:url(/assets/t4b/btn-ghost-9slice.png) 8 / 8px stretch;background:transparent;color:var(--text-on-dark)}
.t4b-sub .button:hover,.t4b-sub .button.gold:hover,.t4b-sub .button.quiet:hover{background:transparent;box-shadow:0 0 0 1px var(--accent-ember);color:#fff}
.t4b-sub .button:disabled{opacity:.6;cursor:progress}

/* Feedback: aside + form as two floating cards; fields per cut spec 02 (#0F1012 / #3B3535). */
.t4b-sub .feedback-layout{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:24px;align-items:start;margin:32px 0 0}
.t4b-sub .feedback-aside{padding:28px}
.t4b-sub .feedback-aside>.eyebrow{margin:0 0 12px;color:var(--accent-ember-dim);font-size:.8125rem;font-weight:600;letter-spacing:.12em}
.t4b-sub .feedback-aside h2{margin:0 0 12px;font-family:var(--t4b-serif);font-size:1.5rem;font-weight:700;line-height:1.6;letter-spacing:.02em;color:var(--text-on-dark)}
.t4b-sub .feedback-aside>p{margin:0 0 20px;color:var(--text-on-dark-2);font-size:.9375rem;line-height:1.7}
.t4b-sub .help-list{display:grid;gap:0;margin:0;padding:0;list-style:none}
.t4b-sub .help-list li{display:flex;gap:14px;margin:0;min-height:0;padding:14px 0;border-top:1px solid rgba(255,255,255,.08)}
.t4b-sub .help-list li>span{flex:none;color:var(--accent-ember-dim);font-family:var(--t4b-serif);font-size:.875rem;font-weight:700;letter-spacing:.06em}
.t4b-sub .help-list h3{margin:0 0 4px;font-size:1rem;font-weight:600;color:var(--text-on-dark)}
.t4b-sub .help-list p{margin:0;color:var(--text-on-dark-2);font-size:.875rem;line-height:1.6}
.t4b-sub .privacy-card{margin:20px 0 0;padding:18px 20px;border:1px solid rgba(255,255,255,.1);border-left:2px solid var(--accent-ember-dim);border-radius:4px;background:rgba(255,255,255,.025);box-shadow:none;color:var(--text-on-dark)}
.t4b-sub .privacy-icon{color:var(--accent-ember-dim);font-size:1.25rem}
.t4b-sub .privacy-card h3{margin:8px 0 8px;font-size:1rem;font-weight:600}
.t4b-sub .privacy-card p{margin:0 0 8px;color:var(--text-on-dark-2);font-size:.8125rem;line-height:1.7}
.t4b-sub .privacy-card p:last-child{margin:0}
.t4b-sub .form-card{padding:28px 32px 32px}
.t4b-sub .form-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 24px;padding:0 0 16px;border-bottom:1px solid rgba(255,255,255,.08)}
.t4b-sub .form-heading h2{margin:0;font-size:1.5rem;font-weight:700;letter-spacing:.02em}
.t4b-sub .form-heading>span{color:var(--text-on-dark-2);font-size:.75rem}
.t4b-sub .field{margin:0 0 22px}
.t4b-sub .field label{display:block;margin:0 0 8px;color:var(--text-on-dark);font-size:.875rem;font-weight:600;letter-spacing:.02em}
.t4b-sub .field label>span{color:var(--accent-ember)}
.t4b-sub .field label .optional{color:var(--text-on-dark-2);font-weight:400}
.t4b-sub .field-pair{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.t4b-sub :is(input,textarea,select){width:100%;min-height:48px;padding:11px 14px;border:1px solid var(--panel-border);border-radius:4px;background:#0F1012;color:var(--text-on-dark);font-size:1rem}
.t4b-sub :is(input,textarea,select):hover{border-color:#5A5250}
.t4b-sub :is(input,textarea,select):focus{border-color:var(--accent-ember)}
.t4b-sub :is(input,textarea)::placeholder{color:#8F8B88;opacity:1}
.t4b-sub :is(input,textarea,select)[aria-invalid=true]{border-color:var(--error)}
.t4b-sub .field-meta,.t4b-sub .field-hint{color:var(--text-on-dark-2);font-size:.75rem}
.t4b-sub .field-error{color:var(--error);font-size:.8125rem}
.t4b-sub .validation-summary{margin:0 0 20px;padding:12px 16px;border:1px solid rgba(240,165,146,.35);border-left:2px solid var(--error);border-radius:4px;background:rgba(240,165,146,.06);color:var(--error);font-size:.875rem}
.t4b-sub .validation-summary.validation-summary-valid{display:none}
.t4b-sub .submit-area{margin-top:8px;padding-top:20px;border-top:1px solid rgba(255,255,255,.08)}
.t4b-sub .submit-area>p{margin:0 0 14px;color:var(--text-on-dark-2);font-size:.8125rem}
.t4b-sub .submit-area #submit-status{margin:12px 0 0;color:var(--accent-ember);font-size:.875rem}
.t4b-sub .submit-area .button{min-width:220px}

/* Feedback thanks / receipt. */
.t4b-sub .receipt-card{max-width:720px;margin:48px auto 0;padding:48px 40px;text-align:center}
.t4b-sub .success-seal{display:grid;place-items:center;width:64px;height:64px;margin:0 auto 24px;border:1px solid var(--accent-ember-dim);border-radius:50%;color:var(--accent-ember);font-size:1.75rem}
.t4b-sub .receipt-card .eyebrow{margin:0 0 12px;color:var(--text-on-dark-2);font-size:.75rem;font-weight:600;letter-spacing:.24em}
.t4b-sub .receipt-card h1{margin:0 0 16px;font-family:var(--t4b-serif);font-size:2rem;font-weight:700;line-height:1.3;letter-spacing:.02em;color:var(--text-on-dark)}
.t4b-sub .receipt-card p{color:var(--text-on-dark-2);font-size:1rem;line-height:1.8}
.t4b-sub .receipt-number{display:flex;flex-direction:column;align-items:center;gap:10px;margin:28px 0 16px;padding:20px 16px;border:1px solid var(--panel-border);border-radius:4px;background:#0F1012}
.t4b-sub .receipt-number>span:first-child,.t4b-sub .receipt-number #copy-status{color:var(--text-on-dark-2);font-size:.75rem}
.t4b-sub .receipt-number code{color:var(--accent-ember);font-size:1.125rem;letter-spacing:.06em;overflow-wrap:anywhere}
.t4b-sub .receipt-card .private-note{margin:0 0 24px;font-size:.8125rem}
.t4b-sub .receipt-card .actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}

@media (max-width:1024px){
  .t4b-sub .community-layout{grid-template-columns:minmax(0,1fr)}
  .t4b-sub .sidebar-sticky{position:static;grid-template-columns:1fr 1fr;align-items:start}
  .t4b-sub .sidebar-note{grid-column:1/-1}
  .t4b-sub .feedback-layout{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:768px){
  .sink-t4b{--t4b-header-h:56px}
  .t4b-header{height:56px}
  .t4b-header .header-inner{height:56px;min-height:56px;grid-template-columns:auto 1fr;justify-items:stretch;gap:8px;padding:0 12px}
  .t4b-header nav{grid-column:2;justify-content:flex-end;font-size:14px;letter-spacing:.04em}
  .t4b-header nav a{padding:6px 8px}
  .t4b-header .t4b-brand{gap:6px}
  .t4b-header .t4b-brand img.t4b-logo{height:36px}
  .t4b-draft-badge{padding:1px 4px;font-size:10px;letter-spacing:.02em}
  .t4b-home{margin-top:0}
  .sink-t4b main.t4b-sub{padding:0 12px 48px}
  .t4b-sub>.page-heading{padding:calc(var(--t4b-header-h) + 32px) 16px 28px}
  .t4b-sub>.page-heading h1{font-size:2rem}
  .t4b-sub>.page-heading p:last-child{font-size:1rem}
  .t4b-sub .community-layout,.t4b-sub .feedback-layout{margin-top:20px;gap:16px}
  .t4b-sub .sidebar-sticky{grid-template-columns:1fr;gap:16px}
  .t4b-sub .panel-heading{padding:18px 16px 10px}
  .t4b-sub .panel-heading h2{font-size:1.25rem}
  .t4b-sub .category-tabs{gap:0 16px;padding:0 16px}
  .t4b-sub .example-line,.t4b-sub .panel-bottom{padding-left:16px;padding-right:16px}
  .t4b-sub .bulletin-list{padding:0 16px}
  .t4b-sub .bulletin-row{grid-template-columns:auto minmax(0,1fr) 16px;gap:6px 10px;min-height:0;padding:14px 0}
  .t4b-sub .bulletin-category{grid-column:1;grid-row:1}
  .t4b-sub .bulletin-date{grid-column:2;grid-row:1}
  .t4b-sub .bulletin-title{grid-column:1/3;grid-row:2;display:block}
  .t4b-sub .bulletin-arrow{grid-column:3;grid-row:1/3}
  .t4b-sub .forum-row{gap:12px;padding:14px 16px}
  .t4b-sub .activity-banner{display:grid;grid-template-columns:96px minmax(0,1fr);align-items:center;gap:12px;min-height:0;padding:10px}
  .t4b-sub .activity-media{width:96px;height:72px;border-radius:3px;overflow:hidden}
  .t4b-sub .activity-copy{padding:0}
  .t4b-sub .activity-symbolic .activity-icon{justify-self:center}
  .t4b-sub .forum-reply{padding:16px}
  .t4b-sub .pagination{padding:12px 16px;gap:10px}
  .t4b-sub .article-wrap>article{padding:24px 18px 4px}
  .t4b-sub .thread-article{padding:24px 18px}
  .t4b-sub .article-heading h1,.t4b-sub .thread-article .article-heading h1{font-size:1.625rem}
  .t4b-sub .article-lead{font-size:1rem}
  .t4b-sub .article-body,.t4b-sub .thread-article .article-body{font-size:.9375rem}
  .t4b-sub .article-footer{flex-direction:column;align-items:flex-start;gap:8px}
  .t4b-sub .feedback-aside{padding:22px 18px}
  .t4b-sub .form-card{padding:22px 18px 24px}
  .t4b-sub .field-pair{grid-template-columns:1fr}
  .t4b-sub .submit-area .button{width:100%}
  .t4b-sub .receipt-card{margin-top:24px;padding:32px 18px}
  .t4b-sub .receipt-card h1{font-size:1.625rem}
  .t4b-sub .receipt-card .actions .button{flex:1 1 100%}
}
@media (max-width:480px){
  .t4b-header .t4b-brand img.t4b-logo{height:36px;width:36px}
  .t4b-header nav a+a{border-left-color:rgba(244,242,239,.2)}
}
@media (prefers-reduced-motion:reduce){.t4b-header{transition:none}}

/* ==========================================================================================
   BG fix (2026-10-09 #3, boss override of the light deck): no white bands anywhere on public T4b pages.
   The whole canvas is a continuous dark cinematic surface: --hero-gloom base + hero-haze/ember atmosphere +
   rock-seamless desaturated at 6% (≤8%, same R3 "change 1" material as the header). The former light-deck
   tokens are re-pointed to dark values so every light-surface rule (context line, back link, sidebar note,
   write notice, footer) flips with them. Floating panels get a deeper shadow + hairline to separate on dark.
   See docs/T4B-BG-FIX.md.
   ========================================================================================== */
.sink-t4b{--bg-page:#0C0B0B;--bg-deck-alt:#1B1B1F;--text-on-light:#F4F2EF;--text-on-light-2:#A9A6A3;--rule-light:rgba(244,242,239,.16);
  --t4b-float-shadow:0 0 0 1px rgba(255,255,255,.04),0 14px 36px rgba(0,0,0,.55),0 2px 6px rgba(0,0,0,.4)}
html:has(>body.sink-t4b){background:
  radial-gradient(120% 70% at 50% 0%,rgba(62,59,64,.42) 0%,rgba(51,46,47,.18) 38%,transparent 72%),
  radial-gradient(80% 50% at 50% 100%,rgba(200,137,81,.07) 0%,transparent 70%),
  linear-gradient(180deg,#121012 0%,#0C0B0B 42%,#090808 100%) #0A0909;
  background-attachment:scroll;color-scheme:dark}
body.sink-t4b{position:relative;background:transparent;color:var(--text-on-dark)}
/* Rock texture: fixed, grayscale, 6% — sits under all content, above the html gradient. */
body.sink-t4b::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:url(/assets/material-r3/hunyuan-rock-seamless.webp) repeat;background-size:512px auto;opacity:.06;filter:grayscale(1) contrast(1.1)}

/* Home: hero melts into the deck (no hard white edge); deck transparent over the continuous canvas. */
.t4b-hero{box-shadow:0 24px 48px -12px rgba(0,0,0,.6)}
.t4b-deck{position:relative;background:linear-gradient(180deg,rgba(10,9,9,.85) 0,rgba(51,46,47,.22) 140px,transparent 420px)}
.t4b-context{color:var(--text-on-dark-2)}
.t4b-card,.t4b-thumb{box-shadow:var(--t4b-float-shadow)}

/* Sub-pages: main stays transparent; page band fades into the canvas instead of ending on a light slab. */
.sink-t4b main.t4b-sub{background:none;color:var(--text-on-dark)}
.t4b-sub>.page-heading{box-shadow:0 24px 48px -16px rgba(0,0,0,.65)}
.t4b-sub :is(.stone-panel,.sidebar-panel,.form-card,.feedback-aside,.receipt-card,.article-wrap>article,.thread-layout>.community-main>.empty-state,.article-wrap>.empty-state){box-shadow:var(--t4b-float-shadow)}
.t4b-sub .forum-write-notice{border-color:rgba(255,255,255,.1);border-left-color:var(--accent-ember);box-shadow:var(--t4b-float-shadow)}

/* Footer: dark, on the same canvas — hairline + ember-tinted rule, never a white slab. */
.sink-t4b .t4b-footer{background:linear-gradient(180deg,rgba(8,8,10,0) 0,rgba(8,8,10,.6) 100%),url(/assets/t4b/footer-rule.png) center top/min(1440px,100%) 2px no-repeat;border-top:1px solid rgba(255,255,255,.06);color:var(--text-on-dark)}
.t4b-footer a{color:var(--text-on-dark)}
.sink-t4b .t4b-footer p{color:var(--text-on-dark-2)}

/* ==========================================================================================
   Forum shell (2026-10-09 #4) — READ-ONLY product shell for /Forum + /Forum/Thread under T4b.
   Compose is a disabled placeholder (no form, no POST). States: list / empty / error / not-found /
   locked / replies / replies-empty. Same dark canvas + 9-slice panel language. See docs/T4B-FORUM-SHELL.md.
   ========================================================================================== */
.t4b-forum .t4b-forum-head{align-items:center;flex-wrap:wrap}
.t4b-forum .t4b-forum-title{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.t4b-forum .t4b-compose-action{display:flex;align-items:center;gap:12px}
.t4b-readonly-chip{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border:1px solid rgba(255,255,255,.12);border-radius:999px;color:var(--text-on-dark-2);font-size:.75rem;letter-spacing:.08em;white-space:nowrap}
.t4b-readonly-chip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent-ember-dim);box-shadow:0 0 6px rgba(230,159,74,.5)}
.t4b-sub .button.t4b-compose-btn{min-height:40px;padding:8px 18px;gap:8px;font-size:.875rem}
.t4b-sub .button.t4b-compose-btn:disabled{opacity:.62;cursor:not-allowed;filter:saturate(.6);box-shadow:none;color:var(--text-on-dark)}
.t4b-soon{display:inline-flex;padding:1px 6px;border:1px solid rgba(230,159,74,.35);border-radius:3px;color:var(--accent-ember-dim);font-size:.6875rem;font-weight:600;letter-spacing:.04em}
.t4b-forum-cols{display:flex;justify-content:space-between;padding:10px 24px 8px;border-bottom:1px solid rgba(255,255,255,.08);color:var(--text-on-dark-2);font-size:.6875rem;letter-spacing:.24em}
.t4b-forum-cols span:last-child{width:120px;text-align:center}
.t4b-forum .forum-list{display:block}
.t4b-forum .forum-row .reply-count{display:flex;flex-direction:column;align-items:center;min-width:76px}
.t4b-forum .forum-row.is-pinned{background:linear-gradient(90deg,rgba(230,159,74,.06),transparent 40%)}
.t4b-forum .forum-row.is-locked h3{color:var(--text-on-dark-2)}
.t4b-lock-label{display:inline-flex;align-items:center;gap:4px;color:var(--text-on-dark-2);font-size:.75rem}
.t4b-lock-label svg{color:var(--accent-ember-dim)}
.t4b-sub .t4b-forum-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px}
.t4b-sub .t4b-forum-state h1,.t4b-sub .t4b-forum-state h2{margin:6px 0 2px;font-family:var(--t4b-serif);font-size:1.375rem;color:var(--text-on-dark)}
.t4b-sub .t4b-forum-state p{margin:0 0 10px;max-width:42ch;color:var(--text-on-dark-2);line-height:1.7}
.t4b-sub .thread-layout>.community-main>.t4b-forum-state{padding:56px 24px}
.t4b-state-icon{display:grid;place-items:center;width:48px;height:48px;border:1px solid var(--accent-ember-dim);border-radius:50%;color:var(--accent-ember);font-size:1.25rem;font-weight:700}
.t4b-state-actions{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:16px}
/* Thread: locked banner, replies, reply numbering. */
.t4b-locked-banner{display:flex;align-items:center;gap:10px;margin:0 0 18px;padding:10px 14px;border:1px solid rgba(230,159,74,.28);border-radius:4px;background:rgba(230,159,74,.06);color:var(--text-on-dark-2);font-size:.875rem}
.t4b-locked-banner svg{flex:none;color:var(--accent-ember)}
.t4b-locked-banner strong{margin-right:8px;color:var(--text-on-dark)}
.t4b-forum .forum-reply{align-items:flex-start}
.t4b-reply-main{flex:1;min-width:0}
.t4b-reply-main h3{display:flex;align-items:center;gap:8px}
.t4b-reply-no{margin-left:auto;color:var(--text-on-dark-2);font-size:.75rem;font-weight:400;letter-spacing:.06em}
.t4b-replies-empty{display:flex;align-items:center;gap:12px;margin:4px 24px 16px;padding:22px 18px;border:1px dashed rgba(255,255,255,.12);border-radius:4px;color:var(--text-on-dark-2)}
.t4b-replies-empty span{color:var(--accent-ember-dim)}
.t4b-replies-empty p{margin:0}
/* Compose placeholder card (disabled — nothing submits). */
.t4b-sub .t4b-compose-card{position:relative;margin-top:24px;padding:22px 24px 20px;border:1px solid var(--panel-border);border-image:url(/assets/t4b/panel-card-9slice.png) 16 fill / 16px stretch;border-radius:6px;background:var(--panel-fill);color:var(--text-on-dark);box-shadow:var(--t4b-float-shadow)}
.t4b-sub .t4b-compose-card::after{content:"";position:absolute;inset:0;border-left:2px solid var(--accent-ember);border-radius:6px 0 0 6px;pointer-events:none}
.t4b-sub .t4b-compose-card.is-locked::after{border-left-color:var(--text-on-dark-2)}
.t4b-compose-head{display:flex;align-items:center;gap:14px}
.t4b-compose-head>div{flex:1;min-width:0}
.t4b-compose-icon{display:grid;place-items:center;width:36px;height:36px;flex:none;border:1px solid var(--panel-border);border-radius:50%;color:var(--accent-ember-dim)}
.t4b-compose-eyebrow{margin:0 0 2px;color:var(--text-on-dark-2);font-size:.6875rem;font-weight:600;letter-spacing:.22em}
.t4b-sub .t4b-compose-card h2{margin:0;font-size:1.125rem;font-weight:700;color:var(--text-on-dark)}
.t4b-status-pill{flex:none;padding:3px 10px;border:1px solid rgba(230,159,74,.4);border-radius:999px;color:var(--accent-ember);font-size:.75rem;font-weight:600;letter-spacing:.08em}
.t4b-compose-card.is-locked .t4b-status-pill{border-color:rgba(255,255,255,.18);color:var(--text-on-dark-2)}
.t4b-compose-ghost{display:grid;gap:10px;margin:16px 0 14px;padding:14px;border:1px solid rgba(255,255,255,.06);border-radius:4px;background:rgba(0,0,0,.22);opacity:.55;user-select:none;pointer-events:none}
.t4b-ghost-field{padding:10px 12px;border:1px solid rgba(255,255,255,.1);border-radius:3px;color:var(--text-on-dark-2);font-size:.875rem}
.t4b-ghost-field.is-tall{min-height:72px}
.t4b-ghost-actions{display:flex;justify-content:space-between;align-items:center;gap:10px}
.t4b-ghost-chip{padding:2px 8px;border:1px solid var(--panel-border);border-radius:3px;color:var(--accent-ember-dim);font-size:.75rem}
.t4b-ghost-btn{padding:6px 16px;border:1px solid var(--cta-border);border-radius:3px;color:var(--text-on-dark-2);font-size:.8125rem;letter-spacing:.08em}
.t4b-sub .t4b-compose-card>p{margin:0 0 8px;color:var(--text-on-dark-2);font-size:.875rem;line-height:1.6}
.t4b-compose-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-top:6px}
@media (max-width:768px){
  .t4b-forum .t4b-forum-head{gap:10px}
  .t4b-forum .t4b-compose-action{width:100%;justify-content:space-between}
  .t4b-forum-cols{padding:8px 16px 6px}
  .t4b-forum-cols span:last-child{width:auto}
  .t4b-forum .forum-row .reply-count{min-width:52px}
  .t4b-sub .t4b-compose-card{padding:18px 16px}
  .t4b-compose-head{gap:10px}
  .t4b-compose-ghost{padding:10px}
  .t4b-replies-empty{margin:4px 16px 14px}
  .t4b-compose-foot .t4b-compose-btn{width:100%}
}

/* ==========================================================================================
   IA / nav (2026-10-09 #5, boss): 最新公告 > 活動 > 玩家討論區; feedback de-emphasised (no nav peer, no deck card).
   See docs/T4B-IA-NAV.md.
   ========================================================================================== */
.t4b-card-event{scroll-margin-top:calc(var(--t4b-header-h,72px) + 16px)}
.t4b-header nav a[aria-current=true]{color:#fff;box-shadow:inset 0 -2px 0 var(--accent-ember-dim)}
.t4b-card .t4b-forum-aside{margin-top:2px;font-size:.8125rem;color:var(--text-on-dark-2)}
.t4b-forum-aside a{color:var(--text-on-dark);text-decoration:underline;text-decoration-color:rgba(230,159,74,.5);text-underline-offset:3px}
.t4b-forum-aside a:hover{color:var(--accent-ember)}

/* ==========================================================================================
   Continued polish (2026-10-09 #6, boss "繼續"): 活動 destination, forum read-only finish, sub-page consistency.
   Pure additions — delete this block to return to d18d53c presentation. See docs/T4B-POLISH-CONT.md.
   ========================================================================================== */
/* Footer pinned to the viewport bottom on short pages (Error / Thanks / not-found) — no floating footer mid-screen. */
body.sink-t4b{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
body.sink-t4b>main{flex:1 0 auto;width:100%}
body.sink-t4b>.t4b-header,body.sink-t4b>.t4b-footer{flex:none;width:100%}

/* Nav: 活動 current when landing on /#t4b-events (js/t4b.js sets aria-current="location"). */
.t4b-header nav a[aria-current=location]{color:#fff;background:none;box-shadow:inset 0 -2px 0 var(--accent-ember)}

/* 活動 card = real destination: eyebrow + count chip, art thumbs, stretched links, empty/failed states. */
.t4b-card-event{scroll-margin-top:calc(var(--t4b-header-h,72px) + 24px)}
.t4b-card .t4b-card-eyebrow{margin:0 0 2px;color:var(--accent-ember-dim);font-size:.6875rem;font-weight:600;letter-spacing:.24em;line-height:1.4}
.t4b-card-head.t4b-event-head{align-items:flex-end}
.t4b-count-chip{display:inline-flex;align-items:center;padding:2px 10px;border:1px solid rgba(255,255,255,.12);border-radius:999px;color:var(--text-on-dark-2);font-size:.75rem;letter-spacing:.06em;white-space:nowrap;font-variant-numeric:tabular-nums}
.t4b-card-event .t4b-event-list{gap:0;margin-top:2px}
.t4b-card-event .t4b-event-list li+li{border-top:1px solid rgba(255,255,255,.08)}
.t4b-event-list li.t4b-event{position:relative;display:grid;grid-template-columns:88px minmax(0,1fr) 14px;align-items:center;gap:12px;padding:10px 0}
.t4b-event-thumb{display:block;width:88px;height:56px;overflow:hidden;border:1px solid rgba(255,255,255,.08);border-radius:4px;background:var(--hero-mid)}
.t4b-event-thumb img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .3s ease}
.t4b-event-thumb.is-symbolic{display:grid;place-items:center;background:#1D1E22;color:var(--accent-ember-dim)}
.t4b-event-body{display:grid;gap:2px;min-width:0}
.t4b-card-event .t4b-event-body h3{margin:0;font-size:1rem;font-weight:600;line-height:1.45}
.t4b-event-body h3 a{color:var(--text-on-dark)}
.t4b-event.has-link h3 a::after{content:"";position:absolute;inset:0;border-radius:4px}
.t4b-event.has-link:hover h3 a{color:var(--accent-ember)}
.t4b-event.has-link:hover .t4b-event-thumb img{transform:scale(1.04)}
.t4b-event-body h3 a:focus-visible{outline:none}
.t4b-event.has-link:has(h3 a:focus-visible){outline:2px solid var(--accent-ember);outline-offset:2px;border-radius:4px}
.t4b-card .t4b-event-body p{font-size:.8125rem;line-height:1.5}
.t4b-event-body .sample-label{font-size:.6875rem;color:var(--text-on-dark-2)}
.t4b-event-arrow{color:var(--accent-ember-dim)}
.t4b-event.has-link:hover .t4b-event-arrow{color:var(--accent-ember)}
.t4b-events-state{display:flex;align-items:center;gap:14px;margin:6px 0;padding:22px 16px;border:1px dashed rgba(255,255,255,.12);border-radius:4px}
.t4b-events-icon{display:grid;place-items:center;flex:none;width:40px;height:40px;border:1px solid var(--accent-ember-dim);border-radius:50%;color:var(--accent-ember);font-weight:700}
.t4b-card .t4b-events-state-title{color:var(--text-on-dark);font-weight:600}
.t4b-card .t4b-event-note{margin-top:auto;padding-top:10px;border-top:1px solid rgba(255,255,255,.06);font-size:.75rem;color:var(--text-on-dark-2)}
/* Arrival cue when 活動 is the active nav target: brief ember ring, no layout shift. */
.t4b-card-event[data-t4b-target=active]{animation:t4b-target-ring 1.6s ease-out 1}
@keyframes t4b-target-ring{0%{box-shadow:0 0 0 2px rgba(230,159,74,.85),var(--t4b-float-shadow)}100%{box-shadow:0 0 0 1px rgba(230,159,74,0),var(--t4b-float-shadow)}}
@media (prefers-reduced-motion:reduce){.t4b-card-event[data-t4b-target=active]{animation:none;box-shadow:0 0 0 1px rgba(230,159,74,.6),var(--t4b-float-shadow)}.t4b-event-thumb img{transition:none}}

/* Compact page band for detail / status pages (announcement detail, forum thread, thanks, error) + breadcrumb. */
.t4b-sub>.page-heading.t4b-band-compact{padding-top:calc(var(--t4b-header-h) + 28px);padding-bottom:22px;background-position:50% 34%,50% 34%,0 0}
.t4b-sub>.page-heading.t4b-band-compact .eyebrow{margin-bottom:8px}
.t4b-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:1rem;letter-spacing:.04em;color:var(--text-on-dark-2)}
.t4b-crumbs a{color:var(--text-on-dark);border-bottom:1px solid transparent}
.t4b-crumbs a:hover{border-bottom-color:var(--accent-ember)}
.t4b-crumbs [aria-current=page]{color:var(--text-on-dark-2)}
.t4b-crumb-sep{color:rgba(244,242,239,.32)}
/* Deep-link /Feedback form band (reviewable pass): crumb under 玩家討論區 sits between eyebrow and title. */
.t4b-crumbs.t4b-crumbs-inline{margin:-4px 0 14px}
.t4b-sub>.t4b-band-compact+.community-layout,.t4b-sub>.t4b-band-compact+.community-layout.thread-layout{margin-top:24px}
.t4b-sub>.t4b-band-compact+.receipt-card,.t4b-sub>.t4b-band-compact+.error-page{margin-top:40px}
/* Error page joins the floating-card language (was site.css chrome only). */
.t4b-sub>.error-page{position:relative;max-width:720px;margin:40px auto 0;padding:48px 40px;border:1px solid var(--panel-border);border-image:url(/assets/t4b/panel-card-9slice.png) 16 fill / 16px stretch;border-radius:6px;background:var(--panel-fill);color:var(--text-on-dark);box-shadow:var(--t4b-float-shadow);text-align:center}
.t4b-sub>.error-page .eyebrow{color:var(--text-on-dark-2);font-size:.75rem;font-weight:600;letter-spacing:.24em}
.t4b-sub>.error-page h1{margin:8px 0 14px;font-family:var(--t4b-serif);font-size:2rem;color:var(--text-on-dark)}
.t4b-sub>.error-page p{color:var(--text-on-dark-2);line-height:1.8}
.t4b-sub>.error-page .actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:20px}
/* Back link sits on the dark canvas: tighter rhythm under the band. */
.t4b-sub .community-main>.back-link,.t4b-sub .article-wrap>.back-link{margin:0 0 10px}
/* Announcement detail: article heading rhythm matches forum thread. */
.t4b-sub .article-wrap>article{padding:36px 40px 8px}

/* Forum index: grid rows aligned with the 主題｜回覆 column header; meta separators; pinned/locked finish. */
.t4b-forum .t4b-forum-cols,.t4b-forum .forum-row{display:grid;grid-template-columns:minmax(0,1fr) 88px 16px;column-gap:16px;align-items:center}
.t4b-forum .t4b-forum-cols span:last-child{width:auto;text-align:center}
.t4b-forum .forum-row{min-height:88px;padding:16px 24px}
.t4b-forum .forum-row .reply-count{min-width:0}
.t4b-forum .forum-row-main>h3{margin:8px 0 4px;font-size:1.0625rem;line-height:1.45}
.t4b-row-meta,.t4b-thread-meta{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px}
.t4b-dot{color:rgba(244,242,239,.3)}
.t4b-forum .forum-row.is-pinned{box-shadow:inset 2px 0 0 var(--accent-ember-dim)}
.t4b-forum .forum-row:last-child{border-bottom:0}
.t4b-forum .forum-list+.pagination{border-top:1px solid rgba(255,255,255,.08)}
.t4b-forum .t4b-forum-board .empty-state.t4b-forum-state{margin:20px 24px 24px;padding:44px 20px}
.t4b-forum .category-tabs a{position:relative}
/* Thread: OP chip, reply rhythm, meta line. */
.t4b-op-chip{display:inline-flex;padding:0 6px;border:1px solid rgba(230,159,74,.4);border-radius:3px;color:var(--accent-ember);font-size:.6875rem;font-weight:600;letter-spacing:.06em;line-height:1.6}
.t4b-forum .forum-reply{padding:18px 24px}
.t4b-forum .forum-reply+.forum-reply{border-top:1px solid rgba(255,255,255,.06)}
.t4b-forum .reply-avatar{width:34px;height:34px;font-size:.875rem}
.t4b-thread-meta{color:var(--text-on-dark-2)}
/* Compose placeholder: icon glyphs are SVG now; head/foot rhythm tightened. */
.t4b-compose-icon svg{display:block}
.t4b-sub .t4b-compose-card{padding:22px 24px}
.t4b-compose-ghost{margin:14px 0 12px}
.t4b-sub .t4b-compose-card>.text-link{display:inline-block;margin-top:2px}

@media (max-width:768px){
  .t4b-event-list li.t4b-event{grid-template-columns:72px minmax(0,1fr) 14px;gap:10px}
  .t4b-event-thumb{width:72px;height:48px}
  .t4b-sub>.page-heading.t4b-band-compact{padding:calc(var(--t4b-header-h) + 20px) 16px 18px}
  .t4b-crumbs{font-size:.9375rem}
  .t4b-sub>.t4b-band-compact+.community-layout,.t4b-sub>.t4b-band-compact+.community-layout.thread-layout{margin-top:16px}
  .t4b-sub>.t4b-band-compact+.receipt-card,.t4b-sub>.t4b-band-compact+.error-page{margin-top:24px}
  .t4b-sub>.error-page{padding:32px 18px}
  .t4b-sub>.error-page h1{font-size:1.625rem}
  .t4b-sub>.error-page .actions .button{flex:1 1 100%}
  .t4b-sub .article-wrap>article{padding:24px 18px 4px}
  .t4b-forum .t4b-forum-cols,.t4b-forum .forum-row{grid-template-columns:minmax(0,1fr) 56px 12px;column-gap:10px}
  .t4b-forum .forum-row{padding:14px 16px;min-height:0}
  .t4b-forum .forum-reply{padding:16px}
  .t4b-forum .t4b-forum-board .empty-state.t4b-forum-state{margin:16px;padding:32px 14px}
  .t4b-sub .t4b-compose-card{padding:18px 16px}
}

/* 網設 04 波次 0／1 (clear-fb-all-themes + forum read side): breadcrumb ›, reply anchors/time, 作者 badge, 44px pagination. */
.t4b-sub .pagination a{min-height:44px}
.t4b-row-meta time,.t4b-thread-meta time,.t4b-reply-meta time{color:inherit;font-variant-numeric:tabular-nums}
.t4b-forum .reply-count span{white-space:nowrap}
.t4b-forum .forum-reply{scroll-margin-top:calc(var(--t4b-header-h,72px) + 24px)}
.t4b-forum .forum-reply:target{background:linear-gradient(90deg,rgba(230,159,74,.08),transparent 70%);box-shadow:inset 2px 0 0 var(--accent-ember)}
.t4b-reply-main h3{flex-wrap:wrap}
.t4b-reply-author{font-weight:600}
.t4b-sub .badge.author-badge{padding:0 6px;border-color:rgba(230,159,74,.45);color:var(--accent-ember);font-size:.6875rem;font-weight:600;line-height:1.6}
.t4b-reply-meta{display:inline-flex;align-items:center;gap:8px;margin-left:auto;color:var(--text-on-dark-2);font-size:.75rem;font-weight:400;letter-spacing:.04em}
.t4b-reply-meta .t4b-reply-no{margin-left:0;color:var(--text-on-dark-2);border-bottom:1px solid transparent}
.t4b-reply-meta .t4b-reply-no:hover{color:var(--accent-ember);border-bottom-color:var(--accent-ember)}
.t4b-sub>.page-heading .thread-breadcrumb{margin:0}
/* fix-badge-hide-420 (boss ruling 2026-10-10): on narrow headers (≤420px, e.g. 390 with the mock auth banner) the draft badge
   overlapped 首頁. Hide it there only; the DOM text and the brand aria-label (logo 草案待老闆換) stay, wider layouts unchanged. */
@media (max-width:420px){.t4b-header .t4b-draft-badge{display:none}}
