*{margin:0;padding:0;box-sizing:border-box}
html,body{width:100%;height:100%;overflow:hidden;background:#000;font-family:'Courier New',monospace;color:#aaa}

/* ── TITLE / COVER ── */
#title{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:clamp(24px,5vw,72px);width:100%;height:100vh;height:100svh;overflow-y:auto;padding:24px;background:radial-gradient(ellipse at 25% 45%,#193322 0%,#0a1510 40%,#050907 80%);color:#edf0e4}
.t-cover{display:block;flex-shrink:0;width:auto;height:auto;max-width:48vw;max-height:calc(100vh - 48px);max-height:calc(100svh - 48px);object-fit:contain;box-shadow:0 14px 64px #000a;border:1px solid #797652}
.t-panel{width:360px;max-width:100%;flex-shrink:1;padding:16px 0}
.t-by{color:#b8c3ad;font-size:11px;letter-spacing:3px;line-height:1.6}
.t-heading{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin:18px 0 8px}
.t-logo{color:#e5d8a7;font-family:Georgia,'Times New Roman',serif;font-size:clamp(32px,3.5vw,50px);font-weight:normal;letter-spacing:3px;line-height:1.1}
.t-version{color:#a9b99e;font-size:12px;white-space:nowrap}
.t-sub{color:#d1d8c5;font-family:Georgia,'Times New Roman',serif;font-size:18px;line-height:1.4}
.t-quote{color:#d1d8c5;font-family:Georgia,'Times New Roman',serif;font-size:19px;line-height:1.5;font-style:italic;margin:30px 0 24px}
.t-menu{display:flex;flex-direction:column;gap:12px}
.t-btn{display:block;width:100%;min-height:48px;background:#101f17;border:1px solid #728762;border-radius:3px;color:#eff3df;font-family:'Courier New',monospace;font-size:13px;line-height:1.4;padding:14px 16px;cursor:pointer;text-align:center;letter-spacing:1px}
.t-btn-primary{background:#d2c18d;border-color:#e9d8a0;color:#142116;font-weight:bold}
.t-btn:hover{background:#253b2b;border-color:#c9d7ac}
.t-btn-primary:hover{background:#ebdba9;border-color:#f4e7c6}
.t-btn:focus-visible{outline:3px solid #f5e3a4;outline-offset:4px}
.t-credit{margin-top:24px;color:#a2b09a;font-size:11px;line-height:1.8}
@media(max-width:700px){
 #title{flex-direction:column;justify-content:flex-start;gap:20px;padding:16px}
 .t-cover{width:auto;max-width:100%;max-height:62vh;max-height:62svh;flex-shrink:0}
 .t-panel{width:420px;flex-shrink:0;padding:0 0 16px}
 .t-heading{margin-top:10px}.t-logo{font-size:30px}.t-by{font-size:10px}
 .t-sub{font-size:16px}.t-quote{font-size:16px;margin:16px 0}.t-credit{margin-top:16px}
}
@media(min-width:701px) and (max-height:540px){
 #title{padding:16px;gap:28px}.t-cover{max-height:calc(100vh - 32px);max-height:calc(100svh - 32px)}
 .t-panel{padding:0}.t-heading{margin-top:8px}.t-logo{font-size:32px}.t-sub{font-size:16px}
 .t-quote{margin:12px 0;font-size:16px}.t-credit{margin-top:12px}.t-menu{gap:8px}
}

/* ── CHAR CREATE ── */
#charscreen{display:none;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100vh;background:#000;gap:7px;padding:20px}
.cs-title{color:#0f0;font-size:clamp(14px,2vw,20px);letter-spacing:3px;margin-bottom:6px}
.cs-label{color:#0af;font-size:clamp(10px,1.1vw,13px);width:min(300px,80vw);text-align:left;margin-top:4px}
.cs-opts{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.cs-opt{background:#000;border:1px solid #333;color:#0a0;font-family:'Courier New',monospace;font-size:clamp(10px,1vw,12px);padding:4px 12px;cursor:pointer}
.cs-opt:hover,.cs-opt.sel{background:#001400;border-color:#0f0;color:#0f0}
.cs-stat{display:flex;gap:14px;color:#ff0;font-size:clamp(10px,1.1vw,13px);margin-top:4px}
.cs-go{background:#000;border:1px solid #0f0;color:#0f0;font-family:'Courier New',monospace;font-size:clamp(12px,1.3vw,15px);padding:9px 36px;cursor:pointer;margin-top:10px;letter-spacing:2px}
.cs-go:hover{background:#001400}

/* ── GAME LAYOUT: full-screen flex row ── */
#game{display:none;width:100vw;height:100vh;flex-direction:row}

/* Left: canvas fills all space */
#viewport{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden;background:#000;border-right:2px solid #33f}
canvas#vc{display:block;width:100%;height:100%;image-rendering:pixelated}

/* Right panel: status + log, fixed width */
#rpanel{width:clamp(140px,16vw,200px);flex-shrink:0;display:flex;flex-direction:column;background:#000;border-left:2px solid #33f}
#status{flex-shrink:0;padding:8px 10px;border-bottom:1px solid #222;display:flex;flex-direction:column;gap:2px}
.st-row{display:flex;justify-content:space-between;font-size:clamp(9px,.9vw,12px)}
.st-lbl{color:#0af}
.st-val{color:#ff0;font-weight:bold}
.st-sep{border-top:1px solid #1a1a1a;margin:3px 0}
.st-title{color:#0f0;font-size:clamp(9px,.9vw,11px);letter-spacing:1px;margin-bottom:2px;text-align:center}
.st-keys{color:#8a97b0;font-size:clamp(7px,.75vw,10px);line-height:1.6;margin-top:4px;border-top:1px solid #2a3348;padding-top:4px}
#textbox{flex:1;overflow-y:auto;padding:6px 8px;font-size:clamp(9px,.9vw,12px);line-height:1.55}
#textbox .cmd{color:#ff0}
#textbox .err{color:#f44}
#textbox .sys{color:#0af}
#textbox .loot{color:#0f0}

/* ── POPUP MODAL ── */
#modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:100;justify-content:center;align-items:center}
#modal{background:#0a0c10;border:3px solid #55f;border-radius:4px;min-width:min(360px,88vw);max-width:min(460px,92vw);max-height:86vh;overflow-y:auto;padding:18px 20px;box-shadow:0 0 40px rgba(80,80,255,.35);font-family:'Courier New',monospace}
#modal.combat{border-color:#c33;box-shadow:0 0 40px rgba(200,50,50,.4)}
.modal-title{color:#8ac0ff;font-size:clamp(14px,1.8vw,20px);letter-spacing:2px;text-align:center;margin-bottom:6px}
#modal.combat .modal-title{color:#ff6a6a}
.modal-sub{color:#556;font-size:clamp(10px,1.1vw,13px);text-align:center;margin-bottom:12px}
.modal-body{color:#9ab;font-size:clamp(11px,1.2vw,14px);line-height:1.6;margin-bottom:12px}
.modal-canvas-wrap{display:flex;justify-content:center;margin:8px 0}
.shop-item{display:flex;justify-content:space-between;align-items:center;background:#0d1018;border:1px solid #2a3050;padding:7px 12px;margin:4px 0;cursor:pointer;color:#aab}
.shop-item:hover{background:#151a2a;border-color:#55f;color:#cde}
.shop-item.cant{opacity:.4;cursor:not-allowed}
.shop-item .price{color:#fc4}
.shop-item .stat{color:#6c6;font-size:.85em}
.modal-btns{display:flex;gap:8px;justify-content:center;margin-top:14px;flex-wrap:wrap}
.modal-btn{background:#0d1018;border:2px solid #4466cc;color:#8ac0ff;font-family:'Courier New',monospace;font-size:clamp(12px,1.3vw,15px);padding:9px 22px;cursor:pointer;letter-spacing:1px}
.modal-btn:hover{background:#152040;border-color:#66aaff}
.modal-btn.danger{border-color:#c44;color:#f88}
.modal-btn.danger:hover{background:#301010}
.modal-btn.gold{border-color:#c94;color:#fc6}
.modal-gold{text-align:center;color:#fc4;font-size:clamp(11px,1.2vw,14px);margin-bottom:8px}

/* ── COMBAT MODAL ── */
.cbt-arena{display:flex;justify-content:center;margin:4px 0 10px}
#cbt-canvas{border:1px solid #4a2a2a;background:#0a0608;border-radius:3px;max-width:100%;image-rendering:pixelated}
.cbt-bars{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.cbt-bar-row{display:flex;align-items:center;gap:8px;font-size:clamp(9px,1vw,12px);color:#aab}
.cbt-bar-row>span:first-child{width:64px;text-align:right;color:#9ab}
.cbt-bar-row>span:last-child{width:56px;font-size:.85em;color:#ccd}
.cbt-bar{flex:1;height:14px;background:#1a1015;border:1px solid #3a2a2a;border-radius:2px;overflow:hidden}
.cbt-fill{height:100%;transition:width .25s ease}
.cbt-fill.you{background:linear-gradient(90deg,#2a8a2a,#40c040)}
.cbt-fill.enemy{background:linear-gradient(90deg,#8a2020,#d03030)}
.cbt-log{background:#0a0810;border:1px solid #2a2035;border-radius:2px;padding:6px 8px;height:76px;overflow-y:auto;font-size:clamp(9px,1vw,12px);line-height:1.5}
.cbt-log .sys{color:#7ac0ff}
.cbt-log .err{color:#ff7a7a}
.cbt-log .loot{color:#7aff7a}

/* ── ENCOUNTER HOVER CARD ── */
.enc-hover{position:relative;text-align:center;margin:6px 0}
.enc-hint{color:#889;font-size:clamp(9px,1vw,12px);cursor:help;border-bottom:1px dotted #667;padding-bottom:1px}
.enc-tip{display:none;position:absolute;left:50%;transform:translateX(-50%);bottom:100%;margin-bottom:6px;background:#12080a;border:1px solid #a44;border-radius:4px;padding:8px 12px;min-width:180px;z-index:5;box-shadow:0 4px 16px rgba(0,0,0,.6)}
.enc-hover:hover .enc-tip{display:block}
.enc-tip-name{color:#ff8a6a;font-size:clamp(11px,1.2vw,14px);margin-bottom:5px;text-align:center;letter-spacing:1px}
.enc-tip-row{display:flex;justify-content:space-between;gap:16px;color:#bab;font-size:clamp(9px,1vw,12px);padding:1px 0}
.enc-tip-row span:last-child{color:#fc6}

/* ── CAMP MODAL ── */
.camp-status{background:#0a0d14;border:1px solid #2a3348;border-radius:3px;padding:8px 14px;margin:10px auto;max-width:240px}
.camp-row{display:flex;justify-content:space-between;color:#9ab;font-size:clamp(10px,1.1vw,13px);padding:2px 0}
.camp-row span:last-child{color:#8fd88f}
.camp-resting{text-align:center}
.camp-z{color:#6a8ac0;font-size:clamp(18px,3vw,28px);letter-spacing:6px;animation:campz 2s ease-in-out infinite;margin:6px 0}
@keyframes campz{0%,100%{opacity:.4}50%{opacity:1}}
.camp-msg{color:#8ac08a;font-size:clamp(10px,1.1vw,13px);margin-top:8px;min-height:1.2em}

/* ── DUNGEON CHECKLIST ── */
.dgn-list{background:#0a0d14;border:1px solid #2a3348;border-radius:3px;padding:8px 14px;margin:8px auto;max-width:280px}
.dgn-row{display:flex;justify-content:space-between;color:#9ab;font-size:clamp(10px,1.1vw,13px);padding:3px 0}

/* ── ENDING SCREEN ── */
.ending-stats{background:#0a0d14;border:1px solid #3a4568;border-radius:4px;padding:10px 18px;margin:12px auto 0;max-width:260px;text-align:left}
.ending-stat-title{color:#c8a850;text-align:center;font-size:clamp(10px,1.1vw,13px);margin-bottom:6px;letter-spacing:1px}
.ending-stat-row{display:flex;justify-content:space-between;color:#9ab;font-size:clamp(10px,1.1vw,13px);padding:2px 0}
.ending-stat-row span:last-child{color:#fc6}

/* v2.1.0 game shell */
[hidden]{display:none!important}
#title{align-items:safe center;justify-content:safe center}
#game{background:#080f0c;color:#dce4d6;gap:0}
#info-panel,#control-panel{width:230px;flex:0 0 230px;min-height:0;background:#0b1510;border-color:#304334}
#info-panel{display:flex;flex-direction:column;border-right:1px solid #304334;overflow-y:auto}
#control-panel{overflow-y:auto;border-left:1px solid #304334;padding-bottom:10px}
#play-area{min-width:0;min-height:0;flex:1;display:flex;flex-direction:column}
#viewport{border:0;touch-action:none;min-height:220px}
#vc{cursor:crosshair}
.game-heading{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;padding:13px 16px;border-bottom:1px solid #304334;font-size:15px;color:#e6d69f;min-height:56px}
.game-heading small{font-size:11px;color:#aabd9f;margin-left:6px}
#location-label{font-size:11px;color:#becbb4}
.map-caption{font-size:10px;color:#a4b49b;padding:8px 12px;text-align:center;border-top:1px solid #304334}
#status{padding:14px;gap:6px;border-bottom:1px solid #304334}
.st-row{font-size:12px;gap:10px}.st-lbl{color:#b4c5a8}.st-val{color:#ecddb2}
.st-title{font-size:13px;color:#dbedca;line-height:1.5}
.health-track{height:6px;background:#302d24;border-radius:4px;margin:5px 0;overflow:hidden}
#health-fill{height:100%;background:#78b266;width:100%}
.st-sep{border-color:#304334}.danger-text,#survival-warning{color:#ffb591}
#survival-warning{font-size:11px;line-height:1.5;empty-cells:hide}
#survival-warning:empty{display:none}
.panel-section{padding:12px 14px;border-bottom:1px solid #263b2d;flex-shrink:0}
.panel-section h2,.log-title{font-size:10px;letter-spacing:1.4px;font-weight:normal;color:#c6d3b9;margin:0 0 12px}
.panel-section h2 span{display:block;color:#94ad86;font-size:10px;margin-top:5px;letter-spacing:0}
.quest-panel p{font-size:11px;line-height:1.6}.quest-list{list-style:none;margin:10px 0;display:grid;gap:9px;font-size:10px;line-height:1.5;color:#cbd7bd}
#explored-count{color:#91b6ce}.log-title{padding:12px 14px 0;margin:0 0 6px}
#textbox{padding:4px 14px 12px;min-height:125px;font-size:11px;color:#c8d2c0;line-height:1.65}
#textbox .cmd{color:#a9b88a}#textbox .sys{color:#9bc9e1}#textbox .err{color:#ffb298}#textbox .loot{color:#c8e698}
#control-panel button{width:100%;border:1px solid #45604c;border-radius:3px;background:#16281d;color:#e2ead8;font:11px 'Courier New',monospace;line-height:1.3;padding:9px 5px;min-height:40px;cursor:pointer}
#control-panel button:hover:not(:disabled){background:#294531;border-color:#9eb77d}
#control-panel button:disabled{opacity:.45;cursor:default}
#control-panel button:focus-visible,.cs-go:focus-visible,.modal-btn:focus-visible{outline:2px solid #e5d29a;outline-offset:2px}
#control-panel button small{display:block;color:#a6c291;font-size:9px;margin-top:3px}
.direction-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
.button-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.action-list{display:grid;gap:7px}.action-list h2{margin-bottom:3px}
#map-controls>button,#space-controls>button{margin-top:6px}
.control-hint,#save-status{font-size:10px;line-height:1.5;color:#b5c4aa}
#save-status{color:#d6c48f}.control-hint{margin:4px 0}
.modal-body p{margin-bottom:12px}.modal-sub{color:#a8b6c9}.t-menu{gap:8px}
#charscreen{overflow-y:auto}
@media(max-width:1100px) and (min-width:801px){#info-panel{width:190px;flex-basis:190px}#control-panel{width:190px;flex-basis:190px}.panel-section,#status{padding:10px}}
@media(max-width:800px){
 #game{flex-wrap:wrap;height:100vh;height:100svh;overflow-y:auto;align-content:flex-start}
 #play-area{order:0;flex:0 0 100%;height:56vh;height:56svh;min-height:310px}
 #info-panel{order:2}#control-panel{order:1}
 #info-panel,#control-panel{width:50%;flex:0 0 50%;max-height:none;min-height:650px;overflow:visible}
 #textbox{flex:1;max-height:240px;overflow-y:auto}
 .game-heading{padding:10px;font-size:13px}.map-caption{font-size:9px}
}
@media(max-width:400px){#info-panel,#control-panel{width:100%;flex-basis:100%;min-height:0}#control-panel .direction-grid button{min-height:44px}}

/* v2.2.0 explorer journal and dungeon atlas */
#modal.wide-modal{width:min(850px,94vw);min-width:0;max-width:94vw;max-height:90vh;padding:22px;border-color:#718b66;background:#0c1711}
#modal.wide-modal .modal-title{color:#e4d79f}#modal.wide-modal .modal-sub{color:#b5c6a6}
#modal.wide-modal .modal-body{font-size:12px;line-height:1.6;color:#d7e0cd}
.journey-totals{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}
.journey-totals>div{padding:12px;background:#172a1c;border:1px solid #3a5135;border-radius:5px;text-align:center}
.journey-totals b{display:block;color:#e6d593;font-size:24px}.journey-totals span{display:block;color:#c2d1b5;font-size:10px}
.journal-readiness{padding:10px 12px;border-left:3px solid #b9ca83;background:#14251b}
.journal-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:16px 0}
.journal-card{padding:12px;border:1px solid #405639;border-radius:5px;background:#101f16;min-width:0}
.journal-card h3,.journal-bottom h3{font-size:12px;color:#e8dcb1;line-height:1.5;margin:0 0 8px}
.journal-card p{font-size:11px;margin-bottom:7px}.journal-muted{color:#a6b69b;font-size:10px;line-height:1.6}
.floor-buttons{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 2px}
.atlas-button{font:11px 'Courier New',monospace;line-height:1.4;min-height:36px;padding:7px 10px;border:1px solid #587148;border-radius:3px;color:#e0e9cf;background:#1a2e20;cursor:pointer}
.atlas-button:hover:not(:disabled),.atlas-button.selected{background:#3b5130;border-color:#d3d593}.atlas-button:disabled{opacity:.45;cursor:default}
.atlas-button:focus-visible{outline:2px solid #eee0ab;outline-offset:3px}
.journal-bottom{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:18px}.landmark-list,.milestone-list{font-size:11px;line-height:1.7;padding-left:18px}.landmark-list span{color:#a9b593;white-space:nowrap}
.atlas-layout{display:grid;grid-template-columns:minmax(240px,1.5fr) minmax(160px,1fr);gap:22px;align-items:start;margin-top:16px}
.dungeon-atlas{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:2px;background:#070b08;border:1px solid #415638;aspect-ratio:1}
.dungeon-atlas tbody{display:contents}
.dungeon-atlas{display:grid;grid-template-rows:repeat(10,minmax(0,1fr));gap:2px;padding:2px}
.dungeon-atlas tr{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:2px;min-height:0}
.dungeon-atlas td{display:flex;align-items:center;justify-content:center;width:auto;padding:0;text-align:center;vertical-align:middle;font-size:clamp(12px,2vw,21px);font-weight:bold;border:1px solid transparent;line-height:1}
.atlas-unknown{background:#090d0a}.atlas-tile-0{background:#343c2e;color:#758567}.atlas-tile-1{background:#151b13;color:#566348}
.atlas-tile-2{background:#343c2e;color:#f4d076}.atlas-tile-3{background:#343c2e;color:#ff957f}.atlas-tile-4{background:#343c2e;color:#9bd2f9}.atlas-tile-5{background:#343c2e;color:#b3e58f}
.dungeon-atlas td.atlas-route{background:#365c34;border-color:#97bf74}.dungeon-atlas td.atlas-player{background:#f4d77e;color:#172015;border-color:#ffefb7}
.atlas-notes p{font-size:11px;line-height:1.65}.atlas-location{color:#f1d88c}.atlas-legend{color:#d0d9c6}.atlas-route-buttons{display:grid;gap:7px;margin:12px 0}
#atlas-route-info{padding:9px;background:#17291c;color:#d9dfb9;min-height:50px}#floor-summary{color:#b0c297;font-size:10px;line-height:1.5;margin-top:8px}
@media(max-width:620px){#modal.wide-modal{padding:14px}.journey-totals{gap:6px;grid-template-columns:repeat(2,1fr)}.journey-totals>div{padding:8px}.journal-cards,.journal-bottom,.atlas-layout{grid-template-columns:1fr}.atlas-layout{gap:12px}.dungeon-atlas{max-width:410px;justify-self:center}.dungeon-atlas td{font-size:17px}.atlas-route-buttons{grid-template-columns:1fr 1fr}.atlas-route-buttons button:last-child{grid-column:1/-1}}

/* v2.3 tactical battle and rescue */
#modal.tactical{width:min(650px,94vw);min-width:0;max-width:94vw;max-height:90vh;padding:22px;background:#100e14}
.cbt-header{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:center;margin:8px 0 16px}
.tactical .cbt-arena{margin:0}.tactical #cbt-canvas{width:100%;height:auto}
.cbt-intent{border-left:3px solid #deab63;background:#211c19;padding:12px;color:#eddec4}
.cbt-intent[data-intent=heavy]{border-color:#f57666;background:#2b1519}
.cbt-intent[data-intent=recover],.cbt-intent[data-intent=resolved]{border-color:#80bd9a;background:#122820}
.cbt-intent>span{display:block;font-size:10px;letter-spacing:1px;color:#bcb1a2}
.cbt-intent>strong{display:block;font-size:21px;margin:6px 0}
.cbt-intent p{font-size:12px;line-height:1.5;margin:0}
.cbt-resources{display:flex;justify-content:space-between;gap:8px;padding-top:10px;font-size:12px;color:#e9c775}
.tactical .cbt-bar-row{font-size:12px}.tactical .cbt-log{height:100px;font-size:12px}
.tactical .modal-btns{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.tactical .modal-btn{padding:11px 7px;letter-spacing:0;font-size:13px;min-height:60px;line-height:1.3}
.tactical .modal-btn small{display:block;font-size:10px;line-height:1.4;margin-top:5px;color:#c3c2bc}
.tactical .modal-btn:disabled{opacity:.38;cursor:not-allowed;background:#151317}
.rescue-summary{display:grid;gap:9px;margin:18px 0}.rescue-summary>div{display:flex;justify-content:space-between;gap:18px;border-bottom:1px solid #423a30;padding-bottom:9px}
.rescue-summary b{color:#edc879}.rescue-summary span{font-size:11px;color:#c7c4b7;text-align:right}
@media(max-width:620px){#modal.tactical{padding:14px}.cbt-header{grid-template-columns:1fr;gap:10px}.tactical #cbt-canvas{width:230px}.cbt-intent{padding:10px}.cbt-intent>strong{font-size:19px;margin:4px 0}.cbt-resources{padding-top:8px}.tactical .modal-btns{grid-template-columns:repeat(2,minmax(0,1fr))}.tactical .cbt-log{height:80px}}

/* v2.4 civic contracts and town preparation */
.contract-grid,.service-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.contract-card,.service-grid>section{padding:16px;background:#101e17;border:1px solid #344c39;border-radius:5px}
.contract-local{border-color:#ceb274;background:#22251a}
.contract-place{font-size:10px;letter-spacing:.8px;color:#b9c6a8;text-transform:uppercase}
.contract-card h3,.service-grid h3,.local-contract h3{font-size:16px;line-height:1.4;color:#e7d79f;margin:10px 0}
.contract-card p{margin:9px 0}.contract-progress{height:7px;border-radius:4px;background:#26322a;overflow:hidden}
.contract-progress>span{height:100%;display:block;background:#c8ad70}
.contract-meta{display:flex;justify-content:space-between;gap:10px;margin-top:7px;font-size:11px;color:#bdcaaa}
.contract-meta b{color:#e4d499;font-weight:normal}.contract-reward{color:#c6b780}
.contract-card .atlas-button,.service-grid .atlas-button{width:100%;margin-top:7px;line-height:1.5}
.service-note{font-size:11px;line-height:1.6;color:#a6b89f;margin:10px 0}
.local-contract{margin-top:15px;padding:16px;border:1px solid #7c704d;border-radius:5px;background:#232416}
.equipment-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.equipment-offer{display:flex;justify-content:space-between;gap:16px;text-align:left;padding:15px;background:#16241b;border:1px solid #718865;color:#e2dba5;font-family:inherit;cursor:pointer;line-height:1.5}
.equipment-offer>span:last-child{text-align:right}.equipment-offer small{display:block;font-size:11px;color:#b8c8af;margin-top:5px}
.equipment-offer:hover:not(:disabled){background:#293c2b;border-color:#d0bc7a}.equipment-offer:disabled{opacity:.65;cursor:not-allowed}
.equipment-offer:focus-visible{outline:2px solid #e5d29a;outline-offset:2px}
#contract-summary{font-size:11px;line-height:1.6;color:#c6b781}
@media(min-width:900px){#modal.contract-panel{width:960px}.contract-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.contract-card{padding:14px}.contract-card h3{min-height:45px}}
@media(max-width:620px){.contract-grid,.service-grid,.equipment-list{grid-template-columns:1fr}.contract-card,.service-grid>section{padding:13px}.equipment-offer{padding:13px}.contract-meta{flex-wrap:wrap}}

/* v2.5 world atlas and travel planning */
#modal.world-atlas-modal{width:1080px}
.world-atlas-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(240px,1fr);gap:22px}
.world-atlas-scroll{max-height:430px;overflow:auto;border:1px solid #465d44;background:#08130f;overscroll-behavior:contain}
#world-atlas-canvas{display:block;width:100%;max-width:none;height:auto;cursor:crosshair;margin:0 auto}
#world-atlas-canvas:focus-visible{outline:3px solid #e5d29a;outline-offset:-3px}
.world-atlas-tools{display:flex;gap:9px;align-items:center;margin-bottom:10px}.world-atlas-tools .atlas-button{min-width:40px;padding:7px 12px}
.world-atlas-tools>span{font-size:11px;min-width:35px;color:#d7c891}.world-atlas-tools button:last-child{margin-left:auto}
.atlas-key-hint{font-size:10px;color:#9cae95;line-height:1.6;margin:9px 0}
.world-atlas-legend{display:flex;flex-wrap:wrap;gap:7px 14px;padding:10px;background:#142219;font-size:11px;color:#ccd4b8}
.atlas-danger-key{color:#ff968a}.atlas-trip h3{margin:0 0 10px;color:#e4d399;font-size:16px;line-height:1.5}
.world-atlas-terrain-key{display:flex;flex-wrap:wrap;gap:7px 12px;font-size:10px;color:#b9c7b0;padding:9px 0}.world-atlas-terrain-key span{display:flex;align-items:center;gap:5px}.world-atlas-terrain-key i{display:inline-block;width:10px;height:10px;border:1px solid #73856b}
#atlas-selected-terrain{color:#aac29d;font-size:11px}#atlas-route-detail{padding:12px;background:#202a1b;border-left:3px solid #c4a76a;line-height:1.6}
.atlas-trip>.atlas-button{display:block;width:100%;margin:8px 0}.atlas-trip>h3:not(:first-child){margin-top:18px}
.atlas-destinations{max-height:195px;overflow-y:auto;display:grid;gap:6px}
.atlas-destinations .atlas-button{text-align:left;display:flex;justify-content:space-between;align-items:center;gap:12px;line-height:1.5}
.atlas-destinations small{white-space:nowrap;color:#afbf9c}.atlas-destinations [aria-pressed=true]{border-color:#ecd19b;background:#303421}
#travel-name{font-size:12px;color:#e2c884;margin:8px 0}#travel-detail{font-size:11px;line-height:1.6;color:#b1c3a3}
@media(max-width:740px){.world-atlas-layout{grid-template-columns:minmax(0,1fr);gap:18px}.world-atlas-scroll{max-height:400px}.atlas-destinations{max-height:190px}}
