/* ===== Dollhouse Cluedo: pastel, symmetrical, flat, deadpan. Wes-Anderson dollhouse meets a murder-mystery board game. ===== */
:root{
  --ink:#3a2b33; --cream:#fbf3e4; --paper:#f6e7d3; --tile:#f1dfc6;
  --pink:#f2b5b5; --rose:#e58f92; --mustard:#f0bf4c; --teal:#4fa3a5; --sky:#a9d3e0; --mint:#bfe3cf; --lilac:#d3c3ea;
  --line:#3a2b33; --card:#fff; --gen-bg:#fff6d8; --cool-bg:#fbf3e4aa; --bin-bg:#fbf3e488; --cell-line:#e2c9a6;
  --sus-bg:#f6dede; --sus-solved:#ffd0cb; --linked-bg:#e2f4e8; --locked-bg:#e6d8c3; --scrim:#3a2b33bb; --cork-dot:#a9d3bd; --dot:#edd0be;
  --inv-bg:#3a2b33; --inv-fg:#fbf3e4; --sky1:#bfe3e6; --sky2:#dcefe9; --sky3:#fbf3e4; --on-accent:#3a2b33;
  --gold:#f3d98b; --steel:#c5ced8; --dim:#7d6672; --amber:#b9700c; --moss:#2f8a63; --blood:#d1382c;
  --sans:"Jost","Futura","Century Gothic","Avenir Next",system-ui,sans-serif;
  --serif:"Playfair Display","Didot","Georgia",serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}
html,body{margin:0;height:100%;color:var(--ink);font-family:var(--sans);overscroll-behavior:none}
body{display:flex;justify-content:center;background-color:var(--paper);
  background-image:radial-gradient(var(--dot) 2.2px,transparent 2.6px);background-size:24px 24px}
#app{width:100%;max-width:440px;min-height:100%;padding:env(safe-area-inset-top) 12px 18px;display:flex;flex-direction:column;gap:10px}
h1{font-family:var(--serif);font-weight:900;font-size:21px;letter-spacing:.1em;text-transform:uppercase;margin:12px 0 0;text-align:center}
h1 small{display:block;font-family:var(--sans);font-weight:600;font-size:11px;letter-spacing:.34em;color:var(--rose);margin-top:3px}
h1::after{content:"";display:block;height:7px;margin:10px auto 0;width:70%;border-top:2px solid var(--ink);border-bottom:2px solid var(--ink)}
.hud{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px;font-weight:600}
.pill{background:var(--cream);border:2px solid var(--line);border-radius:999px;padding:5px 13px;box-shadow:0 3px 0 var(--line)}
.tabs{display:flex;gap:8px}
.tabs button{flex:1}
button{font-family:inherit;font-weight:600;font-size:15px;color:var(--ink);background:var(--cream);border:2px solid var(--line);
  border-radius:12px;padding:9px 10px;box-shadow:0 4px 0 var(--line);cursor:pointer;transition:transform .08s,box-shadow .08s}
