:root{--navy:#071a2c;--navy2:#0d2c46;--sea:#0d6173;--teal:#16a085;--gold:#f0b84b;--cream:#f6f1df;--ink:#122231;--muted:#6d7b87;--danger:#c94b4b;--success:#238b62;--card:#fff;--line:#dbe3e8;--shadow:0 18px 60px rgba(0,20,35,.16);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:#eef4f6;min-height:100vh}button,input,select,textarea{font:inherit}.home-body{background:radial-gradient(circle at 20% 20%,#174f65 0,#071a2c 48%,#030c15 100%);display:grid;place-items:center;padding:24px}.home-shell{width:min(1040px,100%);min-height:640px;background:#fff;border-radius:28px;overflow:hidden;display:grid;grid-template-columns:1.05fr .95fr;box-shadow:0 34px 90px #0008}.brand-panel{position:relative;padding:64px;color:white;background:linear-gradient(150deg,#0a243a,#0b5b6a);display:flex;flex-direction:column;justify-content:center;overflow:hidden}.brand-panel:before,.brand-panel:after{content:"";position:absolute;border:1px solid #ffffff22;border-radius:50%}.brand-panel:before{width:480px;height:480px;right:-210px;top:-170px}.brand-panel:after{width:300px;height:300px;left:-170px;bottom:-120px}.brand-mark,.crest{width:64px;height:64px;border-radius:18px;background:var(--gold);color:#503405;display:grid;place-items:center;font-size:34px;box-shadow:0 12px 30px #0004}.eyebrow{text-transform:uppercase;letter-spacing:.14em;font-weight:800;font-size:.78rem;color:var(--gold);margin:24px 0 12px}.brand-panel h1{font-family:Georgia,serif;font-size:clamp(3rem,6vw,5rem);line-height:.92;margin:0;letter-spacing:-.04em}.brand-panel h1 span{color:#f6d591}.lead{font-size:1.08rem;line-height:1.7;max-width:470px;color:#d7e6ea}.feature-row{display:flex;gap:10px;flex-wrap:wrap}.feature-row span{border:1px solid #ffffff35;background:#ffffff10;padding:8px 13px;border-radius:999px;font-size:.83rem}.entry-panel{padding:54px;display:flex;flex-direction:column;justify-content:center}.entry-panel h2,.setup-card h1{font-family:Georgia,serif;font-size:2rem;margin:20px 0 8px}.entry-panel p,.setup-card p{color:var(--muted);line-height:1.6}.tabs{display:flex;border-bottom:1px solid var(--line);gap:20px;margin-bottom:18px}.tab{background:none;border:0;padding:14px 0;font-weight:750;color:var(--muted);border-bottom:3px solid transparent;cursor:pointer}.tab.active{color:var(--sea);border-color:var(--gold)}.tab-pane{display:none}.tab-pane.active{display:block}.form-stack{display:grid;gap:16px;margin-top:24px}.form-stack label,.field{display:grid;gap:7px;font-size:.9rem;font-weight:750;color:#344553}.form-stack small{color:var(--muted);font-weight:500}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px}input,select,textarea{width:100%;border:1px solid #cbd8de;border-radius:11px;padding:12px 14px;background:#fff;color:var(--ink);outline:none}input:focus,select:focus,textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px #16a08522}.btn{border:0;border-radius:11px;padding:12px 17px;font-weight:800;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;gap:8px;text-decoration:none;transition:.18s}.btn:hover{transform:translateY(-1px);filter:brightness(1.04)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn.primary{background:var(--teal);color:#fff}.btn.gold{background:var(--gold);color:#4a3306}.btn.dark{background:var(--navy2);color:#fff}.btn.danger{background:var(--danger);color:#fff}.btn.ghost{background:#edf3f5;color:var(--ink)}.btn.wide{width:100%}.btn.small{padding:8px 11px;font-size:.82rem}.alert{padding:12px 14px;border-radius:10px;margin-top:16px;background:#e8f6f0;color:#176844}.alert.danger{background:#ffeded;color:#9e3030}.hidden{display:none!important}.setup-body{display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#071a2c,#0d6173)}.setup-card{background:#fff;width:min(520px,100%);padding:42px;border-radius:24px;box-shadow:var(--shadow)}
.app-body{background:#eaf1f3}.topbar{height:72px;background:var(--navy);color:#fff;display:flex;align-items:center;padding:0 26px;gap:18px;position:sticky;top:0;z-index:20;box-shadow:0 5px 20px #001a2c33}.topbar .logo{font-family:Georgia,serif;font-weight:800;font-size:1.25rem}.topbar .room-code{margin-left:auto;background:#ffffff12;border:1px solid #ffffff25;padding:8px 12px;border-radius:9px;font-weight:800;letter-spacing:.12em}.topbar .status-pill{border-radius:999px;padding:8px 12px;background:#124f5c;font-size:.82rem;font-weight:800}.app-shell{display:grid;grid-template-columns:250px 1fr;min-height:calc(100vh - 72px)}.sidebar{background:#fff;border-right:1px solid var(--line);padding:20px 14px}.side-title{padding:10px 12px;font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:#84929d;font-weight:900}.nav-btn{width:100%;border:0;background:none;text-align:left;padding:11px 12px;border-radius:9px;font-weight:700;color:#43535f;cursor:pointer;margin:2px 0}.nav-btn.active,.nav-btn:hover{background:#e9f5f3;color:#086b5a}.main{padding:24px;min-width:0}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px}.page-head h1{margin:0;font-family:Georgia,serif}.page-head p{margin:6px 0;color:var(--muted)}.grid{display:grid;gap:16px}.stats-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.stat,.card{background:#fff;border:1px solid #dce6ea;border-radius:16px;box-shadow:0 6px 22px #0c38500a}.stat{padding:18px}.stat b{font-size:1.75rem;display:block}.stat span{color:var(--muted);font-size:.83rem}.card{padding:20px}.card h2,.card h3{margin:0 0 12px}.dashboard-grid{grid-template-columns:1.4fr .9fr}.map{position:relative;min-height:410px;border-radius:18px;overflow:hidden;background:radial-gradient(circle at 50% 45%,#35a2ad,#0b586d 65%,#063848);padding:20px}.map:before{content:"";position:absolute;inset:0;background-image:linear-gradient(#ffffff0c 1px,transparent 1px),linear-gradient(90deg,#ffffff0c 1px,transparent 1px);background-size:34px 34px}.island-grid{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:18px;height:100%}.island{min-height:155px;border:1px solid #ffffff38;background:#ffffffed;border-radius:50% 44% 48% 42%;padding:18px;text-align:center;display:flex;flex-direction:column;justify-content:center;align-items:center;box-shadow:0 8px 0 #c5a86b,0 18px 35px #00222f55}.island .emblem{font-size:2rem}.island strong{font-family:Georgia,serif;font-size:1.05rem}.island small{color:var(--muted)}.resource-bar{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin-bottom:16px}.resource{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;text-align:center}.resource b{display:block}.resource small{color:var(--muted)}.panel{display:none}.panel.active{display:block}.table-wrap{overflow:auto}.data-table{border-collapse:collapse;width:100%;font-size:.9rem}.data-table th,.data-table td{text-align:left;padding:11px;border-bottom:1px solid #e5ecef;white-space:nowrap}.data-table th{color:#687883;font-size:.76rem;text-transform:uppercase;letter-spacing:.06em}.event-list{display:grid;gap:10px;max-height:400px;overflow:auto}.event{border-left:3px solid var(--teal);padding:7px 11px;background:#f5f9fa;border-radius:0 8px 8px 0}.event small{color:var(--muted)}.modal{position:fixed;inset:0;background:#03101ccc;display:grid;place-items:center;padding:20px;z-index:50}.modal-card{background:#fff;width:min(620px,100%);max-height:90vh;overflow:auto;border-radius:18px;padding:24px}.choice-grid{display:grid;gap:10px}.choice{border:1px solid var(--line);border-radius:12px;padding:12px;cursor:pointer}.choice:has(input:checked){border-color:var(--teal);background:#ecf9f6}.role-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.role-card{border:1px solid var(--line);border-radius:14px;padding:14px}.role-card.disabled{opacity:.42}.role-card b{display:block}.question-box{font-size:1.05rem;line-height:1.6}.question-box img{max-width:100%;height:auto}.action-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.action-card{border:1px solid var(--line);border-radius:14px;padding:15px}.action-card h3{font-size:1rem;margin:0 0 7px}.badge{display:inline-block;border-radius:999px;padding:4px 8px;font-size:.72rem;font-weight:800;background:#e8f4f1;color:#08705f}.badge.gold{background:#fff2d4;color:#805600}.badge.red{background:#ffe8e8;color:#a83333}.toast{position:fixed;right:18px;bottom:18px;background:#102b3e;color:#fff;padding:13px 16px;border-radius:11px;z-index:100;box-shadow:var(--shadow);max-width:360px}.teacher-controls{display:flex;gap:8px;flex-wrap:wrap}.countdown{font-variant-numeric:tabular-nums;font-size:1.2rem;font-weight:900}.progress{height:8px;background:#e7edef;border-radius:99px;overflow:hidden}.progress>span{display:block;height:100%;background:var(--teal)}
@media(max-width:850px){.home-shell{grid-template-columns:1fr}.brand-panel{padding:40px;min-height:310px}.entry-panel{padding:36px}.app-shell{grid-template-columns:1fr}.sidebar{position:fixed;left:0;right:0;bottom:0;z-index:30;border:0;border-top:1px solid var(--line);display:flex;padding:7px;overflow:auto}.side-title{display:none}.nav-btn{min-width:92px;text-align:center;font-size:.75rem}.main{padding:16px 14px 90px}.stats-grid{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.resource-bar{grid-template-columns:repeat(3,1fr)}.island-grid{grid-template-columns:1fr 1fr}.topbar{padding:0 14px}.topbar .logo{font-size:1rem}.role-grid,.action-grid{grid-template-columns:1fr}}
@media(max-width:520px){.home-body{padding:0}.home-shell{border-radius:0}.brand-panel{padding:30px;min-height:270px}.entry-panel{padding:28px 22px}.brand-panel h1{font-size:2.7rem}.two-col{grid-template-columns:1fr}.page-head{display:block}.teacher-controls{margin-top:12px}.island-grid{grid-template-columns:1fr}.island{min-height:130px}.stats-grid{grid-template-columns:1fr 1fr}.modal-card{padding:18px}}

/* Version 1.1: living strategy map */
.map.war-map{position:relative;min-height:520px;border-radius:18px;overflow:hidden;padding:0;background:radial-gradient(ellipse at 48% 44%,#2e99aa 0,#126b83 35%,#073c58 76%,#042a43 100%);box-shadow:inset 0 0 70px #001b2eaa,0 16px 34px #0b38502b;border:1px solid #6bc2cc55;isolation:isolate}
.map.war-map:before{content:"";position:absolute;inset:-35%;z-index:0;background:repeating-radial-gradient(ellipse at 50% 50%,transparent 0 25px,#a9eced13 27px 29px,transparent 31px 50px);background-size:auto;animation:oceanDrift 22s linear infinite}
.map.war-map:after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:linear-gradient(115deg,transparent 0 35%,#d7ffff12 43%,transparent 51% 100%),radial-gradient(circle at 72% 18%,#d8ffff28 0 2px,transparent 3px),radial-gradient(circle at 18% 76%,#d8ffff1f 0 2px,transparent 3px);background-size:auto,46px 46px,68px 68px;mix-blend-mode:screen}
.war-map-layer{position:absolute;inset:0;z-index:2}
.war-island{position:absolute;width:clamp(150px,24%,265px);aspect-ratio:1.35;transform:translate(-50%,-50%);filter:drop-shadow(0 18px 12px #001a2c99);transition:filter .25s,transform .25s;z-index:3}
.war-island:hover{filter:drop-shadow(0 22px 16px #00121ccc) brightness(1.08);transform:translate(-50%,-52%) scale(1.03);z-index:6}
.island-art{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;user-select:none;pointer-events:none}
.island-flag{position:absolute;left:50%;bottom:3%;transform:translateX(-50%);min-width:72%;max-width:98%;padding:6px 11px;border-radius:9px;background:linear-gradient(180deg,#12283eea,#071625f2);border:1px solid #f0c66a80;color:#fff;text-align:center;box-shadow:0 6px 18px #0008;backdrop-filter:blur(4px)}
.island-flag strong{font:800 .88rem Georgia,serif;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.island-flag small{font-size:.68rem;color:#c7dbe3;white-space:nowrap}
.island-score{position:absolute;right:8%;top:8%;padding:4px 7px;border-radius:99px;background:#eab84b;color:#4f3505;font-size:.68rem;font-weight:900;box-shadow:0 3px 8px #0005}.island-emblem{position:absolute;left:8%;top:8%;width:27px;height:27px;display:grid;place-items:center;border-radius:50%;background:#fff;color:#172839;box-shadow:0 3px 8px #0005}
.map-empty{position:absolute;inset:0;display:grid;place-items:center;text-align:center;color:#d8f2f2;z-index:3}.map-empty b{font:700 1.25rem Georgia,serif}
.construction-fx{position:absolute;left:50%;top:28%;transform:translate(-50%,-50%);z-index:9;font-size:2.4rem;filter:drop-shadow(0 4px 5px #0008);animation:hammerWork .45s ease-in-out infinite alternate}.construction-fx:after{content:"";position:absolute;width:70px;height:26px;border-radius:50%;background:#dfc38e88;filter:blur(8px);left:50%;top:80%;transform:translateX(-50%);animation:dustPulse .8s ease-out infinite}.war-island.constructing{animation:islandBuildGlow .8s ease-in-out infinite alternate}
.attack-ship{position:absolute;width:clamp(76px,10vw,132px);height:auto;z-index:14;pointer-events:none;filter:drop-shadow(0 9px 7px #001524b8)}.attack-trail{position:absolute;height:3px;transform-origin:left center;background:linear-gradient(90deg,transparent,#d9ffffaa,transparent);filter:blur(1px);z-index:4;pointer-events:none}.impact-fx{position:absolute;z-index:15;transform:translate(-50%,-50%);font-size:3rem;pointer-events:none;animation:impactBurst 1.1s ease-out forwards}.battle-banner{position:absolute;left:50%;top:16px;transform:translateX(-50%);z-index:18;background:#071725e8;color:#fff;border:1px solid #eab84b88;padding:8px 14px;border-radius:10px;font-weight:850;box-shadow:0 8px 24px #0009;animation:bannerIn 2.8s ease both}
@keyframes oceanDrift{to{transform:translate(9%,6%) rotate(2deg)}}@keyframes hammerWork{from{transform:translate(-50%,-50%) rotate(-18deg)}to{transform:translate(-50%,-50%) rotate(20deg)}}@keyframes dustPulse{0%{opacity:.2;transform:translateX(-50%) scale(.5)}70%{opacity:.8}100%{opacity:0;transform:translateX(-50%) scale(1.4)}}@keyframes islandBuildGlow{from{filter:drop-shadow(0 18px 12px #001a2c99) drop-shadow(0 0 0 #ffd56b)}to{filter:drop-shadow(0 18px 12px #001a2c99) drop-shadow(0 0 22px #ffd56b)}}@keyframes impactBurst{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}25%{opacity:1;transform:translate(-50%,-50%) scale(1.25)}100%{opacity:0;transform:translate(-50%,-50%) scale(2)}}@keyframes bannerIn{0%{opacity:0;transform:translate(-50%,-20px)}15%,75%{opacity:1;transform:translate(-50%,0)}100%{opacity:0;transform:translate(-50%,-10px)}}
@media(max-width:850px){.map.war-map{min-height:470px}.war-island{width:clamp(130px,29%,220px)}}
@media(max-width:520px){.map.war-map{min-height:520px}.war-island{width:155px}.island-flag{padding:4px 7px}.island-flag strong{font-size:.74rem}.island-flag small{font-size:.58rem}}
@media(prefers-reduced-motion:reduce){.map.war-map:before,.construction-fx,.war-island.constructing{animation:none!important}}
