:root{color-scheme:light;--ink:#182a3b;--muted:#627182;--navy:#101c2b;--line:#e1e7ec;--green:#157460;--paper:#f6f8fa;font-family:Inter,"Segoe UI",system-ui,sans-serif;font-size:16px}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--paper)}a{color:inherit}button,input{font:inherit}button,.button{cursor:pointer;border:1px solid #cfd8df;border-radius:6px;background:#fff;color:var(--ink);padding:10px 14px;font-weight:600;font-size:.875rem;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:12px}button:hover,.button:hover{background:#edf4f1;border-color:#83ab9d}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid #16977b;outline-offset:3px}.primary{background:var(--green);border-color:var(--green);color:white}.primary:hover{background:#105b4c;color:#fff}.brand{font-size:1.1rem;letter-spacing:.17em;font-weight:750;text-decoration:none;display:flex;align-items:center;gap:12px;color:#fff}.brand-icon{display:inline-flex;align-items:center;justify-content:center;letter-spacing:0;background:#8ed6c4;color:var(--navy);width:32px;height:32px;border-radius:5px;font-size:1.5rem}.eyebrow{font-size:.75rem;letter-spacing:.16em;font-weight:700;color:var(--muted);margin:0 0 15px}.muted{color:var(--muted);font-size:.875rem;line-height:1.7}.hint{color:var(--muted);font-size:.8125rem;line-height:1.65}.workspace{height:100vh;height:100dvh;display:grid;grid-template-columns:290px minmax(0,1fr);grid-template-rows:72px minmax(0,1fr)}.topbar{grid-column:1/-1;display:flex;align-items:center;padding:0 28px;gap:35px;background:var(--navy);color:white;z-index:5}.environment{font-size:.8125rem;display:flex;align-items:center;gap:9px;border-left:1px solid #354354;padding-left:28px;color:#c9d6e1}.status-dot,.empty-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#78c6b3;flex-shrink:0}.empty-dot{background:#94a2ae;margin-right:5px}.account{margin-left:auto;display:flex;align-items:center;gap:24px}.user-name{font-size:.875rem}.user-name small{display:block;font-size:.75rem;color:#a7b7c8;margin-top:2px}.account-menu{position:relative;font-size:.875rem}.account-menu summary{cursor:pointer;list-style:none;padding:8px;border:1px solid #455363;border-radius:5px}.menu-content{position:absolute;right:0;top:44px;width:200px;background:#fff;border:1px solid var(--line);color:var(--ink);border-radius:7px;box-shadow:0 12px 40px #101c2b30;overflow:hidden}.menu-content a,.menu-content button{display:block;padding:14px 16px;text-decoration:none;width:100%;text-align:left;border:0;border-radius:0;font-weight:400;font-size:.875rem}.menu-content a:hover{background:var(--paper)}.sidebar{background:#fff;overflow-y:auto;display:flex;flex-direction:column;border-right:1px solid var(--line);z-index:2}.section-heading{padding:30px 24px 20px}.section-heading h1{font-size:1.4rem;margin:0;letter-spacing:-.04em;display:flex;align-items:center;justify-content:space-between}.section-number{font-size:.75rem;letter-spacing:0;color:#97a4af;font-weight:500}.section-heading .muted{margin:10px 0 0}.sidebar-section{padding:22px 24px;border-top:1px solid var(--line)}.sidebar-section h2{font-size:.875rem;font-weight:650;margin:0 0 14px}.view-buttons{display:flex;flex-direction:column;gap:8px}.view-buttons button{justify-content:flex-start}.view-buttons button:last-child{background:#eff7f4;color:#165c4e;border-color:#d3e7de}.section-title{display:flex;align-items:baseline;justify-content:space-between;gap:4px}.small-badge{font-size:.625rem;letter-spacing:.03em;color:#667681}.layer-toggle{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.875rem;cursor:pointer}.layer-toggle>span{display:flex;align-items:center;gap:8px}.layer-swatch{width:12px;height:12px;background:#15746022;border:1px solid var(--green)}.layer-toggle input{accent-color:var(--green);width:17px;height:17px}.selected-point{background:#f8fafb}.selected-point .eyebrow{margin-bottom:10px}.selected-point .muted{margin:0}#coordinates{font-size:1.05rem;letter-spacing:-.02em;font-variant-numeric:tabular-nums;display:block}#copy-point{font-size:.8125rem;width:100%}#copy-result{display:block;font-size:.75rem;margin-top:8px;color:var(--green)}.source-info{margin-top:auto}.source-info dl{margin:0;display:grid;gap:8px;grid-template-columns:52px 1fr;font-size:.75rem;line-height:1.6}.source-info dt{color:var(--muted)}.source-info dd{margin:0;overflow-wrap:anywhere}.sidebar-footer{padding:16px 20px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;font-size:.75rem;color:var(--muted)}.read-only{margin-left:auto}.map-area{position:relative;min-height:340px;background:#d3e2e9;overflow:hidden}#map{position:absolute;inset:0}.map-message{position:absolute;top:22px;left:50%;transform:translateX(-50%);max-width:calc(100% - 140px);background:#fff;padding:12px 18px;border:1px solid var(--line);border-radius:6px;box-shadow:0 3px 18px #14283918;font-size:.875rem;z-index:3;display:flex;align-items:center;gap:14px}.map-message[hidden],[hidden]{display:none!important}.map-message.error{border-left:4px solid #b45939}.map-caption{pointer-events:none;position:absolute;left:25px;top:25px;display:flex;gap:10px;align-items:center;color:#294455;text-shadow:0 1px 2px white;font-size:.75rem;letter-spacing:.2em;font-weight:700}.map-caption small{display:block;font-size:.625rem;margin-top:5px;letter-spacing:.14em}.caption-line{display:block;width:3px;height:30px;background:#294455}.map-bottom{position:absolute;bottom:36px;left:24px;right:55px;display:flex;justify-content:space-between;gap:12px;pointer-events:none;font-size:.6875rem;color:#213947}.map-bottom>span,.map-bottom output{background:#ffffffdf;padding:7px 10px;border-radius:4px}.maplibregl-ctrl-top-right{top:14px!important;right:14px!important}.maplibregl-ctrl-scale{margin-bottom:76px!important;margin-left:24px!important}.maplibregl-canvas:focus-visible{outline:3px solid #157460;outline-offset:-3px}.noscript{position:absolute;left:20px;top:90px;background:#fff;padding:20px}.auth-layout{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}.auth-intro{background-color:var(--navy);background-image:linear-gradient(#ffffff05 1px,transparent 1px),linear-gradient(90deg,#ffffff05 1px,transparent 1px),radial-gradient(ellipse at 70% 60%,#22564988,transparent 65%);background-size:64px 64px,64px 64px,100% 100%;color:#fff;padding:48px;display:flex;flex-direction:column;justify-content:space-between;min-height:640px}.intro-content{padding:80px 0}.intro-content .eyebrow{color:#8ed6c4}.intro-content h1{font-size:clamp(2rem,3.3vw,3.4rem);font-weight:500;letter-spacing:-.04em;line-height:1.16}.intro-content>p:last-child{color:#aec1cd;line-height:1.8;font-size:1rem}.intro-footer{display:flex;justify-content:space-between;gap:15px;font-size:.6875rem;letter-spacing:.13em;color:#aec1cd}.auth-card-wrap{display:flex;align-items:center;justify-content:center;padding:40px}.auth-card{width:100%;max-width:360px}.auth-card h2{font-size:2rem;letter-spacing:-.04em;margin:0 0 12px}.auth-form{display:flex;flex-direction:column;gap:10px;margin-top:30px}.auth-form label{font-size:.875rem;font-weight:600}.auth-form input:not([type=hidden]){display:block;width:100%;border:1px solid #c4d0d9;border-radius:6px;padding:12px;background:white;margin-bottom:12px;min-height:46px}.auth-form .primary{margin-top:10px;justify-content:space-between;min-height:46px}.auth-note{font-size:.8125rem;color:var(--muted);margin-top:28px}.form-error,.errorlist{color:#91361d;background:#fff0e9;border-radius:5px;padding:12px;font-size:.875rem;line-height:1.5}.message-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:30px}.message-card{max-width:500px;width:100%;line-height:1.7}.message-card h1{line-height:1.2;letter-spacing:-.03em}.message-card .auth-form p{margin:0}.helptext{font-size:.8125rem;color:var(--muted)}.auth-form ul{font-size:.8125rem;padding-left:20px}.back-link{display:block;margin-top:24px;font-size:.875rem}.auth-form p input{margin-top:8px}
.army-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.army-list li{font-size:.875rem}.army-select{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;text-align:left;border:1px solid transparent;background:transparent;padding:8px 10px;font-weight:400;border-radius:6px}.army-select strong{font-weight:650}.army-select span{color:var(--muted);font-size:.8125rem;font-variant-numeric:tabular-nums}.army-select.is-selected{background:#eff7f4;border-color:#d3e7de}.army-marker{width:16px;height:16px;border-radius:50%;background:#9a3b24;border:2px solid #fff;box-shadow:0 1px 4px #182a3b66;cursor:pointer}.army-marker.is-marching{box-shadow:0 0 0 4px #c45a3c55}.army-marker.is-halted{border-radius:2px;background:#6b4a12}.army-marker.is-fighting{background:#7a1f12;z-index:2;animation:army-battle-pulse 1.15s ease-out infinite}@keyframes army-battle-pulse{0%{box-shadow:0 0 0 0 #9a3b24cc}70%{box-shadow:0 0 0 14px #9a3b2400}100%{box-shadow:0 0 0 0 #9a3b2400}}@media (prefers-reduced-motion:reduce){.army-marker.is-fighting{animation:none;box-shadow:0 0 0 5px #9a3b24aa}}.retreat-army,.raise-army,.forward-army{margin:2px 0 8px 18px;padding:5px 10px;font-size:.75rem;font-weight:650}.battle-actions{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 8px 18px}.battle-actions .retreat-army,.battle-actions .forward-army{margin:0}.route-chip{position:absolute;z-index:3;left:50%;bottom:72px;transform:translateX(-50%);width:min(520px,calc(100% - 32px));background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:0 3px 18px #14283918;padding:12px 14px;display:flex;flex-direction:column;gap:8px}.route-chip p{margin:0;font-size:.875rem;line-height:1.45;padding-left:10px;border-left:4px solid transparent}.route-chip .route-v2{border-left-color:#9a3b24}.route-chip .route-v3{border-left-color:#1d4e89}.route-actions{display:flex;gap:8px;flex-wrap:wrap}.route-actions button{flex:1 1 140px}.route-chip .route-ends{border-left-color:transparent;padding-left:0;color:var(--muted);font-size:.8125rem;font-variant-numeric:tabular-nums}
@media(max-width:900px){.workspace{grid-template-columns:250px minmax(0,1fr)}.topbar{padding:0 18px;gap:20px}.environment{padding-left:20px}.sidebar-section{padding:18px}.section-heading{padding:25px 18px}.map-bottom>span{display:none}.map-caption{display:none}.auth-intro{padding:32px}.account{gap:12px}}
@media(max-width:640px){.route-chip{bottom:16px;width:min(520px,calc(100% - 24px))}.workspace{height:auto;min-height:100dvh;grid-template-columns:1fr;grid-template-rows:auto 65dvh auto}.topbar{grid-row:1;min-height:68px;padding:12px 16px;flex-wrap:wrap;gap:12px}.brand{font-size:.95rem}.environment{display:none}.user-name small{display:none}.account{gap:8px}.map-area{grid-row:2;min-height:360px}.sidebar{grid-row:3;display:grid;grid-template-columns:1fr 1fr;border-right:0}.section-heading,.sidebar-footer{grid-column:1/-1}.section-heading{padding:20px}.sidebar-section{padding:18px}.source-info{margin-top:0}.section-title{flex-wrap:wrap}.section-title h2{margin-bottom:8px}.small-badge{margin-bottom:12px}.map-message{max-width:calc(100% - 100px);left:16px;transform:none;flex-direction:column;align-items:flex-start}.auth-layout{grid-template-columns:1fr}.auth-intro{min-height:0;padding:24px}.intro-content,.intro-footer{display:none}.auth-card-wrap{padding:44px 24px}.auth-card{max-width:400px}.map-bottom{left:14px}.account-menu summary{font-size:.8125rem}.user-name{font-size:.8125rem}}
.graph-legend{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 10px;font-size:.75rem;color:var(--muted)}.graph-legend li{display:flex;align-items:center;gap:5px}.graph-swatch{width:14px;height:3px;border-radius:2px;display:inline-block}.graph-swatch.motorway{background:#c23b2e}.graph-swatch.trunk{background:#e07a2f}.graph-swatch.primary{background:#c9a227}.graph-swatch.secondary{background:#2f7d46}.graph-swatch.tertiary{background:#8aa36a}.graph-swatch.ferry{background:#2c6fad}.graph-swatch.bag{background:#d946ef}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
.player-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.player-block{display:flex;flex-direction:column;gap:4px}.army-sublist{list-style:none;margin:0;padding:0 0 0 12px;display:flex;flex-direction:column;gap:4px;border-left:2px solid var(--line)}.select-row{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:1px solid transparent;background:transparent;padding:7px 8px;font-weight:400;border-radius:6px}.select-row strong{font-weight:650}.select-row>span:not(.row-title){color:var(--muted);font-size:.8125rem;line-height:1.4;font-variant-numeric:tabular-nums}.select-row.is-selected{background:#eff7f4;border-color:#d3e7de}.row-title{display:flex;align-items:center;gap:8px;color:var(--ink);font-size:.875rem}.row-title strong{color:var(--ink);overflow-wrap:anywhere}.swatch{width:9px;height:9px;flex:none;display:inline-block}.swatch-base{background:#0f6e5c;transform:rotate(45deg)}.swatch-army{background:#9a3b24;border-radius:50%}.legend{display:flex;align-items:center;gap:6px;margin:0 0 12px;color:var(--muted);font-size:.75rem}.legend .swatch-army{margin-left:8px}.base-marker{width:18px;height:18px;background:#0f6e5c;border:2px solid #fff;box-shadow:0 1px 4px #182a3b66;transform:rotate(45deg);cursor:pointer}.base-marker.is-selected,.army-marker.is-selected{box-shadow:0 0 0 3px #101c2b,0 1px 4px #182a3b66}
@media(max-width:640px){.player-section{grid-column:1/-1}}

/* Player controls */
[hidden] { display: none !important; }
.admin-tools { border-left: 3px solid #c9a227; }
.admin-tools select { width: 100%; padding: .6rem; margin-top: .5rem; background: #fff; color: #262822; border: 1px solid #ccc; border-radius: 6px; }
dialog { width: min(420px, calc(100vw - 32px)); border: 1px solid #d3cec4; border-radius: 12px; padding: 24px; color: #262822; background: #faf8f2; box-shadow: 0 16px 60px #0004; }
dialog::backdrop { background: #0007; }
dialog input { display: block; width: 100%; margin: 12px 0; padding: 10px; box-sizing: border-box; }
.dialog-actions { display: flex; justify-content: flex-end; gap: 12px; margin-top: 20px; }

.base-marker.is-owned, .army-marker.is-owned { outline: 3px solid #3f9bce; outline-offset: 4px; }

.activity-list,.chat-messages {list-style:none;padding:0;max-height:280px;overflow:auto;overscroll-behavior:contain;}
.activity-list li,.chat-messages li {padding:8px 10px;border-bottom:1px solid var(--border,#ddd);}
.activity-list p,.chat-messages p {margin:4px 0;white-space:pre-wrap;overflow-wrap:anywhere;}
.activity-list .event-header {display:flex;align-items:center;justify-content:space-between;gap:10px;}
.activity-list .event-header time {font-size:.75rem;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;}
.activity-list .event-header button {flex:none;}
.chat-mine {background:rgba(52,130,180,.12);margin-left:20px;}
.chat-theirs {background:rgba(100,100,100,.08);margin-right:20px;}
#chat-text {width:100%;box-sizing:border-box;resize:vertical;}
#chat-peer,#march-mode {max-width:100%;}

.route-waypoint{width:28px;height:28px;border:2px solid #fff;border-radius:50%;background:#b45309;color:white;display:flex;align-items:center;justify-content:center;font-weight:700;box-shadow:0 1px 5px #0008}.route-points{font-size:12px;line-height:1.4}.route-chip .route-actions{flex-wrap:wrap}

/* Sidebar tabs */
.sidebar-tabs{display:flex;gap:4px;overflow-x:auto;padding:8px 12px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);flex:none}
.sidebar-tabs button{flex:none;border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;padding:10px 8px 8px;color:var(--muted);font-size:.8rem}
.sidebar-tabs button[aria-selected="true"]{border-bottom-color:var(--green);color:var(--green);background:#eff7f4}
.tab-panel{min-height:0;overflow-y:auto;flex:1}
.tab-panel[hidden]{display:none!important}
.tab-panel .sidebar-section:first-child{border-top:0}
@media(max-width:640px){.sidebar{display:flex}.section-heading,.sidebar-footer{grid-column:auto}.tab-panel{overflow:visible}.sidebar-tabs{position:sticky;top:0;background:#fff;z-index:2}}

.clear-selection{margin:8px 18px;align-self:flex-start}
.onboarding-layout{min-height:100vh;display:grid;grid-template-columns:minmax(320px,390px) 1fr}.onboarding-panel{padding:36px;background:#fff;overflow-y:auto;z-index:1}.onboarding-panel h1{margin-top:50px}.onboarding-panel p{line-height:1.6}.onboarding-brand{color:#157460;font-weight:800;letter-spacing:.2em;text-decoration:none}#onboarding-map{min-height:600px}.onboarding-panel form:last-child{margin-top:30px}@media(max-width:700px){.onboarding-layout{display:flex;flex-direction:column}.onboarding-panel{order:2}.onboarding-panel h1{margin-top:15px}#onboarding-map{order:1;min-height:48vh}}

.building-list { max-height: 55vh; overflow-y: auto; min-width: min(460px, 80vw); }
.building-row { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: .4rem 0; border-bottom: 1px solid #ffffff20; }
.building-row button { white-space: nowrap; }

.influence-details{padding:10px 12px;margin:8px 0;border:1px solid #b8d8cb;border-radius:8px;background:#f2f8f4;font-size:.82rem;line-height:1.5}
.influence-details p{margin:3px 0}.influence-details strong{font-variant-numeric:tabular-nums}
.base-marker{position:relative;border-radius:3px}
.base-marker::before{content:"";position:absolute;inset:-9px;border:3px solid var(--influence-color,#42a967);border-radius:50%;transform:rotate(-45deg);opacity:.8;pointer-events:none}
.base-marker::after{content:attr(data-efficiency);position:absolute;left:19px;top:-8px;transform:rotate(-45deg);padding:1px 4px;background:#fff;color:#183325;border:1px solid var(--influence-color,#42a967);border-radius:4px;font-size:10px;font-weight:700;white-space:nowrap}
.base-marker.is-influence-neighbor::before{border-width:5px;opacity:1}
.base-marker.influence-label-hidden::after{display:none}
/* Strategic map: faction control and military units take visual priority. */
.army-marker,.base-marker{position:relative;display:grid;place-items:center;box-sizing:border-box;cursor:pointer;color:#fff;transform:none;border:2px solid #e5e9e8;box-shadow:0 4px 14px #07121dbb,0 0 0 3px #081725aa;transition:filter .18s,scale .18s}
.base-marker{width:34px;height:34px;border-radius:8px;background:linear-gradient(145deg,#873c32,#2b1d23)}
.base-marker.is-owned{background:linear-gradient(145deg,#328fc0,#163b62)}
.base-marker::before{content:"▰";position:static;inset:auto;transform:none;border:0;border-radius:0;color:#fff;font-size:22px;line-height:1;opacity:1}
.base-marker::after{content:attr(data-map-label);position:absolute;top:39px;left:50%;transform:translateX(-50%);padding:4px 8px;border:1px solid #7190a4;background:#0d1a28e8;color:#f5f1e7;border-radius:4px;font-size:10px;font-weight:750;letter-spacing:.035em;white-space:nowrap;box-shadow:0 2px 8px #0008}
.army-marker{width:40px;height:40px;border-radius:12px;background:linear-gradient(145deg,#c35e47,#5e2730)}
.army-marker.is-owned{background:linear-gradient(145deg,#48a8d7,#1d4d82)}
.army-marker::before{content:"◆";font-size:19px;line-height:1;text-shadow:0 1px 4px #0008}
.army-marker::after{content:attr(data-strength);position:absolute;top:33px;left:50%;transform:translateX(-50%);min-width:29px;padding:2px 5px;border:1px solid #fff8;border-radius:4px;background:#101d2a;color:white;text-align:center;font:800 10px/1.2 system-ui,sans-serif}
.army-marker.is-marching{box-shadow:0 4px 14px #07121dbb,0 0 0 5px #f4c66b77}
.army-marker.is-fighting{z-index:3;background:linear-gradient(145deg,#ffae56,#a82f28);animation:army-battle-pulse 1.2s ease-out infinite}
.army-marker.is-fighting::before{content:"⚔";font-size:23px}
.army-marker.is-halted{border-radius:12px}
.army-marker.is-selected,.base-marker.is-selected{box-shadow:0 0 0 4px #ffe296,0 6px 18px #000b}
.base-marker.is-owned,.army-marker.is-owned{outline:0}
.base-marker.influence-label-hidden::after{display:none}
@keyframes army-battle-pulse{0%,100%{box-shadow:0 0 0 4px #fb693e88,0 0 18px #e54b2d99}50%{box-shadow:0 0 0 17px #fb693e00,0 0 32px #e54b2dcc}}
@media(prefers-reduced-motion:reduce){.army-marker.is-fighting{animation:none;box-shadow:0 0 0 6px #fb693e99}}

/* Clan identity on the strategic map. */
.base-marker,.base-marker.is-owned,.army-marker,.army-marker.is-owned{background:linear-gradient(145deg,var(--faction-color,#a6b0bb),color-mix(in srgb,var(--faction-color,#a6b0bb) 52%,#102030))}
.radar-lost-marker { width: 28px; height: 28px; border: 2px dashed #a9b3bf; border-radius: 50%; background: #343e4b; color: #e3e7ec; opacity: .8; cursor: pointer; font-weight: 700; }
.radar-details { color: #8ecfe2; line-height: 1.5; }

.language-switch{display:flex;align-items:center;gap:6px;color:inherit;font-size:.8rem;white-space:nowrap}.language-switch select{font:inherit;padding:5px;border:1px solid #728395;border-radius:5px;background:#fff;color:#182a3b}.language-switch--standalone{position:absolute;right:20px;top:18px;z-index:20;color:#182a3b}.language-switch noscript button{padding:5px 8px}.guest-header .language-switch{margin-left:auto}@media(max-width:760px){.game-shell .language-switch label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.game-shell .language-switch select{padding:4px;font-size:.75rem}}