button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--line)}
button.on{background:var(--mustard);color:var(--on-accent)}
button.primary{background:var(--teal);color:#fff}
button.danger{background:var(--blood);color:#fff}
button:disabled{opacity:.4}
.dot{display:inline-block;min-width:17px;height:17px;line-height:15px;border-radius:9px;background:var(--blood);border:2px solid var(--line);font-size:10px;text-align:center;margin-left:5px;color:#fff}
.hidden{display:none!important}

/* ---------- Evidence table: a felt game tray with a brass rim ---------- */
.desk{background:var(--felt-day,var(--teal));border:3px solid var(--line);border-radius:18px;padding:10px;box-shadow:inset 0 0 0 4px var(--mustard),0 5px 0 var(--line)}
#grid{display:grid;grid-template-columns:repeat(6,1fr);gap:3px;touch-action:none;padding:2px}
.cell{aspect-ratio:1;background:var(--cream);border-radius:8px;display:flex;align-items:center;justify-content:center;position:relative;
  font-size:clamp(22px,8vw,34px);border:2px solid var(--cell-line)}
.cell.alt{background:var(--tile)}
.cell.sel{outline:3px solid var(--blood);outline-offset:-3px}
.item{width:88%;height:88%;display:flex;align-items:center;justify-content:center;border-radius:11px;position:relative;
  border:2px solid var(--line);box-shadow:0 3px 0 var(--line)}
.item .tier{position:absolute;right:-3px;bottom:-4px;width:15px;height:15px;line-height:12px;border-radius:50%;background:var(--inv-bg);color:var(--inv-fg);
  font-size:9px;font-weight:700;text-align:center;border:1.5px solid var(--cream)}
.item.pop{animation:pop .3s ease-out}
.chain-poison{background:var(--mint)}
.chain-words{background:var(--sky)}
.chain-fibre{background:var(--pink)}
.chain-seance{background:var(--lilac)}
.chain-gold{background:var(--gold)}
.chain-steel{background:var(--steel)}
@keyframes pop{0%{transform:scale(.2)}70%{transform:scale(1.18)}100%{transform:scale(1)}}
.item.gen{width:94%;height:94%;background:var(--gen-bg);border-width:3px;box-shadow:inset 0 0 0 3px var(--mustard),0 3px 0 var(--line)}
.item.gen.cool{filter:grayscale(.85) brightness(.95)}
.item.gen.lvmax{box-shadow:inset 0 0 0 3px var(--blood),0 3px 0 var(--line)}
.lv{position:absolute;left:-2px;top:-6px;font-size:9.5px;color:var(--inv-fg);background:var(--inv-bg);border-radius:8px;padding:1px 5px;font-weight:700}
.pips{position:absolute;left:0;right:0;bottom:2px;text-align:center;font-size:6px;letter-spacing:0;color:var(--amber);line-height:1}
.cdtxt{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--ink);font-weight:700;background:var(--cool-bg);border-radius:8px}
.geninfo{background:var(--cream);border:2px solid var(--line);border-radius:14px;padding:9px 12px;font-size:13px;line-height:1.45;box-shadow:0 3px 0 var(--line);min-height:64px}
.geninfo b{color:var(--amber)}
.geninfo .stat{color:var(--dim);font-size:12px;margin-top:2px;text-align:center}
.spawns{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:8px;font-size:12px;color:var(--dim)}
.spawns span{margin-right:2px}
.ct.sm{width:34px;height:34px;font-size:18px;border-radius:8px}
.chain{display:flex;align-items:center;justify-content:center;gap:2px;margin:9px 0 4px}
.arr{color:var(--dim);font-size:17px;font-weight:700;line-height:1}
.arr.bolt{color:var(--blood);font-size:14px}
.ct{position:relative;width:42px;height:42px;flex:none;border:2px solid var(--line);border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:22px;box-shadow:0 2px 0 var(--line)}
.ct.q{background:var(--tile);color:var(--dim);font-weight:700;font-size:20px}
.ct.gen{background:var(--gen-bg);box-shadow:inset 0 0 0 2px var(--mustard),0 2px 0 var(--line)}
.ct.clue{background:var(--card)}
.ct.cur{outline:3px solid var(--blood);outline-offset:1px}
.ct .n{position:absolute;right:-4px;bottom:-5px;min-width:15px;height:15px;line-height:12px;border-radius:8px;background:var(--inv-bg);color:var(--inv-fg);
  border:1.5px solid var(--cream);font-size:9px;font-weight:700;text-align:center;padding:0 2px}
.ct .lv{top:-7px;left:-3px}
.ghost{position:fixed;pointer-events:none;z-index:50;font-size:38px;transform:translate(-50%,-60%) rotate(-5deg);filter:drop-shadow(0 6px 0 #3a2b3340)}
.tray{display:flex;gap:6px}
.bin{flex:1;border:2px dashed var(--line);border-radius:12px;text-align:center;font-size:12px;padding:6px 2px;color:var(--dim);background:var(--bin-bg)}
.bin b{display:block;font-size:24px;font-weight:400}
.bin.over,.bin.sel{border-color:var(--blood);color:var(--blood);background:var(--card)}
.note{font-size:13px;color:var(--dim);text-align:center;margin:2px 0}

/* ---------- Case board: green baize with pinned index cards and red string ---------- */
.cork{position:relative;background:var(--mint);background-image:radial-gradient(var(--cork-dot) 2px,transparent 2.4px);background-size:16px 16px;
  border:3px solid var(--line);border-radius:18px;padding:14px 10px 10px;box-shadow:inset 0 0 0 4px var(--cream),0 5px 0 var(--line);min-height:420px}
#strings{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:5;overflow:visible}
.row{display:flex;gap:8px;justify-content:space-between}
.suspects{margin-bottom:64px}
.suspects.four{flex-wrap:wrap;row-gap:18px}
.suspects.four .card{flex:1 1 calc(50% - 8px)}
.card{position:relative;flex:1;background:var(--cream);color:var(--ink);border:2px solid var(--line);border-radius:10px;padding:10px 7px 7px;
  font-size:12px;line-height:1.3;box-shadow:0 3px 0 var(--line)}
.card::before{content:"";position:absolute;top:-8px;left:50%;width:13px;height:13px;margin-left:-6.5px;border-radius:50%;
  background:var(--blood);border:2px solid var(--line);z-index:6;box-shadow:inset -2px -2px 0 #0003}
.card h4{margin:0 0 3px;font-size:14px;font-weight:700;font-family:var(--serif)}
.card .face{font-size:34px;text-align:center;display:block}
.card.sus{cursor:pointer;background:var(--sus-bg)}
.card.sus.armed{outline:3px dashed var(--blood);outline-offset:2px}
.card.sus.shake{animation:shake .4s}
.card.sus.solved{background:var(--sus-solved)}
.clues{display:grid;grid-template-columns:1fr 1fr;gap:16px 10px}
.clue{cursor:pointer}
.clue.armed{outline:3px solid var(--mustard);outline-offset:2px}
.clue.linked{background:var(--linked-bg)}
.clue small{display:block;color:var(--dim);margin-top:4px}
.empty{grid-column:1/-1;text-align:center;color:var(--ink);font-size:14px;padding:30px 10px}
@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-6px)}60%{transform:translateX(6px)}}

/* ---------- Overlay / toast ---------- */
#overlay{position:fixed;inset:0;background:var(--scrim);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}
.modal{max-width:380px;width:100%;background:var(--cream);border:3px solid var(--line);border-radius:20px;padding:18px;
  box-shadow:0 6px 0 var(--line),inset 0 0 0 4px var(--pink);text-align:center;max-height:92vh;overflow:auto}
.modal h2{margin:0 0 8px;font-family:var(--serif);font-weight:900;letter-spacing:.04em}
.modal p{font-size:15px;line-height:1.45;margin:8px 0}
.modal .big{font-size:56px}
.modal .paper{background:var(--card);color:var(--ink);padding:10px 12px;border:2px solid var(--line);border-radius:10px;text-align:left;font-size:14px;line-height:1.4}
.spot{background:radial-gradient(circle at 50% 40%,#f0bf4c55 0,transparent 60%)}
#toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--inv-bg);color:var(--inv-fg);border-radius:14px;
  padding:9px 16px;z-index:120;font-size:14px;font-weight:500;max-width:90%;text-align:center;box-shadow:0 4px 0 #0004}

/* ---------- Menu: a symmetrical pastel hotel ---------- */
.screen{position:fixed;inset:0;z-index:90;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px;overflow:hidden;
  background:linear-gradient(var(--sky1) 0%,var(--sky2) 45%,var(--sky3) 100%)}
.cloud{position:absolute;width:74px;height:24px;background:#fff;border-radius:20px;opacity:.9;animation:drift 14s ease-in-out infinite alternate}
.cloud::before,.cloud::after{content:"";position:absolute;background:#fff;border-radius:50%}
.cloud::before{width:30px;height:30px;left:12px;top:-14px}.cloud::after{width:22px;height:22px;left:36px;top:-8px}
.c1{top:14%;left:8%}.c2{top:9%;right:10%;animation-delay:-5s}.c3{top:26%;left:58%;animation-delay:-9s}
@keyframes drift{to{translate:26px 0}}
.bunting{position:absolute;top:0;left:0;width:100%;height:auto}
.hotel{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,520px);height:auto;max-height:40%}
.logo{font-family:var(--serif);font-weight:900;text-transform:uppercase;text-align:center;line-height:.98;letter-spacing:.06em;margin:22px 0 0;z-index:2;
  font-size:clamp(38px,12.5vw,56px);text-shadow:3px 3px 0 var(--pink)}
.logo::after{display:none}
.logo span{display:block;letter-spacing:.14em;font-size:.72em}
.tag{color:var(--ink);font-size:13px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;text-align:center;margin:8px 0 14px;z-index:2;max-width:290px}
.menubtns{display:flex;flex-direction:column;gap:11px;width:min(260px,80%);z-index:2;margin-bottom:24%}
.menubtns button{font-size:16px;padding:11px 12px;letter-spacing:.04em}
.ver{position:absolute;bottom:8px;font-size:10px;letter-spacing:.2em;color:var(--ink);opacity:.5;z-index:2}
.scene .portrait{font-size:84px;line-height:1;animation:bob 1.8s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-4px)}}
.scene .who{letter-spacing:.2em;font-size:11px;color:var(--rose);margin:4px 0 6px;text-transform:uppercase;font-weight:700}
.scene p{min-height:88px;font-size:17px}
.dots{margin:6px 0 10px;font-size:10px;letter-spacing:3px;color:var(--dim)}
.rules{text-align:left;font-size:14px;line-height:1.45;padding-left:20px;margin:8px 0}
.rules li{margin-bottom:6px}
.casecard{background:var(--card);border:2px solid var(--line);border-radius:14px;padding:10px 12px;margin:8px 0;text-align:left;box-shadow:0 3px 0 var(--line);cursor:pointer}
.casecard.locked{opacity:.5;cursor:default}
.casecard b{display:block;font-size:16px;font-family:var(--serif)}.casecard small{color:var(--dim)}
#coach{background:var(--mustard);color:#3a2b33;border:2px solid var(--line);border-radius:14px;padding:9px 12px;font-size:14px;font-weight:500;line-height:1.35;box-shadow:0 3px 0 var(--line);margin-bottom:8px}
#coach a{display:inline-block;margin-left:6px;font-size:12px;text-decoration:underline;cursor:pointer;opacity:.7}
.item.gen.glow{animation:glow 1.1s ease-in-out infinite}
@keyframes glow{50%{box-shadow:inset 0 0 0 3px var(--blood),0 0 0 4px var(--mustard),0 3px 0 var(--line)}}
#scenes{margin-bottom:8px;gap:6px}
#scenes button{font-size:12px;padding:7px 4px;line-height:1.2}
#scenes button.locked{opacity:.55;background:var(--locked-bg)}
.bubble{background:var(--card);color:var(--ink);border:2px solid var(--line);border-radius:16px;padding:11px 13px;font-size:16px;text-align:left;margin:8px 0;box-shadow:0 3px 0 var(--line)}
.evi{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}
.evi button{font-size:13px;padding:8px 6px;line-height:1.2}
.evi button b{display:block;font-size:26px;font-weight:400}
.shake{animation:shake .4s}
.portrait svg{height:132px;width:auto;display:block;margin:0 auto;filter:drop-shadow(0 5px 0 #3a2b3330)}
.card .face svg{height:74px;width:auto;display:block;margin:0 auto 2px}
.fx{position:fixed;pointer-events:none;z-index:250;font-size:18px;animation:fx .75s ease-out forwards}
@keyframes fx{to{transform:translate(var(--dx),var(--dy)) rotate(var(--r)) scale(.4);opacity:0}}

/* ---------- hotel colours as classes so the night variant can relight it ---------- */
.hotel .h-wall{fill:#f2b5b5}.hotel .h-tower{fill:#f6c6c6}.hotel .h-trim{fill:#fbf3e4}.hotel .h-roof{fill:#4fa3a5}
.hotel .h-win{fill:#f0bf4c}.hotel .h-glass{fill:#a9d3e0}.hotel .h-ground{fill:#bfe3cf}.hotel .h-awn{fill:#e58f92}
.moon,.star{display:none}
.themebtn{position:absolute;top:34px;right:14px;z-index:4;padding:6px 10px;font-size:18px;line-height:1}

/* =====================  NIGHT VARIANT: the same dollhouse, after dark  ===================== */
body.night{
  --ink:#f1e8d8; --line:#0b0714; --cream:#2b2246; --paper:#171127; --tile:#241c3b; --dot:#221a38;
  --pink:#c9708b; --rose:#f19bb0; --mustard:#f0bf4c; --teal:#2d7f88; --sky:#3f78ab; --mint:#2f7566; --lilac:#7b63b8;
  --gold:#9a7a2a; --steel:#5b6678; --dim:#aa9ec6; --amber:#f0bf4c; --moss:#6fd3a2; --blood:#e8483b;
  --card:#352b55; --gen-bg:#4b3d24; --cool-bg:#171127cc; --bin-bg:#2b224688; --cell-line:#3d3262;
  --sus-bg:#4b2f4a; --sus-solved:#7a3347; --linked-bg:#27493f; --locked-bg:#1f1833; --scrim:#07040fcc; --cork-dot:#2a6358;
  --inv-bg:#f1e8d8; --inv-fg:#2b2246; --sky1:#120c2b; --sky2:#271d52; --sky3:#4a3478; --on-accent:#3a2b33;
}
body.night .cloud{display:none}
body.night .moon{display:block;position:absolute;top:13%;right:13%;width:64px;height:64px;border-radius:50%;background:#f6ecd0;
  box-shadow:0 0 36px #f6ecd066,inset -10px -5px 0 #dccfa6}
body.night .star{display:block;position:absolute;color:#f6ecd0;font-size:12px;animation:twinkle 3s ease-in-out infinite}
.s1{top:12%;left:10%}.s2{top:20%;left:36%;animation-delay:-1s!important;font-size:9px!important}.s3{top:9%;left:62%;animation-delay:-2s!important}.s4{top:27%;left:80%;font-size:8px!important}.s5{top:30%;left:16%;font-size:8px!important}
@keyframes twinkle{50%{opacity:.35}}
body.night .hotel .h-wall{fill:#8a4f72}body.night .hotel .h-tower{fill:#9a5a7f}body.night .hotel .h-trim{fill:#cdb7c9}
body.night .hotel .h-roof{fill:#2a6a78}body.night .hotel .h-win{fill:#ffd86b}body.night .hotel .h-glass{fill:#3a4a78}
body.night .hotel .h-ground{fill:#2b2246}body.night .hotel .h-awn{fill:#c9708b}
body.night .screen [stroke="#3a2b33"]{stroke:#0b0714}
body.night .hotel .h-win{filter:drop-shadow(0 0 4px #ffd86b)}
body.night .portrait svg,body.night .card .face svg{filter:drop-shadow(0 0 1.2px #f1e8d8) drop-shadow(0 4px 0 #0007)}
body.night .logo{text-shadow:3px 3px 0 #c9708b}
body.night .item,body.night .item.gen{box-shadow:0 3px 0 var(--line)}
body.night #toast{box-shadow:0 4px 0 #0008}
.contra,.clue small.contra{color:var(--blood);font-weight:700}
body.reduce .fx{display:none}
body.reduce *{animation:none!important;transition:none!important}
.menuline{display:flex;gap:6px;align-items:center}

/* ---------- vector icons ---------- */
.ic{width:100%;height:100%;display:block;overflow:visible}
.ic *{stroke:var(--line);stroke-width:2.3;stroke-linejoin:round;stroke-linecap:round}
.ic .ns{stroke:none}
.item .ic{width:80%;height:80%}
.item.gen .ic{width:92%;height:92%}
.ct .ic{width:80%;height:80%}
.ct.gen .ic{width:94%;height:94%}
.ct.sm .ic{width:82%;height:82%}
.big .ic{width:76px;height:76px;margin:0 auto}
.card .face .ic{width:46px;height:46px;margin:0 auto 2px}
.evi button b .ic{width:36px;height:36px;margin:0 auto}
.ghost .ic{width:54px;height:54px}
.ic.inl{display:inline-block;width:1.35em;height:1.35em;vertical-align:-.3em;margin-right:2px}
.emo{font-size:.8em}
.raven{height:132px;width:auto;display:block;margin:0 auto}
.rv-eye{transform-box:fill-box;transform-origin:center;animation:blink 4.2s infinite}
@keyframes blink{0%,94%,100%{transform:scaleY(1)}97%{transform:scaleY(.1)}}

body.night .desk{background:var(--felt-night,var(--teal))}
.room{border:2.5px solid var(--line);border-radius:12px;overflow:hidden;margin:0 2px 8px;background:var(--cream);line-height:0}
.room svg{width:100%;height:auto;display:block}
.room svg *{stroke:var(--line);stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}
.room svg .ns{stroke:none}

/* ---------- tools, requests, daily ---------- */
.tray{align-items:stretch}
.tray .bin{flex:1.1}
.tool{flex:1;position:relative;padding:5px 4px 6px;font-size:11px;line-height:1.1;display:flex;flex-direction:column;align-items:center;gap:1px}
.tool .ti{display:block;width:30px;height:30px}
.tool .ti svg{width:100%;height:100%}
.tool .cnt{position:absolute;top:-6px;right:-4px;min-width:19px;height:19px;line-height:15px;border-radius:10px;background:var(--inv-bg);color:var(--inv-fg);border:2px solid var(--cream);font-size:10px;font-weight:700;padding:0 3px}
.cell.hint{outline:3px dashed var(--moss);outline-offset:-3px;animation:hintp .9s ease-in-out infinite}
@keyframes hintp{50%{outline-color:var(--blood)}}
.req{display:flex;align-items:center;gap:8px;background:var(--cream);border:2px solid var(--line);border-radius:14px;padding:6px 10px;margin-bottom:8px;box-shadow:0 3px 0 var(--line);cursor:pointer}
.rq-face svg{height:46px;width:auto;display:block}
.rq-main{flex:1;min-width:0}
.rq-t{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--rose);font-weight:700}
.rq-tiles{display:flex;align-items:center;gap:8px;margin-top:3px}
.rq-tiles .ct{width:34px;height:34px;font-size:16px;border-radius:8px}
.rq-x{font-weight:700;font-size:15px}
.rq-p{color:var(--amber);font-size:11px;letter-spacing:1px}
.rq-rw{font-size:12px;font-weight:700;text-align:center;line-height:1.1;color:var(--amber)}
.rw{display:flex;align-items:center;gap:2px;font-size:14px}
.rw i{display:inline-block;width:22px;height:22px}
.daily{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:10px 0;text-align:center}
.dcell{min-width:0;background:var(--card);border:2px solid var(--line);border-radius:10px;padding:5px 2px;font-size:10px;line-height:1.2}
.dcell b{display:block;font-size:11px;color:var(--rose)}
.dcell.now{outline:3px solid var(--mustard);outline-offset:1px}
.dcell.got{opacity:.5}
#mDaily .dot{margin-left:8px}
