:root{--ink:#3b2a1a;--ink-soft:#6b5338;--parchment:#f1e4c3;--parchment-deep:#e3cf9f;--gold:#c9a24a;--font-body:"IM Fell English", Georgia, serif;--font-sc:"IM Fell English SC", Georgia, serif;--font-display:"Cinzel", Georgia, serif}*{box-sizing:border-box}html,body{height:100%;color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;overscroll-behavior:none;background:#2a2016;margin:0;overflow:hidden}#app{position:fixed;inset:0}.stage{background:radial-gradient(#3a2d1f 0%,#1f170f 100%);position:absolute;inset:0}.vignette{pointer-events:none;background:radial-gradient(#0000 55%,#1e120661 100%);position:absolute;inset:0}.map-stage{touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;overflow:hidden}.map-stage.is-dragging{cursor:grabbing}.world{transform-origin:0 0;will-change:transform;position:absolute;top:0;left:0}.layer{will-change:transform;pointer-events:none;position:absolute;top:-16px;left:-16px;overflow:visible}.world.reraster,.world.reraster .layer{will-change:auto}.layer-overlay .hit{pointer-events:all}.sym-scale{transform:scale(var(--sym-scale,1));transition:transform .25s}.rhumbs{stroke:var(--ink);stroke-width:.6px;stroke-opacity:.11;fill:none}.coast path{fill:none;stroke-linejoin:round}.ripple{stroke:#5c6a57}.ripple-gap{stroke:#c3cbb0}.w4{stroke-width:30px;stroke-opacity:.25}.w4g{stroke-width:28.4px}.w3{stroke-width:20px;stroke-opacity:.38}.w3g{stroke-width:18.4px;stroke:#c9d0b5}.w2{stroke-width:11px;stroke-opacity:.5}.w2g{stroke-width:9.6px;stroke:#d0d5ba}.w1{stroke-width:4px;stroke:#a9b597;stroke-opacity:.9}.land{fill:#ecd7a4}.coastline{fill:none;stroke:var(--ink);stroke-width:1.7px;stroke-linejoin:round;stroke-opacity:.9}.tint{transition:color .5s}.tint path{fill:none;stroke:currentColor;stroke-linejoin:round}.tint .tint-fill{fill:currentColor;fill-opacity:.13;stroke:none;transition:fill-opacity .4s}.tint .r1{stroke-width:22px;stroke-opacity:.08}.tint .r2{stroke-width:11px;stroke-opacity:.14}.tint .r3{stroke-width:4px;stroke-opacity:.3}.demo .tint .tint-fill{fill-opacity:.4}.demo .tint .r1{stroke-opacity:.22}.demo .tint .r2{stroke-opacity:.32}.demo .tint .r3{stroke-opacity:.7}.continent-rim{fill:none;stroke:currentColor;stroke-width:7px;stroke-opacity:.32;stroke-linejoin:round}.demo .continent-rim{stroke-opacity:.12}.borders path{fill:none;stroke:var(--ink);stroke-width:1.15px;stroke-opacity:.62;stroke-dasharray:5 1.6 1.4 1.6;stroke-linejoin:round}.lane path{fill:none}.lane-under{stroke:#efe5c8;stroke-width:4.2px;stroke-opacity:.55}.lane-line{stroke:var(--ink);stroke-width:1.6px;stroke-dasharray:6 4.5;stroke-opacity:.75;stroke-linecap:round}.lane-dot,.lane-arrow{fill:var(--ink);fill-opacity:.8}.lane-caption{font-family:var(--font-body);fill:var(--ink);fill-opacity:.8;font-size:10px;font-style:italic}.lane.active .lane-line{stroke:#8a2d14;stroke-width:2.4px;stroke-opacity:1}.lane.active .lane-under{stroke:#fff3cf;stroke-opacity:.9;stroke-width:6px}.hit{fill:#0000;stroke:#0000;cursor:pointer;stroke-linejoin:round}.has-focus .hit{fill:#28180829}.has-focus .hit.focus{fill:#fff4d638;stroke:#fff6dc;stroke-width:3.2px}.has-focus .hit.neighbour{fill:#ffeebe12;stroke:#f0c859;stroke-width:2.2px;stroke-dasharray:7 4}.hit.selected{filter:url(#glow);stroke:#ffe8a3!important;stroke-width:4.2px!important;stroke-dasharray:none!important}.lane{pointer-events:none}.badge-inner{transform-box:fill-box;transform-origin:50%;transition:transform .18s}.badge.focus .badge-inner{transform:scale(1.22)}.badge.neighbour .badge-inner{transform:scale(1.08)}.badge-disc{fill:#f4ead0;stroke:var(--ink);stroke-width:1.5px}.badge.owned .badge-disc{fill:currentColor}.badge-shine{fill:none;stroke:#fff;stroke-width:1.2px;stroke-opacity:.35;stroke-dasharray:14 60;stroke-dashoffset:-34px}.badge-num{font-family:var(--font-display);text-anchor:middle;fill:var(--ink);font-size:12.5px;font-weight:800}.badge.owned .badge-num{fill:#fff;paint-order:stroke;stroke:#1e12068c;stroke-width:1.6px}.t-label{font-family:var(--font-sc);text-anchor:middle;fill:var(--ink);paint-order:stroke;stroke:#f6ecd2e6;stroke-width:3px;stroke-linejoin:round;letter-spacing:.02em;font-size:11px}.c-label{font-family:var(--font-display);letter-spacing:.3em;fill:currentColor;opacity:.85;paint-order:stroke;stroke:#f0e6c8bf;stroke-width:3px;font-size:24px;font-weight:800}.c-bonus{font-family:var(--font-body);fill:var(--ink);fill-opacity:.7;letter-spacing:.08em;font-size:11px;font-style:italic}.o-label{font-family:var(--font-body);fill:#3f4d43;fill-opacity:.6;letter-spacing:.35em;font-style:italic}.o-label.minor{letter-spacing:.18em}.zoomed-out .o-label.minor{fill-opacity:0}.o-label{transition:fill-opacity .3s}.compass-n{font-family:var(--font-display);fill:#6a2f22;font-weight:800}.cartouche-title{font-family:var(--font-display);letter-spacing:.22em;fill:#6a2f22;font-size:24px;font-weight:800}.cartouche-sub{font-family:var(--font-body);fill:var(--ink);letter-spacing:.1em;font-size:10px;font-style:italic}#paper{mix-blend-mode:multiply;opacity:.75}.frame-outer{fill:none;stroke:var(--ink);stroke-width:2.2px}.frame-inner{fill:none;stroke:var(--ink);stroke-width:1.4px}.frame-ticks rect{fill:var(--ink);fill-opacity:.85}.panel{border:1.5px solid var(--ink);background:radial-gradient(at 30% 20%,#fffaeba6,#0000 60%),linear-gradient(160deg,#f4e8ca,#e6d3a6);border-radius:6px;position:absolute;box-shadow:inset 0 0 0 3px #f1e4c3e6,inset 0 0 0 4px #3b2a1a59,0 8px 24px #140c0459}.brand{align-items:center;gap:12px;padding:10px 18px 10px 12px;display:flex;top:16px;left:16px}.brand-mark{color:#6a2f22;width:40px;height:40px}.brand-mark svg{width:100%;height:100%}.brand h1{font-family:var(--font-display);letter-spacing:.2em;color:#5a2518;margin:0;font-size:22px;font-weight:800;line-height:1}.brand p{color:var(--ink-soft);margin:4px 0 0;font-size:13px;font-style:italic}.controls{align-items:center;gap:14px;padding:10px 14px;font-size:15px;display:flex;top:16px;right:16px}.switch{cursor:pointer;font-family:var(--font-sc);align-items:center;gap:9px;font-size:16px;display:inline-flex}.switch input{opacity:0;pointer-events:none;position:absolute}.switch-track{border:1.5px solid var(--ink);background:#cdb98d;border-radius:11px;width:40px;height:22px;transition:background .2s;position:relative}.switch-thumb{border:1.5px solid var(--ink);background:#f7eedb;border-radius:50%;width:15px;height:15px;transition:transform .2s;position:absolute;top:2px;left:2px}.switch input:checked+.switch-track{background:#2f6db3}.switch input:checked+.switch-track .switch-thumb{transform:translate(18px)}.switch input:focus-visible+.switch-track{outline:2px solid var(--gold);outline-offset:2px}.segmented{border:1.5px solid var(--ink);border-radius:5px;display:inline-flex;overflow:hidden}.segmented button,.btn,.zoom button,.chip,.info-close{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}.segmented button{font-family:var(--font-display);padding:4px 10px;font-size:13px;font-weight:600}.segmented button+button{border-left:1px solid #3b2a1a80}.segmented button.active{background:var(--ink);color:var(--parchment)}.segmented button:disabled,.btn:disabled{opacity:.4;cursor:default}.btn{border:1.5px solid var(--ink);font-family:var(--font-sc);background:#fffaeb80;border-radius:5px;padding:5px 12px;font-size:15px}.btn:not(:disabled):hover{background:#fff6dd}.legend{min-width:190px;padding:10px 16px 12px;bottom:16px;left:16px}.legend h3{font-family:var(--font-display);letter-spacing:.25em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 6px;font-size:12px;font-weight:600}.legend ul{gap:3px;margin:0;padding:0;list-style:none;display:grid}.legend li{align-items:center;gap:8px;font-size:15px;display:flex}.legend li .muted{margin-left:auto;padding-left:10px}.dot{border:1.2px solid var(--ink);border-radius:50%;flex:none;width:11px;height:11px;display:inline-block}.muted{color:var(--ink-soft);font-style:italic}.zoom{padding:4px;display:grid;bottom:16px;right:16px}.zoom button{width:36px;height:34px;font-size:22px;line-height:1;font-family:var(--font-display);border-radius:4px}.zoom button:hover{background:#fffaebcc}.zoom button+button{border-top:1px solid #3b2a1a4d}.hint{color:#f1e4c3;text-shadow:0 1px 3px #000c;pointer-events:none;opacity:.85;white-space:nowrap;margin:0;font-size:14px;font-style:italic;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.info-card{opacity:0;pointer-events:none;width:320px;padding:16px 18px 14px;transition:opacity .2s,transform .2s;top:84px;right:16px;transform:translateY(-8px)}.info-card.open{opacity:1;pointer-events:auto;transform:none}.info-close{color:var(--ink-soft);font-size:24px;line-height:1;position:absolute;top:6px;right:10px}.info-close:hover{color:var(--ink)}.info-continent{font-family:var(--font-sc);align-items:center;gap:7px;font-size:14px;display:flex}.info-continent .dot{background:var(--c)}.info-continent .muted{font-family:var(--font-body);font-size:13px}.info-title{font-family:var(--font-display);letter-spacing:.06em;color:#4a2316;margin:4px 0 8px;font-size:24px;font-weight:800}.info-owner{border-bottom:1px dashed #3b2a1a66;align-items:center;gap:8px;padding:6px 0 8px;font-size:15px;display:flex}.info-armies{color:#fff;min-width:30px;height:30px;font-family:var(--font-display);border:1.5px solid var(--ink);border-radius:50%;place-items:center;margin-left:auto;font-weight:800;display:grid}.info-section{font-family:var(--font-display);letter-spacing:.22em;text-transform:uppercase;color:var(--ink-soft);margin:10px 0 6px;font-size:11px;font-weight:600}.chips{flex-wrap:wrap;gap:5px;display:flex}.chip{background:#fffaeb8c;border:1px solid #3b2a1a8c;border-radius:999px;align-items:center;gap:6px;padding:3px 9px 3px 6px;font-size:14px;display:inline-flex}.chip:hover{border-color:var(--ink);background:#fff6dd}.sea-mark{color:#3d6378;margin-left:2px;font-size:15px}.info-foot{margin-top:10px;font-size:12px}@media (width<=760px){.brand{gap:8px;padding:6px 12px 6px 8px;top:10px;left:10px}.brand-mark{width:28px;height:28px}.brand h1{font-size:16px}.brand p{display:none}.controls{flex-wrap:wrap;justify-content:space-between;gap:8px;padding:8px 10px;inset:auto 64px 10px 10px}.switch{font-size:14px}.legend{min-width:0;padding:6px 10px;inset:10px 10px auto auto}.legend h3{display:none}.legend li{font-size:12px}.legend li .muted{display:none}.zoom{bottom:10px;right:10px}.hint{display:none}.info-card{width:auto;max-height:50vh;inset:auto 10px 112px;overflow:auto;transform:translateY(12px)}}
