@font-face{font-family:BVP;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/be-vietnam-pro-vietnamese-400-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:BVP;font-style:normal;font-weight:400;font-display:swap;src:url(fonts/be-vietnam-pro-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:BVP;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/be-vietnam-pro-vietnamese-500-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:BVP;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/be-vietnam-pro-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:BVP;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/be-vietnam-pro-vietnamese-700-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:BVP;font-style:normal;font-weight:700;font-display:swap;src:url(fonts/be-vietnam-pro-latin-700-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:BVP;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/be-vietnam-pro-vietnamese-800-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:BVP;font-style:normal;font-weight:800;font-display:swap;src:url(fonts/be-vietnam-pro-latin-800-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Lora;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/lora-vietnamese-400-italic.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:Lora;font-style:italic;font-weight:400;font-display:swap;src:url(fonts/lora-latin-400-italic.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Lora;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/lora-vietnamese-500-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:Lora;font-style:normal;font-weight:500;font-display:swap;src:url(fonts/lora-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Lora;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/lora-vietnamese-600-normal.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}
@font-face{font-family:Lora;font-style:normal;font-weight:600;font-display:swap;src:url(fonts/lora-latin-600-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{color-scheme:light;--paper:#EFE8DA;--paper2:#F7F2E7;--ink:#1B1A17;--ink2:#3A372F;--mute:#6B655A;--rule:#1B1A1733;--rule2:#1B1A1714;--red:#BC301B;--jade:#1F5C4A;--sea:#DCE3DE;--ochre:#D9A441;--dot:#1B1A170D;--grid:#1B1A1712;--shadow:#1B1A1726;--tipmute:#BDB6A6;--redbg:#C8341E0A;--jadebg:#1F5C4A0D;--amber:#8A6A1F;--focus:#C8341E;
--serif:Lora,"Noto Serif",Georgia,serif;--disp:BVP,system-ui,sans-serif;--sans:BVP,system-ui,-apple-system,"Segoe UI",sans-serif}
:root[data-theme=dark]{color-scheme:dark;--paper:#17160F;--paper2:#201E17;--ink:#EDE6D6;--ink2:#CFC7B5;--mute:#A39C8B;--rule:#EDE6D640;--rule2:#EDE6D61A;--red:#F0613F;--jade:#6FBFA0;--sea:#1C2A2B;--ochre:#C99A3C;--dot:#EDE6D60A;--grid:#EDE6D60E;--shadow:#00000066;--tipmute:#8A8373;--redbg:#F0613F14;--jadebg:#6FBFA014;--amber:#D7B35A;--focus:#F0613F}
*{box-sizing:border-box;margin:0}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
html,body{height:100%}
body{background:var(--paper);color:var(--ink);font:16px/1.6 var(--sans);-webkit-font-smoothing:antialiased;
background-image:radial-gradient(var(--dot) 1px,transparent 1px);background-size:4px 4px}
a{color:inherit}
.seo{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
::selection{background:var(--red);color:var(--paper)}
/* masthead */
.mast{height:72px;display:grid;grid-template-columns:auto 1fr auto;align-items:stretch;border-bottom:2px solid var(--ink);background:var(--paper)}
.brand{display:flex;align-items:center;gap:10px;padding:0 20px 0 16px;text-decoration:none;border-right:1px solid var(--ink)}
.brand-n{font:900 46px/1 var(--disp);letter-spacing:-2px;position:relative}
.brand-n::after{content:"";position:absolute;right:-7px;top:2px;width:8px;height:8px;background:var(--red)}
.brand-t{font:700 10px/1.15 var(--sans);text-transform:uppercase;letter-spacing:.14em}
.tabs{display:flex;align-items:stretch}
.tabs a{display:flex;align-items:center;padding:0 22px;text-decoration:none;font:700 12px var(--sans);text-transform:uppercase;letter-spacing:.16em;border-right:1px solid var(--rule);position:relative;transition:color .2s}
.tabs a::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:5px;background:var(--red);transform:scaleX(0);transform-origin:left;transition:transform .35s cubic-bezier(.2,.8,.2,1)}
.tabs a[aria-selected=true]::after{transform:scaleX(1)}
.tabs a:hover{color:var(--red)}
.mast-meta{display:flex;flex-direction:column;justify-content:center;padding:0 20px;border-left:1px solid var(--ink);font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:var(--mute)}
.mast-meta b{font:700 18px var(--disp);color:var(--ink);letter-spacing:0}
/* stage */
.stage{display:grid;grid-template-columns:minmax(0,1fr) min(520px,42vw);height:calc(100dvh - 72px)}
.map-wrap{position:relative;background:var(--sea);border-right:2px solid var(--ink);overflow:hidden}
#map{position:absolute;inset:0}
.map-wrap::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
background:repeating-linear-gradient(0deg,transparent 0 59px,var(--grid) 59px 60px),repeating-linear-gradient(90deg,transparent 0 59px,var(--grid) 59px 60px)}
.map-legend{position:absolute;left:14px;bottom:14px;z-index:2;background:var(--paper);border:1px solid var(--ink);padding:6px 10px;font:700 10px var(--sans);text-transform:uppercase;letter-spacing:.12em;display:flex;align-items:center;gap:6px}
.sw{display:inline-block;width:12px;height:12px;border:1px solid var(--ink)}.sw-m{background:var(--ochre)}.sw-k{background:var(--paper2);margin-left:8px}
.map-back{position:absolute;top:14px;left:14px;z-index:2;background:var(--ink);color:var(--paper);border:0;padding:10px 14px;font:700 12px var(--sans);letter-spacing:.1em;text-transform:uppercase;cursor:pointer}
.map-back:hover{background:var(--red)}
.tip{position:absolute;z-index:3;pointer-events:none;background:var(--ink);color:var(--paper);padding:6px 10px;font-size:13px;transform:translate(12px,-50%);white-space:nowrap}
.tip small{display:block;color:var(--tipmute);font-size:11px}
.lbl{font:700 10px/1.1 var(--sans);text-transform:uppercase;letter-spacing:.12em;color:var(--ink);text-shadow:0 0 3px var(--paper2),0 0 3px var(--paper2),0 0 6px var(--paper2);pointer-events:none;text-align:center;white-space:nowrap}
.lbl.sm{font-size:8.5px;letter-spacing:.08em}
.lbl-isl{font:italic 400 13px/1.15 var(--serif);text-transform:none;letter-spacing:0;color:var(--jade);text-shadow:0 0 4px var(--sea),0 0 4px var(--sea);text-align:left}
.lbl-isl b{display:block;font:700 9px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.lbl-sea{font:italic 400 22px var(--serif);color:#5d7a72;letter-spacing:.3em;text-shadow:none}
.maplibregl-ctrl-group{border-radius:0!important;border:1px solid var(--ink);box-shadow:none!important}
.maplibregl-ctrl-attrib{font-size:10px;background:color-mix(in srgb,var(--paper) 80%,transparent)!important}
/* folio */
.folio{overflow-y:auto;background:var(--paper);overscroll-behavior:contain;scroll-behavior:smooth;outline:0}
.folio>*{animation:rise .55s cubic-bezier(.2,.8,.2,1) both}
.folio>*:nth-child(2){animation-delay:.05s}.folio>*:nth-child(3){animation-delay:.1s}.folio>*:nth-child(4){animation-delay:.15s}.folio>*:nth-child(5){animation-delay:.2s}.folio>*:nth-child(n+6){animation-delay:.25s}
@keyframes rise{from{opacity:0;transform:translateY(14px)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.sec{padding:22px 28px;border-bottom:1px solid var(--ink)}
.kicker{font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.18em;color:var(--red);display:flex;justify-content:space-between;gap:10px}
.kicker span:last-child{color:var(--mute)}
.h-xl{font:800 clamp(40px,5.4vw,68px)/1.08 var(--disp);letter-spacing:-.025em;margin:14px 0 10px}
.h-l{font:700 32px/1 var(--disp);letter-spacing:-.01em;margin:10px 0}
.h-s{font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.18em;margin-bottom:12px;display:flex;align-items:baseline;gap:10px}
.h-s::after{content:"";flex:1;border-bottom:1px solid var(--rule)}
.lede{font:italic 400 18px/1.6 var(--serif);color:var(--ink2)}
.merge{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:14px}
.merge .op{font:400 22px var(--serif);color:var(--red)}
.merge .old{font:700 13px var(--sans);border:1.5px solid var(--ink);padding:4px 10px;background:var(--paper2)}
.merge .eq{font:400 22px var(--serif);color:var(--mute);margin:0 2px}
.merge .new{font:700 13px var(--sans);background:var(--ink);color:var(--paper);padding:5.5px 11px}
.stats{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--ink)}
.stat{padding:16px 18px 18px 28px;border-right:1px solid var(--rule)}.stat:last-child{border-right:0}
.stat .v{font:700 30px/1 var(--disp);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.stat .v small{font:400 13px var(--sans);color:var(--mute);margin-left:3px}
.stat .k{font:700 10px var(--sans);text-transform:uppercase;letter-spacing:.14em;color:var(--mute);margin-top:6px}
.stat .src{font-size:10px;color:var(--mute);margin-top:4px}
.src a,.srcl{color:var(--mute);text-underline-offset:2px}
.leaders{display:grid;grid-template-columns:1fr 1fr;gap:0}
.leader{padding:4px 16px 4px 0}
.leader+.leader{padding-left:16px;border-left:1px solid var(--rule)}
.leader .role{font:700 10px var(--sans);text-transform:uppercase;letter-spacing:.14em;color:var(--mute)}
.leader .nm{font:700 22px/1.15 var(--disp);margin:6px 0 8px}
.stamp{display:inline-block;font:700 9.5px var(--sans);text-transform:uppercase;letter-spacing:.14em;padding:3px 6px;border:1.5px solid currentColor;transform:rotate(-2deg)}
.stamp.ok{color:var(--jade)}.stamp.warn{color:var(--red)}.stamp.mid{color:var(--amber)}
.meta{font-size:11.5px;color:var(--mute);margin-top:6px;line-height:1.45}
.fact{padding:10px 0;border-top:1px dashed var(--rule)}.fact:first-of-type{border-top:0}
.fact p{font:400 16px/1.65 var(--sans)}
.fact.sum p{font:400 17px/1.7 var(--serif)}
.fact.sum p::first-letter{font:800 44px/1 var(--disp);float:left;margin:4px 8px 0 0;color:var(--red)}
.search{display:flex;border:1.5px solid var(--ink);background:var(--paper2)}
.search input{flex:1;border:0;background:transparent;font:400 16px/1.4 var(--sans);padding:12px 14px;outline:0;color:var(--ink);min-width:0}
.search .n{font:700 11px var(--sans);padding:0 12px;display:flex;align-items:center;color:var(--mute);border-left:1px solid var(--rule)}
.filt{display:flex;gap:0;margin:10px 0 4px}
.filt button{font:700 10.5px var(--sans);letter-spacing:.12em;text-transform:uppercase;background:none;border:1px solid var(--ink);padding:6px 10px;cursor:pointer;margin-right:-1px;color:var(--ink)}
.filt button[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.wards{columns:2;column-gap:20px;margin-top:10px;padding:0;list-style:none}
.wards li{line-height:1.45;break-inside:avoid;display:flex;gap:8px;align-items:baseline;padding:5px 0;border-bottom:1px solid var(--rule2);cursor:pointer;font-size:14px}
.wards li:hover{color:var(--red)}
.wards li .t{font:700 9px var(--sans);color:var(--mute);text-transform:uppercase;letter-spacing:.06em;width:16px;flex:none}
.wards li .c{margin-left:auto;font-size:10px;color:var(--mute);font-variant-numeric:tabular-nums}
.wards li.on{color:var(--red);font-weight:700}
/* index */
.idx{list-style:none;padding:0}
.idx li a{display:grid;grid-template-columns:44px 1fr auto;gap:12px;align-items:baseline;padding:12px 28px;border-bottom:1px solid var(--rule);text-decoration:none;transition:background .2s,padding .25s}
.idx li a:hover{background:var(--paper2);padding-left:34px}
.idx .no{font:700 13px var(--sans);color:var(--mute);font-variant-numeric:tabular-nums}
.idx .nm{font:700 22px/1.1 var(--disp)}
.idx .ol{display:block;font:400 12px var(--sans);color:var(--mute);margin-top:3px}
.idx .ct{font:700 12px var(--sans);font-variant-numeric:tabular-nums;text-align:right}
.idx .ct small{display:block;font-weight:400;color:var(--mute);font-size:10.5px}
.idx .mk{display:inline-block;width:8px;height:8px;background:var(--ochre);border:1px solid var(--ink);margin-right:6px;vertical-align:1px}
/* converter */
.seg{display:grid;grid-template-columns:1fr 1fr;border:1.5px solid var(--ink);margin:16px 0}
.seg button{font:700 12px var(--sans);text-transform:uppercase;letter-spacing:.12em;padding:12px;background:none;border:0;cursor:pointer;color:var(--ink)}
.seg button+button{border-left:1.5px solid var(--ink)}
.seg button[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.ac{position:relative}
.ac ul{list-style:none;padding:0;position:absolute;left:0;right:0;top:100%;background:var(--paper2);border:1.5px solid var(--ink);border-top:0;z-index:5;max-height:340px;overflow:auto}
.ac li{padding:10px 14px;border-top:1px solid var(--rule);cursor:pointer}
.ac li[aria-selected=true],.ac li:hover{background:var(--ink);color:var(--paper)}
.ac li small{display:block;opacity:.7;font-size:12px}
.ac li .sp{float:right;font:700 9.5px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--red)}
.ac li[aria-selected=true] .sp{color:var(--ochre)}
.street{margin-top:10px}
.result{margin-top:18px}
.addr-old{font:400 15px var(--sans);color:var(--mute);text-decoration:line-through;text-decoration-color:var(--red);text-decoration-thickness:1.5px}
.arrow{font:400 30px/1 var(--serif);color:var(--red);margin:8px 0}
.cand{border:1.5px solid var(--ink);padding:14px 16px;margin-top:-1.5px;background:var(--paper2);position:relative}
.cand.def{border-left:8px solid var(--red)}
.cand .nm{font:700 24px/1.15 var(--disp)}
.cand .pv{font-size:14px;color:var(--ink2)}
.cand .acts{display:flex;gap:14px;margin-top:10px;font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.12em}
.cand .acts a,.cand .acts button{background:none;border:0;padding:0;cursor:pointer;color:var(--ink);text-decoration:underline;text-underline-offset:3px;font:inherit}
.cand .tag{position:absolute;right:12px;top:12px}
.warnbox{border:1.5px solid var(--red);color:var(--red);padding:10px 14px;font-size:13.5px;margin:10px 0;background:var(--redbg)}
.warnbox b{font-family:var(--serif);font-size:16px}
.olds{list-style:none;padding:0;margin-top:10px}
.olds li{padding:8px 0;border-bottom:1px solid var(--rule);display:flex;justify-content:space-between;gap:10px;font-size:14px}
.olds li small{color:var(--mute)}
.btn{font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.14em;background:var(--ink);color:var(--paper);border:0;padding:10px 14px;cursor:pointer}
.btn:hover{background:var(--red)}
.foot{padding:20px 28px 40px;font-size:11.5px;color:var(--mute);line-height:1.6}
.foot a{color:var(--mute)}
.big-n{font:800 120px/.8 var(--disp);letter-spacing:-.04em;color:var(--red)}
.hero-grid{display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:end}
.hero-grid p{font:italic 400 17px/1.6 var(--serif)}
/* mobile */
@media (max-width:860px){
 .mast{height:auto;grid-template-columns:1fr auto;grid-template-rows:56px 44px}
 .brand{border-right:0}.brand-n{font-size:36px}
 .mast-meta{border-left:1px solid var(--ink);padding:0 14px}
 .tabs{grid-column:1/-1;border-top:1px solid var(--ink)}.tabs a{flex:1;justify-content:center;padding:0 6px;font-size:11px;letter-spacing:.1em}
 .stage{display:block;height:auto}
 .map-wrap{height:56vh;height:56svh;border-right:0;border-bottom:2px solid var(--ink);position:sticky;top:0;z-index:0}
 .folio{overflow:visible;position:relative;z-index:1;background:var(--paper)}
 .sec{padding:18px 18px}.stat{padding:14px 10px 14px 18px}.stat .v{font-size:23px}
 .idx li a{padding:12px 18px}.wards{columns:1}
 .leaders{grid-template-columns:1fr}.leader+.leader{padding-left:0;border-left:0;border-top:1px solid var(--rule);padding-top:12px;margin-top:8px}
 .big-n{font-size:88px}
}
.map-wrap.in .lbl:not(.lbl-isl):not(.lbl-sea){display:none}

.cand .chead{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px;flex-wrap:wrap}
.cand .kick{font:700 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.cand.def .kick{color:var(--red)}
.cand .nm{overflow-wrap:anywhere}
.method{border-left:3px solid var(--jade);padding:6px 12px;margin:0 0 10px;font-size:13.5px;background:var(--jadebg)}
.method b{color:var(--jade)}
.legal{margin-top:8px;font-size:13px}.legal summary{cursor:pointer;font-weight:700;font-size:12px;color:var(--jade)}
.legal p{margin:6px 0;font:400 13.5px/1.5 var(--serif);border-left:2px solid var(--rule);padding-left:10px}
.others{margin-top:12px}.others>summary{cursor:pointer;font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.12em;padding:8px 0}
.pickers{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 12px}.btn.ghost{background:var(--paper);color:var(--ink);outline:1.5px solid var(--ink);outline-offset:-1.5px}
.btn.ghost:hover{background:var(--ink);color:var(--paper)}
.map-wrap.picking #map canvas{cursor:crosshair!important}
.pickhint{position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:4;background:var(--red);color:var(--paper);padding:8px 14px;font:700 12px var(--sans);letter-spacing:.08em;animation:rise .3s}
.cand .acts button,.cand .acts a{font:700 11px var(--sans)!important;text-transform:uppercase;letter-spacing:.12em}
button{font-family:var(--sans)}
.cand .nm,.leader .nm,.idx .nm{line-height:1.25}
.meta{font-size:12.5px}

.lyr{position:absolute;right:52px;top:10px;z-index:3}
.lyr-b{background:var(--paper);border:1px solid var(--ink);font:700 11px var(--sans);text-transform:uppercase;letter-spacing:.12em;padding:8px 10px;cursor:pointer}
.lyr-p{margin-top:4px;background:var(--paper);border:1.5px solid var(--ink);padding:8px 12px;display:grid;gap:6px;font-size:13.5px;min-width:190px}
.lyr-p label{display:flex;gap:8px;align-items:center;cursor:pointer}
.msearch{position:absolute;left:14px;top:12px;z-index:3;width:min(340px,calc(100% - 110px))}
.msearch input{width:100%;border:1.5px solid var(--ink);background:var(--paper2);font:400 15px var(--sans);padding:9px 12px;outline:0}
.msearch ul{list-style:none;padding:0;margin:0;background:var(--paper2);border:1.5px solid var(--ink);border-top:0;max-height:300px;overflow:auto}
.msearch li{padding:8px 12px;border-top:1px solid var(--rule);cursor:pointer;font-size:14px}.msearch li:hover{background:var(--ink);color:var(--paper)}
.msearch li small{display:block;font-size:11.5px;opacity:.7}
.pinfo .maplibregl-popup-content{border-radius:0;border:1.5px solid var(--ink);background:var(--paper);padding:12px 14px;font-family:var(--sans);box-shadow:4px 4px 0 var(--shadow)}
.pinfo .kick{font:700 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--red)}
.pinfo .pn{font:800 19px/1.25 var(--disp);margin:4px 0 2px}.pinfo .pp{font-size:13.5px;margin-bottom:6px}
.pinfo ul{margin:4px 0 6px;padding-left:16px;font-size:13px}.pinfo i{color:var(--mute)}
.maplibregl-ctrl-top-right{top:0}
.map-back{top:60px!important}
@media (max-width:860px){.msearch{width:calc(100% - 120px)}.lyr{right:48px}}
.lyr-p[hidden]{display:none}

/* ---- theme toggle ---- */
.theme-b{background:none;border:0;border-left:1px solid var(--ink);padding:0 16px;cursor:pointer;color:var(--ink);font:700 11px var(--sans);letter-spacing:.12em;text-transform:uppercase;display:flex;align-items:center;gap:8px}
.theme-b svg{width:18px;height:18px}.theme-b:hover{color:var(--red)}
.mast{grid-template-columns:auto 1fr auto auto}
/* ---- toast ---- */
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(20px);z-index:60;background:var(--ink);color:var(--paper);padding:11px 16px;font:500 14px var(--sans);max-width:min(92vw,480px);opacity:0;transition:.25s;pointer-events:none;box-shadow:4px 4px 0 var(--shadow)}
.toast.on{opacity:1;transform:translateX(-50%)}
.toast.err{background:var(--red)}
/* ---- loading / error ---- */
.skel{background:linear-gradient(90deg,var(--rule2),var(--rule),var(--rule2));background-size:200% 100%;animation:shimmer 1.2s linear infinite;border-radius:2px}
@keyframes shimmer{to{background-position:-200% 0}}
.skel.l{height:14px;margin:8px 0}.skel.h{height:44px;margin:14px 0}.skel.b{height:90px;margin:12px 0}
.errbox{border:1.5px solid var(--red);padding:18px;margin:22px 28px;color:var(--red);font-size:14px}
.errbox b{display:block;font:700 18px var(--disp);margin-bottom:6px}.errbox button{margin-top:10px}
.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--rule);border-top-color:var(--ink);border-radius:50%;animation:spin .7s linear infinite;vertical-align:-2px;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
/* ---- home quick tools ---- */
.quick{display:grid;gap:10px;margin-top:14px}
.quick .search textarea{flex:1;border:0;background:transparent;font:400 15px/1.45 var(--sans);padding:12px 14px;outline:0;color:var(--ink);min-width:0;resize:none;min-height:66px;font-family:var(--sans)}
.quick .row{display:flex;gap:10px;flex-wrap:wrap}
.quick .hint{font-size:12.5px;color:var(--mute)}
.recent{list-style:none;padding:0;margin-top:8px}
.recent li{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--rule2);font-size:13.5px}
.recent li a{text-decoration:none;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.recent li a:hover{color:var(--red)}.recent li small{color:var(--mute);white-space:nowrap}
.recent .clr{background:none;border:0;color:var(--mute);cursor:pointer;font:700 10px var(--sans);letter-spacing:.12em;text-transform:uppercase;padding:0}
/* ---- bulk ---- */
.bulk textarea{width:100%;min-height:150px;border:1.5px solid var(--ink);background:var(--paper2);color:var(--ink);font:400 14px/1.5 var(--sans);padding:12px;outline:0;resize:vertical}
.bulk .drop{border:1.5px dashed var(--ink);padding:14px;text-align:center;font-size:13.5px;color:var(--mute);margin-top:10px;cursor:pointer}
.bulk .drop.over{background:var(--jadebg);color:var(--jade);border-color:var(--jade)}
.bulk input[type=file]{display:none}
.btbl{width:100%;border-collapse:collapse;font-size:13px;margin-top:14px}
.btbl th{font:700 10px var(--sans);text-transform:uppercase;letter-spacing:.14em;color:var(--mute);text-align:left;padding:8px 6px;border-bottom:1.5px solid var(--ink)}
.btbl td{padding:8px 6px;border-bottom:1px solid var(--rule2);vertical-align:top;overflow-wrap:anywhere}
.btbl td.old{color:var(--mute)}.btbl td.new{font-weight:700}
.btbl tr.warn td.new{color:var(--amber)}.btbl tr.bad td.new{color:var(--red);font-weight:400}
.btbl-wrap{overflow-x:auto}
.prog{height:4px;background:var(--rule2);margin:12px 0}.prog i{display:block;height:100%;background:var(--red);transition:width .2s}
.code{font:400 12.5px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--paper2);border:1px solid var(--rule);padding:12px;overflow-x:auto;white-space:pre}
/* ---- ward page ---- */
.wardhead .merge .old{font-size:12px}
/* ---- mobile bottom sheet ---- */
@media (max-width:860px){
 .mast{grid-template-columns:1fr auto;grid-template-rows:56px 44px}
 .theme-b{grid-row:1;grid-column:2;border-left:1px solid var(--ink);padding:0 18px}
 .mast-meta{display:none}
 .tabs{grid-row:2}
 .stage{display:block;height:calc(100dvh - 100px);position:relative;overflow:hidden}
 .map-wrap{position:absolute;inset:0;height:auto;border-bottom:0;z-index:0}
 .folio{position:absolute;left:0;right:0;bottom:0;top:0;z-index:2;overflow-y:auto;background:var(--paper);border-top:2px solid var(--ink);
   transform:translateY(calc(100% - 96px));transition:transform .35s cubic-bezier(.2,.8,.2,1);box-shadow:0 -8px 24px var(--shadow);padding-bottom:env(safe-area-inset-bottom,0px)}
 .folio.half{transform:translateY(46%)}
 .folio.full{transform:translateY(0)}
 .folio.drag{transition:none}
 .folio::before{content:"";display:block;position:sticky;top:0;z-index:3;height:22px;background:var(--paper);background-image:linear-gradient(var(--ink),var(--ink));background-size:44px 4px;background-position:center 9px;background-repeat:no-repeat;touch-action:none;cursor:grab}
 .folio:not(.full){overflow:hidden}
 .folio>*{animation:none}
 .map-wrap .maplibregl-ctrl-bottom-right,.map-legend{bottom:104px}
 .sheet-hint{position:absolute;left:12px;right:60px;bottom:12px;z-index:1;font-size:12px;color:var(--mute);pointer-events:none}
}
.map-wrap:not(.attr-ok) .maplibregl-ctrl-attrib-inner{visibility:hidden}
@keyframes lblin{from{opacity:0}to{opacity:1}}.maplibregl-marker.lbl{animation:lblin .35s ease-out both}
@media (max-width:859px){.map-ph{display:block;position:absolute;inset:0;z-index:1;pointer-events:none;background:var(--sea) var(--map-ph) center top/cover no-repeat;transition:opacity .25s}.map-wrap.live .map-ph{opacity:0;visibility:hidden}}
:root{--map-ph:url(img/map-ph-light.webp)}
:root[data-theme=dark]{--map-ph:url(img/map-ph-dark.webp)}
@media (min-width:860px){.map-ph{display:block;position:absolute;inset:0;z-index:1;pointer-events:none;background:var(--sea) var(--map-ph-d) center/cover no-repeat;transition:opacity .25s}.map-wrap.live .map-ph{opacity:0;visibility:hidden}}
:root{--map-ph-d:url(img/map-ph-d-light.webp)}
:root[data-theme=dark]{--map-ph-d:url(img/map-ph-d-dark.webp)}
/* converter v3 */
.cv-how{display:flex;gap:18px;margin:16px 0 10px;border-bottom:1px solid var(--rule)}
.cv-how button{background:none;border:0;padding:8px 0;font:700 12px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--mute);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-1px}
.cv-how button[aria-selected=true]{color:var(--ink);border-color:var(--red)}
.cv-lb{display:block;font:700 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);margin:10px 0 6px}.cv-lb i{font:italic 400 12px var(--serif);text-transform:none;letter-spacing:0;color:var(--mute)}
.cv-ta{position:relative}
.cv-ta textarea{width:100%;box-sizing:border-box;resize:vertical;min-height:64px;border:1.5px solid var(--ink);background:var(--paper2);font:500 17px/1.45 var(--sans);padding:12px 40px 12px 14px;color:var(--ink);outline:0;border-radius:0}
.cv-ta textarea:focus,.search:focus-within{box-shadow:4px 4px 0 var(--ochre)}
.cv-x{position:absolute;right:6px;top:8px;border:0;background:none;font-size:22px;line-height:1;color:var(--mute);cursor:pointer;padding:4px 8px}
.cv-ex{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;font-size:12px;color:var(--mute);align-items:center}
.cv-ex button{border:1px dashed var(--rule);background:none;font:400 12px var(--sans);color:var(--ink2);padding:3px 8px;cursor:pointer;text-align:left}.cv-ex button:hover{border-color:var(--ink);border-style:solid}
.cv-grid{display:grid;gap:4px}
.pk{position:relative}
.pk-b{width:100%;text-align:left;border:1.5px solid var(--ink);background:var(--paper2);font:500 16px var(--sans);padding:11px 36px 11px 14px;color:var(--mute);cursor:pointer;position:relative}
.pk-b::after{content:'▾';position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--ink)}
.pk-b.set{color:var(--ink)}.pk-b:disabled{opacity:.45;cursor:not-allowed;border-style:dashed}
.pk-pop{position:absolute;z-index:20;left:0;right:0;top:100%;background:var(--paper2);border:1.5px solid var(--ink);border-top:0;box-shadow:6px 6px 0 var(--rule2)}
.pk-pop input{width:100%;box-sizing:border-box;border:0;border-bottom:1px solid var(--rule);background:var(--paper);font:400 15px var(--sans);padding:10px 14px;outline:0;color:var(--ink)}
.pk-pop ul{list-style:none;margin:0;padding:0;max-height:260px;overflow:auto}
.pk-pop li{padding:8px 14px;cursor:pointer;font-size:15px;border-bottom:1px solid var(--rule2)}.pk-pop li:hover{background:var(--paper)}
.pk-pop .sp,.cv .sp{font:700 10px var(--sans);background:var(--ochre);color:#1B1A17;padding:1px 5px;margin-left:4px;text-transform:uppercase}
.cv-go{margin-top:14px;width:100%;background:var(--red);color:#fff;border:0;padding:14px 18px;font:800 15px var(--sans);letter-spacing:.06em;text-transform:uppercase;cursor:pointer;display:flex;justify-content:space-between;align-items:center}
.cv-go:hover{background:var(--ink)}
.cv-alt{margin:12px 0 0;display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--mute)}
.cv-alt button{border:1px solid var(--rule);background:var(--paper2);padding:4px 9px;font:500 13px var(--sans);color:var(--ink);cursor:pointer;text-align:left}.cv-alt small{display:block;color:var(--mute);font-size:11px}
.cv-from{margin-top:20px;font-size:14px;color:var(--mute);border-left:3px solid var(--rule);padding:2px 0 2px 10px}.cv-from .k,.cv-hero .k{display:block;font:700 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--mute)}
.cv-hero{margin:12px 0 14px;background:var(--ink);color:var(--paper);padding:16px 18px 18px;position:relative}
.cv-hero .k{color:var(--ochre)}
.cv-hero .a{font:600 22px/1.3 var(--disp);margin:6px 0 12px}.cv-hero .a.sm{font-size:17px;margin:4px 0}
.cv-hero p{font-size:13px;margin:6px 0 0;opacity:.85}
.cv-hero.split{background:var(--paper2);color:var(--ink);border:1.5px solid var(--ochre);box-shadow:5px 5px 0 var(--ochre)}.cv-hero.split .k{color:var(--red)}
.cv-copy{background:var(--paper);color:var(--ink);border:0;padding:9px 14px;font:800 12px var(--sans);letter-spacing:.08em;text-transform:uppercase;cursor:pointer}.cv-copy:hover{background:var(--ochre)}
