:root{color-scheme:dark;--cream:#eee5cf;--muted:#b9bea9;--leaf:#c6d497;--dark:#15221c}*{box-sizing:border-box}body{margin:0;background:#1e3029;color:var(--cream);font:14px Arial,sans-serif;overflow:hidden}button,input,a{font:inherit}button,a{color:inherit}button{cursor:pointer;border:1px solid #c6d49740;background:#c6d4970b;padding:14px 17px;border-radius:4px;transition:background .2s,transform .2s}button:hover{background:#c6d49723}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #dbe7aa;outline-offset:3px}button:disabled{opacity:.45;cursor:wait}button span{float:right;font-size:11px}a{text-decoration:none}small,.eyebrow,label,nav,footer{font-size:10px;letter-spacing:2px}p{line-height:1.65}h1,h2,h3{font-family:Georgia,serif;font-weight:normal}h2{font-size:30px;margin:10px 0 18px}#world,.film{position:fixed;inset:0;width:100%;height:100%}.film{pointer-events:none;background:linear-gradient(90deg,#0a211dbb,#0c211c30 65%,#0b1a1388),linear-gradient(0deg,#091b1cc0,transparent 30%);z-index:1}#home{position:relative;z-index:2;height:100dvh;overflow:auto;padding:30px 4vw;display:flex;flex-direction:column}nav{display:flex;justify-content:space-between;gap:20px;color:#d3d7be}nav a:hover{color:white}.home-content{flex:1;display:flex;align-items:center;justify-content:space-between;gap:5vw;padding:38px 2vw}.title{max-width:650px}.eyebrow{color:#d1dba9}h1{font-size:clamp(82px,9vw,155px);line-height:.86;letter-spacing:-7px;margin:30px 0 35px}h1 em{color:#e8dab1;font-weight:normal}.intro{font-family:Georgia,serif;font-size:23px;line-height:1.5}.story{max-width:420px;color:var(--muted);font-size:14px}.chapter-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:26px}.chapter-pills span{border:1px solid #d7dfac30;border-radius:30px;padding:9px 12px;font-size:11px;color:#d4dbc1}.expedition{width:410px;flex-shrink:0;padding:30px;background:#18281fd9;border:1px solid #c1c89b40;border-radius:8px;box-shadow:0 25px 90px #0004;backdrop-filter:blur(18px)}.expedition>small{color:#d5dfac}.expedition label{display:block;margin:18px 0 9px;letter-spacing:1px;text-transform:uppercase;color:#c2c9b2}input{width:100%;padding:12px;background:#07170f66;border:1px solid #d4ddb338;border-radius:4px;color:var(--cream)}#difficulty{display:flex;margin-bottom:20px;gap:6px}#difficulty button{flex:1;font:12px Georgia;padding:11px 3px}#difficulty small{display:block;font:9px Arial;letter-spacing:0;margin-top:7px;color:#aebaa2}#difficulty .selected{border-color:#d0daa1;background:#d0daa125}.expedition>button{width:100%;margin-bottom:9px;text-align:left}.primary{background:#c8d49b;color:#253625;border-color:#c8d49b;font-weight:bold}.primary:hover{background:#e0e7b8}.join{display:flex;gap:8px}.join input{flex:1;min-width:0;letter-spacing:2px;font-size:11px}.subtle{border:0;font-size:11px;color:#d5d9ac}#connection{color:#b6c09f;font-size:11px;margin:12px 0}details{border-top:1px solid #d6deac26;padding-top:12px;font-size:11px;color:#bac3ad}summary{cursor:pointer}details p{font-size:11px;line-height:1.8}footer{display:flex;justify-content:space-between;align-items:center;font-size:9px;color:#b4bda7;gap:20px}footer button{font-size:10px;letter-spacing:1px;border:0}.hidden{display:none!important}#hud{position:fixed;inset:0;pointer-events:none;z-index:3;text-shadow:0 2px 8px #000;font-family:"DM Sans","Avenir Next",Arial,sans-serif}.objective{position:absolute;top:26px;left:30px;max-width:380px;background:linear-gradient(90deg,#0f1d16d9,#0f1d1600);padding:16px 30px 16px 18px;border-left:2px solid #d2dca2}.objective small{color:#d0dea3;letter-spacing:2.5px}.objective h2{font-size:23px;margin:7px 0 6px;font-family:Georgia,serif}.objective p{font-size:12px;margin:0 0 8px;color:#cfd8c1}#objectives{font-size:11.5px;line-height:1.75;color:#e6dfb6}#topline{position:absolute;top:22px;left:50%;transform:translateX(-50%);display:flex;gap:10px;align-items:center}#topline span{font-size:10px;letter-spacing:2.2px;background:#0f1d16b8;border:1px solid #d6dfac33;border-radius:30px;padding:8px 15px;color:#e8e2c0}#topline span:empty{display:none}#next-wave{color:#e8c98a}#boss{position:absolute;top:66px;left:50%;transform:translateX(-50%);width:min(520px,70vw);text-align:center}#boss small{letter-spacing:2.5px;color:#e6c29a}.bossbar{height:6px;background:#1c2a20;border:1px solid #c9a06a55;margin-top:6px;border-radius:3px;overflow:hidden}.bossbar i{display:block;height:100%;background:linear-gradient(90deg,#c9764f,#e8b06a);transition:width .25s}#feed{position:absolute;top:110px;left:50%;transform:translateX(-50%);text-align:center;font-size:11px;color:#cbd4b6}#feed p{margin:3px 0;opacity:.85}#feed b{color:#eee7c3}#feed i{color:#f0d48a;font-style:normal;letter-spacing:1px;font-size:9px}#banner{position:absolute;top:30%;width:100%;text-align:center;opacity:0;transform:translateY(-10px) scale(.96);transition:opacity .35s,transform .35s;pointer-events:none}#banner.show{opacity:1;transform:none}#banner b{display:block;font:normal clamp(34px,5vw,58px) Georgia,serif;letter-spacing:6px;color:#f0e6c2;text-shadow:0 4px 30px #000,0 0 40px #c9d47a55}#banner small{color:#dfc99a;letter-spacing:4px}#squad{position:absolute;top:26px;right:26px;text-align:right;font-size:11.5px;display:flex;flex-direction:column;gap:3px}#squad span{background:#0f1d16a8;padding:4px 10px;border-radius:4px;color:#dfe5cd}#squad b{color:#cfe09b;margin-left:8px;font-variant-numeric:tabular-nums}#squad .down b{color:#efb0a0}#squad .lost{opacity:.5}#minimap{position:absolute;right:25px;top:140px;width:180px;height:180px;opacity:.88;border:1px solid #c4cc9b50;border-radius:50%;box-shadow:0 8px 30px #0006}#objective-marker{position:absolute;left:0;top:0;opacity:0;transition:opacity .25s;text-align:center;will-change:transform}#objective-marker b{display:block;font:22px Georgia;color:#ffe6a8;text-shadow:0 0 14px #ffd98a99,0 2px 8px #000;animation:bob 1.8s ease-in-out infinite}#objective-marker span{font-size:9px;letter-spacing:1.5px;background:#0f1d16c9;border:1px solid #ffe6a844;padding:4px 9px;border-radius:20px;color:#f1e8c8;white-space:nowrap}@keyframes bob{50%{transform:translateY(-5px)}}#crosshair{position:absolute;left:50%;top:50%;width:26px;height:26px;transform:translate(-50%,-50%);transition:width .15s,height .15s}#crosshair i{position:absolute;background:#fffdeb;box-shadow:0 0 4px #000}#crosshair i:nth-child(1){left:50%;top:0;width:2px;height:7px;margin-left:-1px}#crosshair i:nth-child(2){left:50%;bottom:0;width:2px;height:7px;margin-left:-1px}#crosshair i:nth-child(3){top:50%;left:0;height:2px;width:7px;margin-top:-1px}#crosshair i:nth-child(4){top:50%;right:0;height:2px;width:7px;margin-top:-1px}#crosshair.wide{width:44px;height:44px}#hitmark{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.6);font:34px Arial;color:#e6dda3;opacity:0;transition:opacity .1s,transform .1s}#hitmark.show{opacity:1;transform:translate(-50%,-50%) scale(1)}#hitmark.head{color:#ffd36b}#prompt{position:absolute;top:60%;width:100%;text-align:center;font-size:12px;letter-spacing:1.5px;color:#f3ecd2}#prompt:not(:empty)::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#d2df9c;margin-right:9px;vertical-align:middle}#channel{position:absolute;top:64.5%;left:44%;width:12%;height:4px;background:#17261a99;border-radius:2px;overflow:hidden}#channel i{height:100%;display:block;background:#d0df9e;width:0}.vitals{position:absolute;left:30px;bottom:30px;width:300px;background:linear-gradient(90deg,#0f1d16c9,#0f1d1600);padding:14px 18px;border-radius:6px}.hp-row{display:flex;align-items:center;gap:14px}.hp-row b{font:44px Georgia;color:#f3efd6;min-width:74px;font-variant-numeric:tabular-nums}.bars{flex:1;display:flex;flex-direction:column;gap:5px}.healthbar{height:8px;background:#1c2a22;border-radius:4px;overflow:hidden}.healthbar i{display:block;height:100%;background:linear-gradient(90deg,#9fbf6a,#d2df9c);transition:width .2s}.armorbar{height:4px;background:#1c2a22;border-radius:2px;overflow:hidden}.armorbar i{display:block;height:100%;background:#9fc4d3;transition:width .2s}.status-row{display:flex;justify-content:space-between;font-size:9.5px;letter-spacing:1.8px;color:#c2cbb0;margin-top:9px}#infection.hot{color:#f0b087;animation:pulse 1s infinite}@keyframes pulse{50%{opacity:.45}}.infectionbar{height:3px;background:#1c2a22;margin-top:5px;border-radius:2px;overflow:hidden}.infectionbar i{display:block;height:100%;background:linear-gradient(90deg,#b7c97a,#d99a6a);transition:width .3s}.equipment{position:absolute;right:30px;bottom:30px;text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:8px}#slots{display:flex;gap:5px}#slots span{font-size:9px;letter-spacing:1.5px;padding:5px 9px 5px 6px;border:1px solid #d6dfac33;border-radius:4px;background:#0f1d16a8;color:#b8c2aa;display:flex;gap:6px;align-items:center}#slots span.on{border-color:#d2dca2;color:#f3ecd2;background:#1d3324d6}#slots i{font-style:normal;font-size:8px;width:14px;height:14px;display:grid;place-items:center;border:1px solid #d6dfac55;border-radius:3px}#ammo{display:flex;align-items:baseline;gap:8px;background:linear-gradient(270deg,#0f1d16c9,#0f1d1600);padding:6px 14px;border-radius:6px}#ammo b{font:46px Georgia;color:#f3efd6;font-variant-numeric:tabular-nums}#ammo span{font-size:14px;color:#b8c1a7}#ammo em{font-style:normal;font-size:9px;letter-spacing:2px;color:#d0dea3;margin-left:8px}#ammo.low b{color:#f0b087}#items{display:flex;gap:5px}#items span{font-size:9px;letter-spacing:1px;padding:5px 8px 5px 5px;border-radius:4px;background:#0f1d16a8;border:1px solid #d6dfac22;color:#d8dcc2;display:flex;gap:6px;align-items:center}#items span.empty{opacity:.4}#items i{font-style:normal;font-size:8px;width:14px;height:14px;display:grid;place-items:center;border:1px solid #d6dfac55;border-radius:3px}#items b{color:#f0e6b8}.equipment small{letter-spacing:1.5px;color:#aab59b;font-size:9px}#damage{position:absolute;inset:0;box-shadow:inset 0 0 180px 50px #bc483a;opacity:0}#lowhp{position:absolute;inset:0;box-shadow:inset 0 0 220px 90px #5a1414;opacity:0;pointer-events:none}#down{position:absolute;top:40%;width:100%;text-align:center;background:#18231bbd;padding:20px;font:21px Georgia}#toast{position:fixed;z-index:10;left:50%;top:24px;transform:translateX(-50%);max-width:650px;text-align:center;background:#182b20ee;border:1px solid #d5dfac70;border-radius:5px;padding:16px 24px;opacity:0;pointer-events:none;transition:opacity .2s;line-height:1.6}#overlay{position:fixed;z-index:8;inset:0;display:flex;align-items:center;justify-content:center;background:#0a1a14b8;backdrop-filter:blur(9px);padding:30px}#panel{width:760px;max-width:100%;max-height:90vh;overflow:auto;padding:35px;background:#1b2b22;border:1px solid #c7d2a64d;border-radius:8px;box-shadow:0 30px 100px #0007}#panel>small{color:#c7d3a3}#panel>p{color:#bdc7b0}#panel .actions{display:flex;gap:10px;margin-top:24px}.recipe-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.recipe{padding:17px;border:1px solid #c9d6a32b;border-radius:4px}.recipe h3{font-size:20px;margin:0}.recipe p{font-size:11px;color:#bec9b1;min-height:34px}.recipe small{display:block;letter-spacing:.5px;color:#d8d0a1;margin-bottom:12px}.recipe button{width:100%;font-size:11px;padding:9px}.crew-row,.room-row{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #c9d6a32b;padding:12px 0}.room-row button{padding:9px}#map-overlay{position:fixed;z-index:9;inset:4vh 10vw;background:#19291ff5;border:1px solid #bfcca179;border-radius:8px;display:flex;flex-direction:column;padding:24px}#map-overlay header{display:flex;justify-content:space-between;align-items:center}#map-overlay h2{margin:5px 0;font-size:26px}#map-overlay canvas{min-height:0;flex:1;object-fit:contain;width:100%}#map-overlay p{font-size:11px;text-align:center;color:#c4cfaf}.result-coins{font:48px Georgia;color:#d5dea6}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:12px;border-bottom:1px solid #c9d6a329;font-size:12px}th{color:#b5c29f;font-weight:normal}@media(max-width:900px){#home{padding:20px}.home-content{flex-direction:column;align-items:flex-start;padding:30px 0;gap:25px}.title h1{font-size:90px}.expedition{width:100%}.story,.chapter-pills{display:none}footer{flex-wrap:wrap}.recipe-grid{grid-template-columns:1fr}.objective{max-width:290px;left:10px;top:10px}#squad{right:10px}#minimap{width:120px;height:120px;top:110px}.vitals{width:220px}#slots,#items{flex-wrap:wrap;justify-content:flex-end}#map-overlay{inset:2vh 3vw}.vitals{left:15px;bottom:15px}.equipment{right:15px;bottom:15px}nav{font-size:9px;letter-spacing:1px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}
#team-chat{position:absolute;left:30px;bottom:155px;max-width:330px;font-size:11px;color:#d4dfbf}#team-chat p{margin:4px 0;background:#15251bac;padding:5px 9px;border-radius:3px}#team-chat b{color:#dee9b4;margin-right:8px}
#atlas-objectives{display:flex;gap:12px;flex-wrap:wrap;margin:0 0 12px}#atlas-objectives span{font-size:11px;background:#273f31;padding:9px 13px;border:1px solid #b69d6550;border-radius:6px;color:#e6d3a3}#atlas-objectives b{display:inline-grid;place-items:center;border:1px solid #cfb576;border-radius:50%;width:22px;height:22px;margin-right:7px}

/* residents & jobs */
.npc-say{font-style:italic;font-size:15px;line-height:1.55;margin:0 0 12px;color:#efe6cf}
.npc-got{font-size:12px;letter-spacing:1px;text-transform:uppercase;color:#f3d27a;margin:0 0 12px}
.quest-card{border:1px solid #c9b47a55;border-radius:12px;padding:14px 16px;margin:6px 0 14px;background:#ffffff08;display:flex;flex-direction:column;gap:6px}
.quest-card small{font-size:9px;letter-spacing:2px;color:#bfd4b0}.quest-card b{font-size:15px}.quest-card span{font-size:12px;color:#d9d1b8}
#slots span.special{border-color:#f3a86b;color:#ffd9b0}

/* in-world dialogue: a letterboxed band, typewriter text, the rest of the world holds its breath */
#dialogue{position:absolute;left:0;right:0;bottom:0;padding:26px 8vw 34px;background:linear-gradient(180deg,rgba(6,9,8,0) 0%,rgba(6,9,8,.82) 22%,rgba(6,9,8,.96) 100%);pointer-events:none;animation:dlg .35s ease-out;min-height:150px}
#dialogue::before{content:'';position:absolute;left:8vw;right:8vw;top:18px;height:1px;background:linear-gradient(90deg,transparent,#8a9a7a88,transparent)}
#dialogue.hidden{display:none}
#dlg-name{display:block;font:11px/1 'Courier New',Courier,monospace;letter-spacing:4px;color:#9fb08e;margin:8px 0 14px;text-transform:uppercase}
#dlg-name::before{content:'— '}
#dlg-text{margin:0;font:18px/1.65 'Courier New',Courier,monospace;color:#e6e0cc;min-height:60px;max-width:900px;text-shadow:0 0 12px #9fb08e33,0 1px 0 #000}
#dlg-text::after{content:'▌';color:#9fb08e;animation:caret 1s steps(2) infinite;margin-left:2px}
#dlg-text.got{color:#c9dcae}#dlg-text.job{color:#e8d7a8}
#dlg-hint{margin-top:14px;font:10px/1 'Courier New',Courier,monospace;letter-spacing:3px;color:#7f8f72;text-transform:uppercase}
#dlg-hint b{display:inline-block;padding:2px 7px;border:1px solid #7f8f72;border-radius:2px;margin-right:6px;color:#d8d2bd;font-weight:400}
#hud:has(#dialogue:not(.hidden)) .objective,#hud:has(#dialogue:not(.hidden)) #topline,#hud:has(#dialogue:not(.hidden)) #squad,#hud:has(#dialogue:not(.hidden)) #minimap,#hud:has(#dialogue:not(.hidden)) .equipment,#hud:has(#dialogue:not(.hidden)) .vitals,#hud:has(#dialogue:not(.hidden)) #feed,#hud:has(#dialogue:not(.hidden)) #objective-marker{opacity:.18;transition:opacity .4s}
#hud:has(#dialogue:not(.hidden))::after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 40%,rgba(4,6,5,.55) 100%);animation:dlg .5s ease-out}
@keyframes caret{50%{opacity:0}}
@keyframes dlg{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media(max-width:700px){#dialogue{padding:18px 5vw 22px;min-height:110px}#dlg-text{font-size:12px;min-height:40px}#dlg-name{font-size:9px;letter-spacing:3px}}
/* while someone is talking, the lower HUD steps out of the frame */
#hud:has(#dialogue:not(.hidden)) .equipment,#hud:has(#dialogue:not(.hidden)) .vitals,#hud:has(#dialogue:not(.hidden)) #objective-marker,#hud:has(#dialogue:not(.hidden)) #prompt,#hud:has(#dialogue:not(.hidden)) #channel,#hud:has(#dialogue:not(.hidden)) #crosshair{opacity:0!important}

#slots span.kit{border-color:#c9b47a88;color:#efe6cf}#slots span.kit b{margin-left:4px;color:#f3d27a}
#items .hint{font-size:10px;letter-spacing:1.5px;color:#f3d27a;text-transform:uppercase}
.pill{display:inline-block;border:1px solid #c9b47a66;border-radius:99px;padding:3px 10px;font-size:11px;margin:2px 4px 2px 0}
.recipe h3 small{font-size:11px;color:#f3d27a;margin-left:6px}
/* narrow windows: the horde readout would sit on the objective card, so it tucks under it on the left */
@media(max-width:900px){#topline{top:auto;bottom:auto;left:16px;transform:none;position:absolute;margin-top:0;top:calc(50px + var(--obj-h, 270px));flex-direction:column;align-items:flex-start;gap:6px}}
