:root{
 --bg:#f6f4fa;--card:#fff;--ink:#20182f;--muted:#6f667c;--line:#ddd7e6;--line-strong:#c8bfd6;
 --violet:#6d28d9;--violet-deep:#4c1d95;--violet-light:#d7c9ff;--violet-wash:#f2edff;--none:#fbfafc;
 --accent:#ff6b7a;--shadow:0 9px 28px rgba(41,27,69,.075);--radius:16px;--selected-border:2.5px
}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.48 system-ui,-apple-system,Segoe UI,sans-serif}button,input{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,.feature:focus-visible{outline:3px solid rgba(109,40,217,.28);outline-offset:2px}
header{display:flex;justify-content:space-between;align-items:center;padding:18px max(24px,calc((100vw - 1400px)/2));background:#fff;border-bottom:1px solid var(--line)}h1,h2,h3,p{margin-top:0}h1{font-size:23px;letter-spacing:-.02em;margin-bottom:2px}.sub{color:var(--muted);margin:0}.badge{font-size:12px;padding:7px 10px;border-radius:99px;background:var(--violet-wash);color:var(--violet-deep);font-weight:700}
main{max-width:1400px;margin:auto;padding:20px 24px 44px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.controls{padding:12px 14px;display:flex;gap:12px;align-items:center;flex-wrap:wrap;position:relative}.controls[aria-busy="true"]:after{content:"";position:absolute;left:0;bottom:0;height:2px;width:100%;background:linear-gradient(90deg,transparent,var(--violet),transparent);animation:loading 1s linear infinite}@keyframes loading{from{transform:translateX(-65%)}to{transform:translateX(65%)}}
.segmented{display:flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;flex:0 0 auto}.segmented button{border:0;background:#fff;padding:9px 14px;color:var(--muted)}.segmented button.active{background:var(--violet-wash);color:var(--violet-deep);font-weight:750}
label span{display:block;font-size:12px;color:var(--muted);margin-bottom:3px}input[type=date]{padding:9px 10px;border:1px solid var(--line);border-radius:9px;color:var(--ink);background:#fff;min-height:39px}.weekNavigator{display:flex;gap:8px;align-items:center;min-width:min(660px,100%);touch-action:pan-y}.weekDate{flex:0 0 auto}.periodNav{height:39px;min-width:42px}.scrubberLabel{flex:1;min-width:140px}.scrubberLabel input{width:100%;accent-color:var(--violet)}.gestureHint{font-size:11px;color:var(--muted);white-space:nowrap}.customRange{display:flex;gap:10px;align-items:end}.range{margin-left:auto;color:var(--muted);font-weight:600}.updateState{font-size:12px;color:var(--muted);min-width:64px}.primary{border:0;background:var(--violet);color:#fff;padding:10px 15px;border-radius:9px;font-weight:700}.ghost{border:1px solid var(--line);background:#fff;border-radius:9px;padding:8px 11px;color:var(--ink)}.ghost:hover{border-color:var(--line-strong);background:#faf8fd}
.layout{display:grid;grid-template-columns:minmax(0,1fr) 370px;gap:18px;margin-top:18px}.mapHead{display:flex;gap:12px;align-items:center;margin:4px 2px 10px}.mapHead h2{margin:0;font-size:22px}.mapHead p{margin:1px 0 0;color:var(--muted)}.map{height:610px;position:relative;overflow:hidden}#mapSvg{width:100%;height:100%;display:block;background:linear-gradient(180deg,#fcfbff,#f1edf7);touch-action:none}.feature{cursor:pointer;stroke:#38294e;stroke-width:1.1;vector-effect:non-scaling-stroke;transition:stroke-width .1s,opacity .1s}.feature:hover,.feature:focus{stroke-width:2;outline:none}.feature.selected{stroke:var(--accent);stroke-width:var(--selected-border)}.status-ALL{fill:var(--violet)}.status-SOME{fill:var(--violet-light)}.status-NONE{fill:var(--none)}.status-LIMITED{fill:transparent;pointer-events:all}.status-CONTEXT{fill:#ebe7f0;opacity:.35;pointer-events:none}.mapAttribution{position:absolute;right:9px;bottom:7px;padding:3px 6px;border-radius:5px;background:rgba(255,255,255,.86);color:var(--muted);font-size:10px;line-height:1.2;pointer-events:none}.tooltip{position:absolute;pointer-events:none;background:#20182f;color:#fff;padding:7px 9px;border-radius:8px;font-size:12px;max-width:240px;z-index:10}.hidden{display:none!important}.srOnly{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.legend{display:flex;gap:18px;align-items:center;padding:10px 13px;margin-top:10px;box-shadow:none}.legend span{display:flex;align-items:center;gap:7px;font-size:13px;white-space:nowrap}.swatch{width:18px;height:18px;border:1px solid #756889;border-radius:4px;flex:0 0 auto}.swatch.all{background:var(--violet)}.swatch.some{background:var(--violet-light)}.swatch.none{background:var(--none)}
.detail{padding:19px;align-self:start;position:sticky;top:16px;max-height:790px;overflow:auto}.detail h2{font-size:20px;letter-spacing:-.01em}.detail h3{font-size:14px;margin:20px 0 8px}.statusPill{display:inline-block;padding:5px 9px;border-radius:99px;font-weight:800;margin-bottom:12px}.statusPill.ALL{background:var(--violet);color:#fff}.statusPill.SOME{background:#e3d9ff;color:#35106f}.statusPill.NONE{background:#f4f1f7;border:1px solid var(--line)}.statusPill.LIMITED{background:#eeeaf2;color:#5c5367}.meta{color:var(--muted);font-size:12px}.limitation,.reasonBox,.boundaryBox{padding:10px 11px;border-left:3px solid #8e829e;background:#f5f2f8;margin:10px 0;border-radius:0 8px 8px 0}.reasonBox{border-left-color:var(--violet);background:var(--violet-wash)}.boundaryBox{border-left-color:#9b8db0;background:#faf8fc}.boundaryBox strong{display:block;margin-bottom:3px}.sourceContext{margin-top:6px;color:var(--muted);font-size:12px}.calendarList{padding-left:18px}.calendarList .typeLabel{color:var(--muted);font-size:12px}.evidenceSection{margin-top:14px;padding-top:2px}.evidenceSection+.evidenceSection{border-top:1px solid var(--line);padding-top:14px}.evidenceSection h4{font-size:13px;margin:0 0 6px}.daily{width:100%;border-collapse:collapse;font-size:12px}.daily td,.daily th{padding:6px 4px;border-bottom:1px solid #eee9f2;text-align:left;vertical-align:top}.daily th{color:var(--muted);font-weight:650}.technicalDetails{margin-top:18px;font-size:11px;color:var(--muted)}.technicalDetails summary{cursor:pointer}.overviewStats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:12px 0}.stat{border:1px solid var(--line);border-radius:10px;padding:8px}.stat b{display:block;font-size:17px}.stat span{font-size:11px;color:var(--muted)}
.groups{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:10px}.group{padding:12px;border-radius:12px;border:1px solid var(--line);background:#fff}.group h3,.group summary{font-size:13px;font-weight:700;margin-bottom:7px}.group summary{cursor:pointer}.group ul{list-style:none;margin:0;padding:0;max-height:220px;overflow:auto;font-size:12px}.group li{margin:2px 0}.areaLink{width:100%;text-align:left;border:0;background:transparent;border-radius:6px;padding:4px 5px;color:var(--ink);font:inherit;cursor:pointer}.areaLink:hover,.areaLink:focus{background:var(--violet-wash);outline:none}.areaLink.selected{background:#ffe9ec;box-shadow:inset 3px 0 var(--accent)}.showAll{margin-top:7px;font-size:12px}.groupLimit{grid-column:1/-1;color:var(--muted);font-size:12px;margin:0;padding:8px 4px}.error{background:#fff0f0;color:#8b1f2a;padding:12px;border-radius:10px}
@media(max-width:900px){header{padding:14px 16px}main{padding:14px 14px 34px}.layout{grid-template-columns:1fr}.detail{position:static;max-height:none}.map{height:520px}.groups{grid-template-columns:1fr}.legend{overflow:auto}.badge{display:none}.controls{align-items:center}.weekNavigator{order:2;width:100%;min-width:0}.segmented{order:1}.customRange{order:2;width:100%}.customRange label{flex:1}.customRange input{width:100%}.range{order:3;width:100%;margin:0}.updateState{order:4}.scrubberLabel{min-width:80px}.gestureHint{display:none}}
@media(max-width:520px){.map{height:460px}.weekDate{flex:1}.weekDate input{width:100%}.scrubberLabel{width:100%;flex-basis:100%;order:5}.weekNavigator{flex-wrap:wrap}.legend{gap:14px}.overviewStats{grid-template-columns:1fr 1fr}.detail{padding:16px}}
/* IMP-017: user-facing source provenance integrated with the existing boundary box. */
.dataSources{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.sourceGroup{min-width:0}.sourceGroup>strong{font-size:12px;margin-bottom:4px}.sourceList{list-style:none;margin:4px 0 0;padding:0}.sourceList li+li{margin-top:5px}.sourceLink,.sourceName{font-size:12px;line-height:1.35;overflow-wrap:anywhere;word-break:normal}.sourceLink{color:var(--violet);text-decoration:underline;text-underline-offset:2px}.sourceLink:focus-visible{outline:2px solid var(--violet);outline-offset:2px;border-radius:2px}.sourceUnavailable{display:block;margin-top:4px;font-size:12px;color:var(--muted)}
@media(max-width:520px){.dataSources{grid-template-columns:1fr}.sourceGroup+.sourceGroup{padding-top:8px;border-top:1px solid #eee9f2}}
/* Keep grid children shrinkable so long provenance names and the scrollable legend cannot widen mobile layouts. */
.mapColumn,.detail{min-width:0}
