:root{
  --bg:#1b1512; --panel:#2a211b; --panel2:#3a2e25; --paper:#efe6d3; --paper2:#e2d6bd;
  --ink:#241c16; --amber:#e0a343; --teal:#3d8a8a; --red:#b83a2e; --green:#5f8a4a; --text:#f2e9d8; --muted:#b8a890;
  --font:"Helvetica Neue",Helvetica,Arial,sans-serif; --serif:Georgia,"Times New Roman",serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--font)}
#gl{position:fixed;inset:0;width:100%;height:100%;display:block}
#vignette{position:fixed;inset:0;pointer-events:none;z-index:5;background:radial-gradient(ellipse at center,rgba(0,0,0,0) 58%,rgba(18,16,24,.34) 100%)}
.hidden{display:none!important}
#loadfloor{position:fixed;left:14px;bottom:12px;z-index:35;padding:4px 11px;border-radius:3px;background:rgba(20,16,12,.66);border:1px solid rgba(224,163,67,.32);color:#ded2b8;font:12px/1.5 "Helvetica Neue",Helvetica,Arial,sans-serif;letter-spacing:.05em;pointer-events:none}
button{font-family:inherit}
.btn{background:var(--amber);color:var(--ink);border:0;padding:10px 18px;font-weight:700;letter-spacing:.02em;cursor:pointer;border-radius:3px;box-shadow:0 2px 0 #8a5f1e;text-transform:uppercase;font-size:13px}
.btn:hover{filter:brightness(1.08)}
.btn:active{transform:translateY(1px);box-shadow:none}
.btn.ghost{background:transparent;color:var(--amber);box-shadow:inset 0 0 0 2px var(--amber)}
.btn.big{font-size:16px;padding:14px 26px}
.btn[disabled]{opacity:.4;cursor:not-allowed}

/* grain overlay */
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.07;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='.9'/></svg>")}

/* HUD */
#hud{position:fixed;inset:0;pointer-events:none;z-index:10}
#hud-top{display:flex;justify-content:space-between;padding:14px;gap:12px;flex-wrap:nowrap}
.hud-box{background:rgba(27,21,18,.82);border:1px solid #4a3a2e;border-top:3px solid var(--amber);padding:10px 14px;min-width:0;flex:0 1 300px;backdrop-filter:blur(3px);pointer-events:auto}
.hud-title{font-weight:800;letter-spacing:.06em;text-transform:uppercase;font-size:12px;color:var(--amber);margin-bottom:6px}
.ap-row{font-size:12px;color:var(--muted);margin-bottom:8px}
.pips{display:inline-block;margin-left:6px;vertical-align:middle}
.pips i{display:inline-block;width:12px;height:12px;border-radius:50%;background:var(--amber);margin-right:4px;box-shadow:0 0 6px var(--amber)}
.pips i.off{background:#4a3a2e;box-shadow:none}
.stat{display:grid;grid-template-columns:76px 1fr 30px;align-items:center;gap:8px;font-size:12px;margin:3px 0}
.stat label{color:var(--muted)}
.stat b{text-align:right;font-variant-numeric:tabular-nums}
.bar{height:8px;background:#4a3a2e;border-radius:2px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--amber);width:50%;transition:width .5s}
.bar.red i{background:var(--red)}
.bar.teal i{background:var(--teal)}
#hud-objective{flex:0 1 340px;max-width:340px}
#hud-tasks{margin:0;padding-left:16px;font-size:13px;line-height:1.4}
#hud-tasks li.done{color:var(--muted);text-decoration:line-through}
.hint{font-size:11px;color:var(--muted);margin-top:8px}
#prompt{position:fixed;left:50%;bottom:60px;transform:translateX(-50%);background:rgba(27,21,18,.9);border:1px solid var(--amber);color:var(--text);padding:10px 18px;font-size:15px;letter-spacing:.02em}
#prompt kbd{background:var(--amber);color:var(--ink);padding:2px 7px;border-radius:3px;font-weight:800;margin-right:8px;font-family:inherit}
#toasts{position:fixed;right:14px;bottom:14px;display:flex;flex-direction:column;gap:8px;max-width:360px}
.toast{background:var(--paper);color:var(--ink);padding:10px 14px;font-size:13px;border-left:4px solid var(--amber);animation:toastin .3s ease;box-shadow:0 6px 18px rgba(0,0,0,.4)}
.toast.bad{border-color:var(--red)}
.toast.good{border-color:var(--green)}
@keyframes toastin{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* Modal */
#modal{position:fixed;inset:0;background:rgba(10,7,5,.62);z-index:40;display:flex;align-items:center;justify-content:center;padding:20px}
#modal-card{background:var(--paper);color:var(--ink);width:min(760px,96vw);max-height:92vh;overflow:auto;box-shadow:0 30px 60px rgba(0,0,0,.6);border-top:8px solid var(--amber);animation:cardin .25s ease}
@keyframes cardin{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}
.card-head{display:flex;gap:18px;padding:22px 26px 12px;align-items:center;border-bottom:1px solid #cdbfa3}
.card-head svg{width:96px;height:96px;flex:none;background:#d9cdb2;border-radius:4px}
.card-head .who h3{margin:0;font-size:22px;font-family:var(--serif)}
.card-head .who .t{color:#6b5a48;font-size:13px}
.card-head .who .att{font-size:12px;margin-top:6px}
.card-body{padding:16px 26px 22px}
.card-body p{line-height:1.5;font-size:15px;margin:0 0 12px}
.card-body .line{font-family:var(--serif);font-style:italic;font-size:17px;border-left:3px solid var(--amber);padding-left:12px;margin-bottom:16px}
.choices{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.choice{display:block;width:100%;text-align:left;background:#fff8e8;border:1px solid #cdbfa3;padding:12px 14px;cursor:pointer;font-size:14px;transition:.15s}
.choice:hover{background:#fff;border-color:var(--amber);transform:translateX(3px)}
.choice[disabled]{opacity:.45;cursor:not-allowed;transform:none}
.choice .ct{font-weight:700}
.choice .cd{display:block;color:#6b5a48;font-size:12px;margin-top:3px}
.choice .cost{float:right;font-size:11px;color:var(--amber);font-weight:800;letter-spacing:.08em}
.card-foot{display:flex;justify-content:flex-end;gap:8px;padding:0 26px 22px}

.lesson{background:var(--ink);color:var(--paper);padding:18px 26px;margin:0 0 0}
.lesson .lk{color:var(--amber);font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-weight:800}
.lesson h4{font-family:var(--serif);font-size:22px;margin:6px 0 10px}
.lesson p{font-size:14px;line-height:1.5;margin:0 0 10px;color:#e9dfcc}
.lesson .apply{background:rgba(224,163,67,.12);border-left:3px solid var(--amber);padding:10px 12px;font-size:13px}
.outcome{padding:14px 26px;font-size:15px;line-height:1.5}
.delta{display:inline-block;font-size:12px;font-weight:800;padding:2px 7px;border-radius:3px;margin:2px 4px 2px 0;background:#e6dcc4}
.delta.up{color:#2f6b2f}.delta.down{color:#8a2a1f}

.rules{padding:20px 26px}
.rules h3{font-family:var(--serif);margin:0 0 4px}
.rules ol{padding-left:22px}
.rules li{margin-bottom:12px;line-height:1.45;font-size:14px}
.rules li b{display:block;font-size:15px}
.rules li i{display:block;color:#6b5a48;font-size:13px;font-style:normal;margin-top:3px}

.reorg{padding:22px 26px;font-size:15px;line-height:1.55}
.reorg h3{font-family:var(--serif);font-size:26px;margin:0 0 12px}
.reorg .memo{background:#fff;padding:14px 16px;border:1px solid #cdbfa3;font-family:"Courier New",monospace;font-size:13px;white-space:pre-wrap;margin:10px 0}

/* Panel */
#panel{position:fixed;top:0;right:0;bottom:0;width:min(420px,96vw);background:var(--panel);border-left:2px solid var(--amber);z-index:15;display:flex;flex-direction:column;box-shadow:-20px 0 40px rgba(0,0,0,.5)}
.panel-head{display:flex;align-items:center;gap:10px;padding:14px;border-bottom:1px solid #4a3a2e}
.panel-head h2{margin:0;font-size:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);flex:1}
#panel-select{background:var(--paper);color:var(--ink);border:0;padding:6px 8px;font-size:13px;max-width:180px}
#panel-body{padding:14px;overflow:auto;flex:1}
.rolo{background:var(--paper);color:var(--ink);padding:14px;border-radius:3px}
.rolo .top{display:flex;gap:12px;align-items:center}
.rolo svg{width:84px;height:84px;background:#d9cdb2;border-radius:4px}
.rolo h3{margin:0;font-family:var(--serif)}
.rolo .t{font-size:12px;color:#6b5a48}
.rolo dl{display:grid;grid-template-columns:90px 1fr;gap:6px 10px;font-size:13px;margin:12px 0 0}
.rolo dt{color:#6b5a48}
.rolo .attbar{height:8px;background:#d9cdb2;border-radius:2px;position:relative;margin-top:4px}
.rolo .attbar i{position:absolute;top:0;bottom:0;background:var(--green)}
.rolo .attbar i.neg{background:var(--red)}
.rolo .read{margin-top:12px;font-size:13px;line-height:1.45;border-top:1px dashed #cdbfa3;padding-top:10px}
.rolo .read.locked{color:#8a7a66;font-style:italic}
.orgchart{margin-top:14px;font-size:12px;color:var(--muted)}
.orgchart .row{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0}
.orgchart .chip{background:var(--panel2);padding:4px 8px;border-radius:3px;color:var(--text);cursor:pointer;border-left:3px solid #666}
.orgchart .chip.you{border-color:var(--amber);font-weight:700}
.orgchart .chip.pratt{border-color:#c98a2e}.orgchart .chip.kessler{border-color:#3d8a8a}
.orgchart .lvl{width:100%;font-size:10px;letter-spacing:.1em;text-transform:uppercase;margin-top:6px}

/* Title */
#title{position:fixed;inset:0;z-index:30;background:radial-gradient(1200px 700px at 30% 40%,#3a2b20,#1b1512 70%);display:flex;align-items:center;justify-content:space-between;padding:0 8vw;overflow:hidden}
#title::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(180deg,transparent 0 22px,rgba(0,0,0,.18) 22px 26px);pointer-events:none}
.title-inner{position:relative;z-index:1;max-width:560px}
.kicker{color:var(--amber);letter-spacing:.3em;font-size:12px;font-weight:800}
#title h1{font-family:Impact,"Arial Black",Helvetica,sans-serif;font-size:min(150px,18vw);line-height:.86;margin:10px 0 18px;color:var(--paper);letter-spacing:-.01em;text-shadow:6px 6px 0 var(--red)}
/* renamed from `.tag` 2026-09-20: `.tag` is also the Person card's chip class in menu.css, which loads last, so the
   game's first screen printed its own strapline as a 9.5 px uppercase chip on a cream slab the width of the column */
.title-tag{font-family:var(--serif);font-size:20px;line-height:1.4;color:#e9dfcc;margin:0 0 24px;max-width:38ch}
.fine{color:var(--muted);font-size:13px;max-width:440px;line-height:1.5}

/* ---- the three title objects (docs/ART-DIRECTION.md, "The menu as objects on the desk")
   One column, one width, so the three share a left AND a right edge and read as a stack of forms on the blotter
   rather than three loose rectangles on two rows. Each is paper, not a fill: a gradient down the face, a 1 px
   highlight along the top edge, a darker 2 px bottom edge that loses 1 px when the thing is pressed, and a cast
   shadow that grows as it lifts. Nothing here is a flat colour inside a hard 2 px outline.
   ART-DIRECTION allows HTML buttons in the desk's language as the fallback to real 3D props; this is that. */
.title-btns{display:grid;gap:11px;width:min(430px,100%);margin-bottom:22px}
.deskbtn{position:relative;display:block;width:100%;text-align:left;cursor:pointer;
  font-family:inherit;font-size:14px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  padding:14px 18px;border:0;border-radius:2px;color:#2b211a;
  background:linear-gradient(176deg,#f7f0de 0%,#ebe1ca 64%,#e1d6bc 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -2px 0 #b6a889,0 6px 14px rgba(0,0,0,.46);
  transition:transform 150ms cubic-bezier(.2,.8,.2,1),box-shadow 150ms cubic-bezier(.2,.8,.2,1)}
.deskbtn:hover{transform:translateY(-2px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),inset 0 -2px 0 #b6a889,0 12px 22px rgba(0,0,0,.52)}
.deskbtn:active{transform:translateY(1px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),inset 0 -1px 0 #b6a889,0 3px 8px rgba(0,0,0,.42)}
.deskbtn:focus-visible{outline:2px solid var(--amber);outline-offset:3px}
.deskbtn[disabled]{cursor:not-allowed;filter:grayscale(.55) brightness(.92);opacity:.6;transform:none}
/* rescue() (ui.js) disables Play and the tutorial when the floor could not be built: a dead memo does not get stamped */
.deskbtn.memo[disabled]{padding-right:18px}
.deskbtn.memo[disabled]::after{display:none}
.deskbtn.memo[disabled]::before{right:18px}
/* the memo: a typed line on the blotter with a rubber START stamp struck across the right end */
.deskbtn.memo{padding:17px 92px 17px 18px;font-size:15px;
  background:linear-gradient(176deg,#fbf5e6 0%,#f0e7d2 64%,#e6dcc2 100%)}
.deskbtn.memo::before{content:"";position:absolute;left:18px;right:92px;bottom:11px;height:1px;background:rgba(138,95,30,.28)}
.deskbtn.memo::after{content:"START";position:absolute;right:14px;top:50%;
  transform:translateY(-50%) rotate(-7deg);padding:3px 9px;
  font-size:13px;font-weight:800;letter-spacing:.16em;color:#a8412f;
  border:2px solid #a8412f;border-radius:2px;opacity:.82}
.deskbtn.memo:hover::after{opacity:1}
/* the booklet: a slim stapled cover with a darker spine at the left and the edge of the pages showing at the right */
.deskbtn.booklet{padding-left:28px;
  background:linear-gradient(176deg,#ece3cd 0%,#e2d8c0 64%,#d8ccb1 100%)}
.deskbtn.booklet::before{content:"";position:absolute;left:0;top:0;bottom:0;width:11px;border-radius:2px 0 0 2px;
  background:linear-gradient(90deg,#8a5f1e,#b08a46 62%,rgba(176,138,70,0))}
.deskbtn.booklet::after{content:"";position:absolute;right:0;top:4px;bottom:4px;width:5px;border-radius:0 2px 2px 0;
  background:repeating-linear-gradient(180deg,#d9cdb3 0 2px,#c3b499 2px 4px)}
/* the note: a smaller hand-written slip, set a degree off square, with a metal clip over its top edge */
.deskbtn.note{width:84%;padding:12px 18px;font-size:13px;transform:rotate(-1.1deg);
  background:linear-gradient(176deg,#f3ead4 0%,#e8dec6 64%,#ded3b8 100%)}
.deskbtn.note:hover{transform:rotate(-1.1deg) translateY(-2px)}
.deskbtn.note:active{transform:rotate(-1.1deg) translateY(1px)}
/* the clip: a folded steel slide over the top edge, its mouth open toward the paper */
.deskbtn.note::before{content:"";position:absolute;right:26px;top:-8px;width:26px;height:21px;border-radius:3px 3px 1px 1px;
  background:linear-gradient(100deg,#b9bfc6 0%,#e7ebef 34%,#9aa1a9 62%,#c7ccd2 100%);
  box-shadow:0 2px 4px rgba(0,0,0,.45)}
.deskbtn.note::after{content:"";position:absolute;right:31px;top:-2px;width:16px;height:17px;border-radius:2px;
  background:linear-gradient(176deg,#efe6d0,#e4dac2);box-shadow:inset 0 1px 0 rgba(255,255,255,.7)}
@media (prefers-reduced-motion:reduce){
  .deskbtn,.deskbtn:hover,.deskbtn:active{transition:none;transform:none}
  .deskbtn.note,.deskbtn.note:hover,.deskbtn.note:active{transform:rotate(-1.1deg)}
}
#title-portraits{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,110px);gap:10px;transform:rotate(-4deg)}
#title-portraits svg{width:110px;height:110px;background:#d9cdb2;border-radius:4px;box-shadow:0 10px 20px rgba(0,0,0,.5)}
@media (max-width:900px){#title-portraits{display:none}}

/* narrow layouts (§6): keep both boxes on one row down to ~700 px, then stack them; the ♪ ☼ buttons stay with the panel */
@media (max-width:700px){
  #hud-top{flex-wrap:wrap}
  .hud-box{flex:1 1 100%}
  #hud-objective{margin-left:0;max-width:none}
  #btn-mute,#btn-quality{order:3}
}
/* ---- additions: mute, panel tabs, journal, quarter report, learned list */
#hud-top{align-items:flex-start}
#hud-objective{margin-left:auto}
#btn-mute{pointer-events:auto;flex:none;width:34px;height:34px;border:1px solid #4a3a2e;border-top:3px solid var(--amber);background:rgba(27,21,18,.82);color:var(--amber);font-size:18px;line-height:1;cursor:pointer;backdrop-filter:blur(3px)}
#btn-mute:hover{filter:brightness(1.15)}
#btn-mute.muted{color:var(--muted);text-decoration:line-through;border-top-color:#4a3a2e}
/* graphics-quality toggle (created by game.js at start, next to the mute button); mirrors #btn-mute and resets .btn.ghost */
#btn-quality{pointer-events:auto;flex:none;width:34px;height:34px;padding:0;border:1px solid #4a3a2e;border-top:3px solid var(--amber);border-radius:0;box-shadow:none;background:rgba(27,21,18,.82);color:var(--amber);font-size:18px;line-height:1;cursor:pointer;backdrop-filter:blur(3px);text-transform:none}
#btn-quality:hover{filter:brightness(1.15)}
#btn-quality.low{color:var(--muted);border-top-color:#4a3a2e}
/* low-fx mode (body.lowfx, set by Game.setQuality): drop the three full-screen compositor layers that cost ~2.7 ms/frame on an integrated GPU */
body.lowfx::after{display:none}
body.lowfx .hud-box,body.lowfx #btn-mute,body.lowfx #btn-quality{backdrop-filter:none}
body.lowfx #vignette{display:none}
.muted{font-size:13px;color:#6b5a48}
.deltas{margin-top:6px}
.lesson .lk .new{color:var(--paper);background:var(--red);padding:1px 6px;border-radius:2px;margin-left:8px;letter-spacing:.06em}

.panel-tabs{display:flex;gap:4px}
.panel-tabs .tab{background:transparent;border:1px solid #4a3a2e;color:var(--muted);padding:5px 10px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;border-radius:2px}
.panel-tabs .tab.active{background:var(--amber);color:var(--ink);border-color:var(--amber);font-weight:800}
.journal{color:var(--text)}
.journal .jh{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);font-weight:800;margin:6px 0 8px}
.journal .rules-mini{margin:0 0 16px;padding-left:20px;font-size:12px;line-height:1.4}
.journal .rules-mini li{margin-bottom:6px}
.journal .rules-mini b{display:block;color:var(--text)}
.journal .rules-mini span{color:var(--muted)}
.journal .jl{background:var(--paper);color:var(--ink);padding:12px 14px;border-radius:3px;margin-bottom:10px;border-left:4px solid var(--amber)}
.journal .jl h4{margin:0 0 6px;font-family:var(--serif);font-size:17px}
.journal .jl p{margin:0 0 8px;font-size:13px;line-height:1.45}
.journal .jl .apply{background:rgba(224,163,67,.16);border-left:3px solid var(--amber);padding:8px 10px;font-size:12px;line-height:1.4}
.journal .jl.empty{color:#6b5a48;font-style:italic;font-size:13px}

.report .ritem{border-top:1px solid #cdbfa3;padding:10px 0}
.report .ritem:first-of-type{border-top:0}
.report .ritem .rk{font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;color:#8a6a2e}
.report .ritem.ignored .rk{color:var(--red)}
.report .ritem.incident .rk{color:var(--red)}
.report .ritem.rival .rk{color:var(--teal)}
.report .ritem p{margin:4px 0 4px;font-size:14px;line-height:1.45}
.report .ritem .why{font-size:12px;color:#6b5a48;font-style:italic;margin-top:4px;padding-left:10px;border-left:2px solid #cdbfa3}
.report .ritem.incident p{font-weight:700}
/* the quarter's reading of people (docs/TYPES.md §3): what they showed you, and where a read of yours was wrong */
.report .ritem.noticed,.report .ritem.correction{border-left:3px solid var(--amber);padding-left:11px}
.report .ritem.correction{border-left-color:#c46f3a}
.report .ritem.noticed .rk{color:#8a5f1e}
.report .ritem.correction .rk{color:#c46f3a}
.report .ritem ul{margin:4px 0 4px;padding-left:18px;font-size:13px;line-height:1.5}
.report .ritem li{margin-bottom:3px}
.report .ritem.correction p{font-family:Georgia,"Times New Roman",serif;font-style:italic}

.learned{background:var(--ink);color:var(--paper);padding:16px 26px}
.learned .lk{color:var(--amber);font-size:11px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;margin-bottom:8px}
.learned .li{padding:6px 0;border-top:1px solid rgba(239,230,211,.12);font-size:13px;line-height:1.4}
.learned .li b{display:block;font-family:var(--serif);font-size:15px}
.learned .li span{color:#d8ccb4}
.orgchart .chip.hale{border-color:#a98ab8}

/* the title screen is a live 3D desk (docs/ART-DIRECTION.md). The canvas sits behind the title copy; the copy keeps
   its own stacking context above it, and a warm scrim keeps the lettering readable over the render. */
#title-gl{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
#title::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:linear-gradient(100deg,rgba(20,14,10,.86) 0%,rgba(20,14,10,.62) 34%,rgba(20,14,10,.12) 62%,rgba(20,14,10,0) 100%)}
#title .title-inner{position:relative;z-index:2}
#title-portraits{position:relative;z-index:2;opacity:.9}
