:root{--ink:#edf5f2;--muted:#839793;--faint:#50635f;--line:#b5cdc624;--panel:#0b1617e0;--bg:#071011}*{box-sizing:border-box}html,body{background:var(--bg);width:100%;min-height:100%;color:var(--ink);margin:0}body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden}button,input{font:inherit}button{color:inherit}.app-shell{background:radial-gradient(circle at 48% 46%,#162c2a 0,#0b191a 29%,#071011 68%);min-height:100vh}.topbar{z-index:30;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:linear-gradient(#060d0ef7,#060d0eb3);border-bottom:1px solid #fff1;grid-template-columns:minmax(260px,1fr) minmax(280px,420px) minmax(230px,1fr);align-items:center;gap:24px;min-height:84px;padding:17px 24px;display:grid;position:fixed;inset:0 0 auto}.brand span,.panel-kicker{color:#78908b;letter-spacing:.14em;text-transform:uppercase;font-size:10px;font-weight:650;display:block}.brand h1{letter-spacing:-.04em;margin:4px 0 0;font-size:clamp(20px,2vw,27px);font-weight:590}.search-wrap{width:100%;position:relative}.search-box{background:#ffffff0e;border:1px solid #ffffff1a;border-radius:14px;align-items:center;gap:10px;width:100%;min-height:46px;padding:0 13px;transition:border-color .2s,background .2s,box-shadow .2s;display:flex;box-shadow:inset 0 1px #ffffff06}.search-box:focus-within{background:#ffffff13;border-color:#68c49b6b;box-shadow:0 0 0 3px #46a37d14}.search-icon{color:#8ba19c;font-size:21px;line-height:1;transform:rotate(-15deg)}.search-box input{color:#f3f8f6;background:0 0;border:0;outline:0;flex:1;min-width:0}.search-box input::placeholder{color:#637973}.search-clear{color:#829691;cursor:pointer;background:0 0;border:0;border-radius:50%;width:26px;height:26px;padding:0}.search-clear:hover{color:#fff;background:#ffffff12}.search-results{z-index:50;top:calc(100% + 8px);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);background:#0a1415fa;border:1px solid #ffffff1b;border-radius:15px;padding:7px;position:absolute;inset-inline:0;box-shadow:0 24px 60px #0006}.search-result{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:11px;width:100%;padding:10px;display:flex}.search-result:hover,.search-result:focus-visible{background:#ffffff0f;outline:0}.search-result>span:last-child{gap:2px;min-width:0;display:grid}.search-result strong{color:#e9f1ef;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:570;overflow:hidden}.search-result small{color:#71857f;font-size:10px}.result-dot{background:#d4cd61;border-radius:50%;flex:none;width:9px;height:9px;box-shadow:0 0 10px #d4cd6159}.result-dot.city{background:#6aa28e;border:1px solid #d9e7e2;box-shadow:0 0 0 3px #69a68f26}.search-empty{color:#71857f;text-align:center;padding:16px;font-size:12px}.reset-button{color:#879a95;cursor:pointer;opacity:.45;background:#ffffff06;border:1px solid #ffffff17;border-radius:12px;justify-self:end;align-items:center;gap:8px;min-height:42px;padding:0 14px;transition:all .2s;display:flex}.reset-button.visible{color:#d7e3df;opacity:1}.reset-button:hover{background:#ffffff0f;border-color:#ffffff2b}.reset-button span{font-size:17px}.graph-stage{z-index:1;transition:right .38s cubic-bezier(.22,.7,.2,1);position:fixed;inset:84px 0 0;overflow:hidden}.graph-stage.panel-open{right:min(430px,38vw)}.graph-stage>canvas{z-index:2;position:relative}.stage-grid{z-index:0;opacity:.2;pointer-events:none;background-image:linear-gradient(#84a19912 1px,#0000 1px),linear-gradient(90deg,#84a19912 1px,#0000 1px);background-size:64px 64px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle,#000 5%,#0000 73%);mask-image:radial-gradient(circle,#000 5%,#0000 73%)}.stage-grid:after{content:"";background:radial-gradient(circle,#0000 35%,#050c0db8 100%);position:absolute;inset:0}.context-card{z-index:5;pointer-events:none;border-left:2px solid #66c29780;gap:4px;max-width:min(390px,100vw - 48px);padding-left:13px;display:grid;position:absolute;top:20px;left:24px}.context-card span{color:#6f8580;letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:650}.context-card strong{color:#eaf3f0;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:570;overflow:hidden}.context-card small{color:#687b77;font-size:11px}.zoom-controls{z-index:5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#081112ad;border:1px solid #ffffff16;border-radius:12px;display:grid;position:absolute;top:20px;right:22px;overflow:hidden}.zoom-controls button{color:#a5b7b2;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #ffffff12;width:38px;height:36px}.zoom-controls button:last-child{border-bottom:0;font-size:12px}.zoom-controls button:hover{color:#fff;background:#fff1}.legend{z-index:5;color:#7c908b;pointer-events:none;align-items:center;gap:16px;font-size:10px;display:flex;position:absolute;bottom:24px;left:24px}.legend div{color:#a2b2ae;align-items:center;gap:7px;display:flex}.legend i{background:#74ae96;border-radius:50%;width:9px;height:9px;display:block}.legend .legend-city{outline-offset:3px;outline:1px solid #dbede7cc}.legend .legend-topic{background:#d4d061;box-shadow:0 0 9px #d5cf5f59}.legend>span{color:#596d68}.gradient-key{z-index:5;color:#5f736e;pointer-events:none;align-items:center;gap:8px;font-size:9px;display:flex;position:absolute;bottom:25px;right:24px}.gradient-key i{background:linear-gradient(90deg,#718792,#52b788,#d8d665,#ed9944,#ef5d50);border-radius:999px;width:118px;height:4px}.gesture-hint{z-index:5;color:#4f625e;letter-spacing:.025em;pointer-events:none;font-size:9px;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.tooltip{z-index:80;pointer-events:none;background:#060e0ff0;border:1px solid #ffffff1f;border-radius:11px;gap:4px;min-width:180px;max-width:285px;padding:11px 13px;animation:.14s ease-out tooltip-in;display:grid;position:fixed;box-shadow:0 16px 40px #00000061}.tooltip strong{color:#f0f6f4;font-size:13px;font-weight:620}.tooltip span{color:#9bada8;font-size:11px;line-height:1.35}@keyframes tooltip-in{0%{opacity:0;transform:translateY(4px)}}.detail-panel{z-index:40;-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);background:#081011f7;border-left:1px solid #ffffff17;flex-direction:column;width:min(430px,38vw);padding:24px;animation:.38s cubic-bezier(.22,.7,.2,1) panel-in;display:flex;position:fixed;inset:84px 0 0 auto;box-shadow:-24px 0 70px #0000003d}@keyframes panel-in{0%{opacity:.5;transform:translate(100%)}}.panel-head{border-bottom:1px solid #ffffff13;justify-content:space-between;align-items:flex-start;gap:18px;padding-bottom:18px;display:flex}.panel-head h2{color:#eef5f3;letter-spacing:-.025em;flex-wrap:wrap;align-items:center;gap:8px;margin:7px 0 0;font-size:19px;font-weight:590;line-height:1.25;display:flex}.panel-head h2 span{color:#586d68;font-weight:400}.panel-close{color:#93a49f;cursor:pointer;background:#ffffff09;border:1px solid #ffffff14;border-radius:50%;flex:none;width:34px;height:34px}.panel-close:hover{color:#fff;background:#ffffff14}.pair-stats{grid-template-columns:1fr auto;align-items:baseline;gap:12px;margin:18px 0 14px;display:grid}.pair-stats strong{color:#f2f7f5;font-size:17px;font-weight:620}.pair-stats span{color:#7d918c;text-align:right;font-size:10px}.initiative-list{scrollbar-width:thin;scrollbar-color:#31433f transparent;flex:1;align-content:start;gap:9px;min-height:0;padding-right:4px;display:grid;overflow-y:auto}.initiative-card{background:#ffffff07;border:1px solid #ffffff12;border-radius:13px;margin:0;padding:15px 15px 13px 47px;position:relative}.initiative-card:hover{background:#ffffff0a;border-color:#ffffff1f}.initiative-card p{color:#c8d5d1;margin:0;font-size:12px;line-height:1.58}.card-number{color:#48605a;font:600 10px ui-monospace,SFMono-Regular,Menlo,monospace;position:absolute;top:16px;left:14px}.initiative-card footer{color:#60736e;justify-content:space-between;gap:12px;margin-top:10px;font-size:9px;display:flex}.initiative-card a{color:#80ad9b;text-decoration:none}.initiative-card a:hover{color:#a5d1bf}.show-more{color:#adbfba;cursor:pointer;background:#ffffff09;border:1px solid #ffffff17;border-radius:11px;min-height:42px;margin-top:12px}.show-more:hover{background:#ffffff12}.load-state{text-align:center;background:radial-gradient(circle,#162b29,#071011 58%);place-content:center;justify-items:center;gap:8px;min-height:100vh;padding:30px;display:grid}.load-state span{color:#719087;letter-spacing:.15em;text-transform:uppercase;font-size:10px;font-weight:650}.load-state h1{color:#edf5f2;letter-spacing:-.04em;margin:4px 0;font-size:28px;font-weight:580}.load-state p{color:#71847f;margin:0;font-size:12px}.loader{border:2px solid #ffffff14;border-top-color:#60bc91;border-radius:50%;width:28px;height:28px;margin-bottom:14px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width:980px){.topbar{grid-template-columns:1fr minmax(260px,360px) auto}.brand span{display:none}.reset-button{justify-content:center;width:42px;padding:0;font-size:0}.reset-button span{font-size:18px}.graph-stage.panel-open{right:min(390px,48vw)}.detail-panel{width:min(390px,48vw)}.gradient-key{display:none}.gesture-hint{left:auto;right:24px;transform:none}}@media (max-width:700px){.topbar{grid-template-rows:auto auto;grid-template-columns:1fr auto;gap:10px 12px;min-height:126px;padding:12px 14px}.brand h1{font-size:19px}.search-wrap{grid-area:2/1/auto/-1}.search-box{min-height:42px}.graph-stage{inset:126px 0 0}.graph-stage.panel-open{right:0}.context-card{max-width:calc(100vw - 76px);top:14px;left:14px}.context-card small{max-width:270px}.zoom-controls{top:14px;right:12px}.legend{gap:12px;bottom:15px;left:14px}.legend>span,.gesture-hint{display:none}.detail-panel{border-top:1px solid #ffffff1a;border-left:0;border-radius:18px 18px 0 0;width:100%;height:min(68vh,610px);padding:18px 16px 14px;animation-name:panel-up;inset:auto 0 0;box-shadow:0 -24px 70px #00000061}@keyframes panel-up{0%{opacity:.5;transform:translateY(100%)}}.pair-stats{margin:14px 0 11px}.tooltip{max-width:min(270px,100vw - 26px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
