:root{--accent: #0B5FA5;--accent-d: #08457A;--accent-bg: #EAF3FB;--accent-line: #BFDCF2;--accent-ink: #0B3C78;--ink: #16222E;--ink2: #3E5366;--dim: #5B6B7A;--faint: #8FA3B3;--line: #D7DDE3;--line2: #E6EBEF;--bg: #EEF1F4;--soft: #F3F5F7;--soft2: #F6F8FA;--orange: #EA580C;--orange-bg: #FFF7ED;--orange-line: #FED7AA;--orange-ink: #9A3412;--red: #DC2626;--red-bg: #FEF2F2;--red-line: #FECACA;--red-ink: #B91C1C;--green-bg: #ECFDF3;--green-line: #BBE5C8;--green-ink: #166534;--warn-ink: #92400E;--sans: Inter, system-ui, -apple-system, sans-serif;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--shadow: 0 4px 14px rgba(22, 34, 46, .1)}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font:13px/1.4 var(--sans);color:var(--ink);background:var(--bg)}[hidden]{display:none!important}button,input,select{font:inherit;color:inherit}a{color:var(--accent)}.mono{font-family:var(--mono)}.small{font-size:11px}.dim{color:var(--dim)}.dimmer{color:var(--faint)}.b{font-weight:600}.grow{flex:1 1 auto;min-width:0}.accent{color:var(--accent-ink)}#app{height:100dvh;display:flex;flex-direction:column}.top{min-height:56px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:8px 16px;flex-wrap:wrap}.logo{width:28px;height:28px;border-radius:7px;background:var(--accent);display:flex;align-items:center;justify-content:center;flex:0 0 auto}.brand{font-weight:600;font-size:14px}.vsep{width:1px;height:24px;background:var(--line)}.site-pick{position:relative;display:flex;align-items:center;gap:6px;height:32px;padding:0 8px 0 10px;border:1px solid var(--line);border-radius:8px;color:var(--dim);background:#fff;cursor:pointer}.site-pick:hover{border-color:#c3ccd4}.site-pick:focus-within{outline:2px solid var(--accent);outline-offset:1px}.site-pick select{appearance:none;-webkit-appearance:none;border:0;background:transparent;font:inherit;font-weight:500;color:var(--ink);padding-right:20px;cursor:pointer;outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%235B6B7A' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 2px center}.site-pick select:disabled{color:var(--ink);opacity:1}.site-pick.single,.site-pick.single select{cursor:default}.site-pick.single:hover{border-color:var(--line)}.site-pick.single select{background-image:none;padding-right:0}.chip{display:flex;align-items:center;gap:8px;height:32px;padding:0 12px;border-radius:999px;font-weight:600;border:1px solid;white-space:nowrap}.chip .ico{width:8px;height:8px;border-radius:50%;background:currentColor}.status.preparing{background:var(--orange-bg);border-color:var(--orange-line);color:var(--orange-ink)}.status.preparing .ico{background:var(--orange)}.status.running{background:var(--accent-bg);border-color:var(--accent-line);color:#0b4f8a}.status.running .ico{background:var(--accent)}.status.settled{background:var(--green-bg);border-color:var(--green-line);color:var(--green-ink)}.status.settled .ico{width:12px;height:12px;border-radius:0;background:none;border:solid currentColor;border-width:0 3px 3px 0;transform:translateY(-2px) rotate(45deg) scaleX(.6)}.status.paused,.status.off{background:var(--soft);border-color:var(--line);color:var(--ink2)}.status.paused .ico{width:10px;height:10px;border-radius:0;background:none;border:solid currentColor;border-width:0 3px}.status.off .ico{background:var(--faint)}.status.stopped,.status.unsupported{background:var(--red-bg);border-color:var(--red-line);color:var(--red-ink)}.status.stopped .ico,.status.unsupported .ico{background:var(--red)}.body{flex:1 1 auto;min-height:0;display:flex}.side{flex:0 0 300px;width:300px;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.side-scroll{flex:1 1 auto;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:22px}.side-foot{padding:16px;border-top:1px solid var(--line2);display:grid;grid-template-columns:1fr 1fr;gap:8px}.map{flex:1 1 auto;min-width:0;position:relative;overflow:hidden;background:#d9e2e9;cursor:crosshair}.map canvas{position:absolute;inset:0;display:block}.map.busy{cursor:progress}.field{display:flex;flex-direction:column;gap:8px}.row-b{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.lbl{font-weight:600}.lbl2{font-weight:500}.lbl3{font-size:12px;font-weight:600}.unit{font-size:11px;color:var(--dim)}.help{font-size:12px;color:var(--dim)}.help.small{font-size:11px}.help.blue{color:#3b5a74}.help.warn{color:var(--warn-ink)}.mt4{margin-top:4px}.mb6{margin-bottom:6px}.mt-8{margin-top:-8px}.val{font-family:var(--mono);font-weight:600;color:var(--accent)}.num{height:40px;padding:0 12px;border:1px solid var(--line);border-radius:8px;font-family:var(--mono);font-size:16px;font-weight:600;background:#fff;width:100%}.num:focus,select:focus,.btn:focus-visible,.seg button:focus-visible,.seg4 button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.presets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.presets button{height:36px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:12px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1}.presets button span:first-child{font-weight:600}.presets button span:last-child{font-size:10px;color:var(--dim)}.presets button.on{border-color:var(--accent);background:var(--accent-bg);color:var(--accent-ink)}.presets button.on span:last-child{color:inherit}.check-row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink2);cursor:pointer}.check-row input{width:14px;height:14px;margin:0;accent-color:var(--accent);cursor:pointer}.check-row input:disabled,.check-row input:disabled+span{cursor:default;opacity:.5}.range{width:100%;accent-color:var(--accent);margin:0}.ticks{position:relative;height:14px;font-size:11px;color:var(--dim);font-family:var(--mono);margin:0 7px}.ticks span{position:absolute;transform:translate(-50%)}.btn{height:34px;padding:0 14px;border:1px solid var(--line);border-radius:8px;background:#fff;font-weight:500;cursor:pointer}.btn.tall{height:40px;border-radius:10px}.btn:hover:not(:disabled){background:var(--soft2)}.btn:disabled{background:var(--soft);color:var(--faint);cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn.primary:hover{background:var(--accent-d)}.btn.red{border-color:var(--red-line);color:var(--red-ink)}.btn.link{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink)}#btn-clear-src{margin-top:4px}.coast-off{display:flex;align-items:center;gap:10px;padding:12px;border:1px dashed #C9D2DA;border-radius:10px;background:#f8fafb}.coast{display:flex;flex-direction:column;gap:14px;padding:14px;border:1px solid var(--accent-line);border-radius:12px;background:#f6fafd}.coast-body{display:flex;flex-direction:column;gap:14px}.coast.off .coast-body{opacity:.45;pointer-events:none}.switch-row{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer}.switch{position:relative;width:40px;height:24px;flex:0 0 auto}.switch input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:1}.switch i{position:absolute;inset:0;border-radius:999px;background:#c9d2da;transition:background .15s}.switch i:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #16222e4d;transition:left .15s}.switch input:checked+i{background:var(--accent)}.switch input:checked+i:after{left:19px}.switch input:focus-visible+i{outline:2px solid var(--accent);outline-offset:2px}.stack6{display:flex;flex-direction:column;gap:6px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sel{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:500}.sel select{height:36px;padding:0 8px;border:1px solid var(--line);border-radius:8px;font-weight:400;background:#fff;min-width:0}.seg4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:3px}.seg4 button{height:30px;padding:0 2px;border:0;border-radius:6px;background:transparent;font-size:12px;font-weight:500;white-space:nowrap;color:var(--dim);cursor:pointer}.seg4 button.on{background:var(--accent-bg);font-weight:600;color:var(--accent-ink)}.curve{display:flex;flex-direction:column;gap:4px;padding:10px;background:#fff;border:1px solid var(--line2);border-radius:10px}.curve svg{display:block;overflow:visible}.curve-x{position:relative;height:14px;font-size:10px;color:var(--dim)}.curve-x span{position:absolute}.curve-x span:first-child{left:0}.curve-x #curve-end{right:0}.curve-x #curve-mid{left:50%}.curve-x #curve-mid,.curve-x .now-lbl{transform:translate(-50%)}.curve-x .now-lbl{color:var(--ink);font-weight:600}.ov{position:absolute;inset:0;pointer-events:none;z-index:2}.ov>*{pointer-events:auto}.ov>.pins{pointer-events:none;position:absolute;inset:0}.card,.card-sm,.card-lg{background:#fff;border:1px solid var(--line);box-shadow:var(--shadow)}.card{border-radius:12px}.card-sm{border-radius:999px;box-shadow:0 2px 8px #16222e1a}.card-lg{border-radius:14px;box-shadow:0 8px 24px #16222e24}.area-chip{position:absolute;top:16px;left:16px;display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;font-size:12px}.right-stack{position:absolute;top:16px;right:16px;display:flex;flex-direction:column;gap:8px}.results{width:260px;padding:14px;display:flex;flex-direction:column;gap:4px}.kv{display:flex;justify-content:space-between;align-items:baseline;padding:8px 0;border-top:1px solid var(--line2);gap:8px}.kv .big{font-family:var(--mono);font-size:18px;font-weight:600;white-space:nowrap}.kv .big small{font-size:11px;color:var(--dim);font-weight:400}.kv.soon{border-top:1px dashed var(--line);color:var(--faint);align-items:center;padding-bottom:0;font-size:12px}.kv.small-row{font-size:12px;padding-top:6px}.pill{font-size:11px;font-weight:600;color:var(--dim);background:var(--soft);border-radius:999px;padding:2px 8px;white-space:nowrap}.sun{width:260px;padding:8px 12px;display:flex;align-items:center;gap:8px}.sun svg{flex:0 0 auto}.sun .sun-t{font-size:13px;font-weight:600;min-width:38px}.sun .range{flex:1 1 auto;min-width:0}.layers{width:260px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}.layer-sec{display:flex;flex-direction:column;gap:6px}.layer-sec+.layer-sec{padding-top:8px;border-top:1px solid var(--line2)}.layer-sec-title{font-size:10px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:.06em}.seg3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:3px;background:var(--soft);border:1px solid var(--line);border-radius:7px;padding:3px}.seg3 button{height:24px;padding:0;border:0;border-radius:5px;background:transparent;font-size:11px;font-weight:500;color:var(--dim);cursor:pointer;white-space:nowrap}.seg3 button.on{background:#fff;font-weight:600;color:var(--ink);box-shadow:0 1px 2px #16222e1a}.switch input:disabled~i{opacity:.4}.switch-row:has(input:disabled){color:var(--faint);cursor:default}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.legend{position:absolute;bottom:16px;left:16px;width:220px;padding:12px;display:flex;flex-direction:column;gap:8px}.legend .n{font-weight:400}.grad{height:12px;border-radius:6px}.legend-x{position:relative;height:14px;font-size:11px;color:var(--dim)}.legend-x span{position:absolute;transform:translate(-50%)}.legend-x span:first-child{transform:none}.legend-x span:last-child{transform:translate(-100%)}.credit{position:absolute;right:0;bottom:0;max-width:70%;padding:2px 8px;font-size:10px;line-height:1.5;color:var(--ink2);background:#ffffffb8;border-top-left-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.prep{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(360px,calc(100% - 32px));padding:20px;display:flex;flex-direction:column;gap:14px}.big-t{font-size:15px}.big-t2{font-size:14px}.steps{display:flex;flex-direction:column;gap:10px}.step{display:flex;align-items:center;gap:10px;color:var(--faint)}.step .dot{width:18px;height:18px;border-radius:50%;border:2px solid var(--line);flex:0 0 auto}.step .t{flex:1 1 auto}.step .s{font-family:var(--mono);font-size:12px;color:var(--dim)}.step.now{color:var(--ink)}.step.now .t{font-weight:600}.step.now .dot{border-color:var(--accent);border-right-color:transparent;animation:spin .8s linear infinite}.step.done{color:var(--ink2)}.step.done .dot{border-color:var(--accent);background:var(--accent);position:relative}.step.done .dot:after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.step.now .dot{animation-duration:3s}}.prep-foot{padding-top:10px;border-top:1px solid var(--line2);font-size:12px}.stop-bar{position:absolute;left:50%;top:64px;transform:translate(-50%);width:min(520px,calc(100% - 32px));display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;background:var(--red-bg);border:1px solid var(--red-line);color:#7f1d1d;flex-wrap:wrap}.confirm-dot{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--ink);border:3px solid #fff;box-shadow:0 1px 4px #16222e66;pointer-events:none}.confirm{position:absolute;width:280px;padding:16px;display:flex;flex-direction:column;gap:10px;box-shadow:0 8px 24px #16222e2e}.confirm .small{font-size:12px;color:var(--ink2)}.confirm-btns{display:flex;gap:8px;justify-content:flex-end}.confirm-btns .btn{height:36px}.toast{position:absolute;left:50%;bottom:24px;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:var(--ink);color:#fff;font-size:12px;box-shadow:var(--shadow);white-space:nowrap;pointer-events:none}.toast:before{content:"";width:8px;height:8px;border-radius:50%;background:#7db9ee}.notice{position:absolute;left:50%;top:64px;transform:translate(-50%);width:min(520px,calc(100% - 32px));padding:12px 14px;font-size:12px;color:var(--ink2);border-color:#fde68a;background:#fffbeb}.pin{position:absolute;left:0;top:0;display:flex;align-items:center;gap:6px;pointer-events:auto;will-change:transform}.pin .c{width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;background:var(--accent);border:3px solid #fff;box-shadow:0 2px 6px #16222e59;color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;transition:transform .12s,background .12s}.pin .tip{margin-top:-13px;background:var(--ink);color:#fff;font-size:11px;padding:4px 8px;border-radius:6px;white-space:nowrap;display:none}.pin:hover .c{transform:scale(1.12);background:var(--accent-d);box-shadow:0 0 0 3px #0b5fa559,0 2px 6px #16222e59}.pin:hover .tip{display:block}.pin.queued .c{background:#fff;border:3px dashed var(--accent);color:var(--accent);box-shadow:0 1px 4px #16222e40}.pin.queued .q{margin-top:-13px;background:#fff;color:var(--accent-ink);font-size:11px;padding:3px 8px;border-radius:6px;border:1px solid var(--accent-line);white-space:nowrap}.pin.queued:hover .q{display:none}.pin.ghost .c{background:#0b5fa58c;cursor:default;animation:pop .3s ease-out}.pin.ghost{pointer-events:none}@keyframes pop{0%{transform:scale(.4);opacity:0}}.bar{min-height:72px;background:#fff;border-top:1px solid var(--line);display:flex;align-items:center;gap:20px;padding:10px 16px;flex-wrap:wrap}.play{width:44px;height:44px;border:0;border-radius:50%;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex:0 0 auto}.play:disabled{background:#c9d2da;cursor:not-allowed}.play .i-play{display:none}.play.paused .i-play{display:block}.play.paused .i-pause{display:none}.col{display:flex;flex-direction:column}.col.sep{padding-left:16px;border-left:1px solid var(--line2)}.clock{font-size:22px;font-weight:600;line-height:1.1}.clock small{font-size:11px;color:var(--dim);font-weight:500}.clock.idle{color:var(--faint)}.scen{gap:4px;min-width:150px}.scen-t{font-size:16px;font-weight:600;line-height:1.1}.scen-t .dim{font-weight:500}.scen-ended{display:inline-flex;align-items:center;height:24px;padding:0 8px;border-radius:6px;background:var(--soft);color:var(--ink2);font-size:12px;font-weight:600}.prog{height:4px;border-radius:2px;background:var(--line2);overflow:hidden}.prog>div{height:100%;background:#1f63b0;width:0}.speed{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.seg{display:flex;background:var(--soft);border:1px solid var(--line);border-radius:8px;padding:3px;gap:2px}.seg button{height:30px;padding:0 12px;border:0;border-radius:6px;background:transparent;font-size:12px;font-weight:500;color:var(--dim);cursor:pointer;white-space:nowrap}.seg button.on{background:#fff;box-shadow:0 1px 2px #16222e1f;font-weight:600;color:var(--ink)}.actual{font-size:12px;color:var(--warn-ink);background:#fffbeb;border:1px solid #FDE68A;border-radius:6px;padding:4px 8px;white-space:nowrap}.actual.info{color:var(--accent-ink);background:var(--accent-bg);border-color:var(--accent-line);font-family:var(--mono)}.sum-chip{display:flex;align-items:center;gap:8px;height:32px;padding:0 12px;border-radius:999px;background:var(--soft);font-size:12px;white-space:nowrap}@media(max-width:860px){#app{height:auto;min-height:100dvh}.body{flex-direction:column}.map{order:0;height:64vh;min-height:420px;flex:0 0 auto}.side{order:1;width:auto;flex:0 0 auto;border-right:0;border-top:1px solid var(--line)}.side-scroll{overflow:visible}.results{width:210px;padding:10px}.sun,.layers{width:210px}.kv .big{font-size:15px}.legend{width:180px}.sum-chip{white-space:normal;height:auto;padding:6px 12px}}@media(max-width:520px){.right-stack{top:auto;bottom:16px}.results{width:170px}.results .kv.soon,.results .row-b .small{display:none}.sun{width:170px;padding:6px 8px;gap:6px}.layers{width:170px;padding:8px 10px}.legend,.area-chip .dim{display:none}.seg button{padding:0 8px}}#unsupported{min-height:100dvh;display:flex;flex-direction:column}.unsup-main{flex:1 1 auto;display:flex;align-items:center;justify-content:center;padding:32px 16px}.unsup-card{width:100%;max-width:480px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:32px;display:flex;flex-direction:column;gap:16px;line-height:1.5}.unsup-card h1{margin:0;font-size:22px;font-weight:700}.unsup-card p{margin:0}.dim2{color:var(--ink2)}.unsup-ico{width:48px;height:48px;border-radius:12px;background:var(--orange-bg);color:#c2410c;display:flex;align-items:center;justify-content:center}.unsup-steps{display:flex;flex-direction:column;gap:8px;padding:14px;border-radius:10px;background:var(--soft2)}.unsup-steps .li{display:flex;gap:8px}.unsup-steps .n{color:var(--accent);font-weight:700}.unsup-card details{border:1px solid var(--line2);border-radius:10px;padding:12px 14px}.unsup-card summary{font-weight:600;cursor:pointer}.unsup-more{display:flex;flex-direction:column;gap:8px;margin-top:10px;color:var(--ink2)}.unsup-more code{font-family:monospace;background:var(--soft);padding:1px 5px;border-radius:4px}.unsup-btns{display:flex;gap:8px;flex-wrap:wrap}.unsup-btns .btn{padding:0 18px}#login-screen{min-height:100dvh;display:flex;flex-direction:column}.login-main{flex:1 1 auto;display:flex;align-items:center;justify-content:center;padding:32px 16px}.login-card{width:100%;max-width:360px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:28px 24px;display:flex;flex-direction:column;gap:20px}.login-title{margin:0;font-size:18px;font-weight:700}#login-form{display:flex;flex-direction:column;gap:14px}.login-field{display:flex;flex-direction:column;gap:5px}.login-field label{font-size:13px;font-weight:500}.login-field input{height:40px;padding:0 12px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:14px;background:#fff;width:100%}.login-field input:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}.login-err{font-size:12px;color:var(--red-ink);background:var(--red-bg);border:1px solid var(--red-line);border-radius:7px;padding:8px 10px}#login-form .btn{width:100%;justify-content:center}.logout-btn{height:28px;padding:0 10px;font-size:12px;border-radius:7px;color:var(--dim);border-color:var(--line2)}.logout-btn:hover{color:var(--ink)}
