:root{--paper:#fff;--ink:#222;--ink-2:#3a3a3a;--muted:#7a7a7a;--faint:#9a9a9a;--lead:#cfcfcf;--rule:#222;--rule-soft:#bcbcbc;--surround:#deded4;--hover:#f1f1f1;--warn:#b3261e;--sun:#e8a400;--sun-soft:#fff3cf;--good:#1f7a3a}@media (prefers-color-scheme:dark){:root{--paper:#1a1a1a;--ink:#e9e9e6;--ink-2:#c4c4c0;--muted:#8c8c86;--faint:#6a6a66;--lead:#444;--rule:#e9e9e6;--rule-soft:#454545;--surround:#0d0d0d;--hover:#2a2a2a;--warn:#ff8a80;--sun:#ffc23d;--sun-soft:#3a2f12;--good:#7bd88f}}*{box-sizing:border-box}html,body{min-height:100%}body{background:var(--surround);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}a{color:inherit}.doc{background:var(--paper);border:1px solid var(--ink);max-width:980px;margin:24px auto;padding:22px 26px 26px}@media (width<=700px){.doc{border:0;margin:0;padding:16px}}.head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.head .ttl{letter-spacing:.06em;font-size:13px;font-weight:700}.head .src{color:var(--muted);text-align:right;font-size:10.5px}.rule{border:0;border-top:1px solid var(--rule);margin:16px 0}.rule.dbl{border-top:3px double var(--rule)}.rule.soft{border-top:1px solid var(--rule-soft)}.lbl{letter-spacing:.12em;margin-bottom:8px;font-size:10.5px;font-weight:700}.lbl .x{color:var(--muted);letter-spacing:.04em;font-weight:400}.muted{color:var(--muted)}.note{margin:4px 0 8px;font-size:10.5px}.foot{font-size:10px;line-height:1.6}.step[hidden]{display:none}.steps{counter-reset:s;gap:0;margin:0 0 14px;padding:0;list-style:none;display:flex}.steps li{letter-spacing:.1em;color:var(--faint);border-bottom:2px solid var(--lead);counter-increment:s;flex:1;padding:4px 0;font-size:10px}.steps li:before{content:counter(s) " · "}.steps li.on{color:var(--ink);border-bottom-color:var(--ink);font-weight:700}.steps li.done{color:var(--ink-2);border-bottom-color:var(--ink-2);cursor:pointer}.search{max-width:520px;position:relative}.search input{width:100%;font:inherit;border:1px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:0;padding:8px 10px;font-size:13px}.search input:focus{outline:2px solid var(--sun);outline-offset:-1px}.sugg{z-index:20;background:var(--paper);border:1px solid var(--ink);border-top:0;position:absolute;top:100%;left:0;right:0}.sugg[hidden]{display:none}.sg{cursor:pointer;color:var(--ink-2);padding:6px 10px;font-size:11.5px}.sg .t{color:var(--muted);margin-left:6px;font-size:10px}.sg:hover,.sg.on{background:var(--hover);color:var(--ink)}.done{align-items:baseline;gap:12px;font-size:12.5px;display:flex}.done[hidden]{display:none}.done b{font-weight:700}.link{font:inherit;letter-spacing:.06em;color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0;font-size:10.5px;text-decoration:underline}.link:hover{color:var(--ink)}.cards{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;display:grid}.cards.wide{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.card{border:1px solid var(--rule-soft);background:var(--paper);cursor:pointer;text-align:left;font:inherit;color:inherit;flex-direction:column;padding:0;display:flex}.card:hover{border-color:var(--ink)}.card.on{border:1px solid var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}.card.off{opacity:.62}.card .pic{aspect-ratio:1;background:#8a8a84;position:relative;overflow:hidden}.card .pic img,.card .pic svg{width:100%;height:100%;position:absolute;inset:0}.card .pic img{object-fit:cover}.card .body{flex-direction:column;gap:3px;padding:8px 10px 10px;display:flex}.card .t1{justify-content:space-between;align-items:baseline;gap:6px;font-size:12px;font-weight:700;display:flex}.card .t2{color:var(--muted);font-size:10.5px}.card .big{font-size:15px;font-weight:700}.card .kv{color:var(--ink-2);grid-template-columns:auto 1fr;gap:1px 10px;font-size:10.5px;display:grid}.card .kv span:nth-child(odd){color:var(--muted)}.card .ctl{flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;display:flex}.card .pic.plus{color:var(--muted);background:var(--hover);justify-content:center;align-items:center;font-size:56px;font-weight:400;display:flex}.card.add{border-style:dashed}.card .t2 .link{font-size:10px}.card .badges{gap:4px;display:flex}.tick{border:1px solid var(--ink);flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:12px;line-height:1;display:inline-flex}.card.on .tick{background:var(--ink);color:var(--paper)}.badge{letter-spacing:.06em;border:1px solid var(--rule-soft);color:var(--muted);padding:0 5px;font-size:9.5px;font-weight:400}.badge.best{border-color:var(--sun);color:var(--ink);background:var(--sun-soft)}.segbtn{display:inline-flex}.segbtn button{font:inherit;letter-spacing:.05em;cursor:pointer;background:var(--paper);color:var(--ink);border:1px solid var(--ink);border-radius:0;padding:3px 7px;font-size:10px}.segbtn button+button{border-left:0}.segbtn button.on{background:var(--ink);color:var(--paper)}.modsel{font:inherit;border:1px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:0;max-width:100%;padding:2px 3px;font-size:10.5px}.stepper{border:1px solid var(--ink);align-items:center;display:inline-flex}.stepper button{font:inherit;background:var(--paper);width:24px;height:22px;color:var(--ink);cursor:pointer;border:0}.stepper button:hover{background:var(--hover)}.stepper span{text-align:center;border-left:1px solid var(--ink);border-right:1px solid var(--ink);min-width:58px;padding:2px 4px;font-size:10.5px}.row{align-items:center;gap:8px;max-width:460px;margin:5px 0;display:flex}.row>span:first-child{flex:1}.row input[type=number]{width:80px;font:inherit;border:1px solid var(--rule-soft);background:var(--paper);color:var(--ink);text-align:right;border-radius:0;padding:2px 4px;font-size:12px}.row select{font:inherit;border:1px solid var(--rule-soft);background:var(--paper);color:var(--ink);padding:2px;font-size:11.5px}.row .unit{min-width:44px;color:var(--muted);font-size:10.5px}.chk{color:var(--ink-2);cursor:pointer;align-items:flex-start;gap:7px;max-width:460px;margin:6px 0;font-size:11px;display:flex}.chk input{margin:2px 0 0}.drawbox{margin-top:14px}.drawbox[hidden],.roofbox[hidden]{display:none}.drawpic{aspect-ratio:1;cursor:crosshair;touch-action:manipulation;background:#8a8a84;max-width:640px;position:relative;overflow:hidden}.drawpic img,.drawpic svg{width:100%;height:100%;position:absolute;inset:0}.drawbox .ctl{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.btn{font:inherit;letter-spacing:.05em;cursor:pointer;background:var(--paper);color:var(--ink);border:1px solid var(--ink);border-radius:0;padding:4px 9px;font-size:10.5px}.btn:hover{background:var(--hover)}.btn.on{background:var(--ink);color:var(--paper)}.roofbox{border:1px solid var(--rule-soft);max-width:560px;margin-bottom:12px;padding:2px 12px 6px}.roofbox .sub{margin-top:8px}.roofbox .row{max-width:none}.busy{color:var(--ink-2);align-items:center;gap:10px;padding:10px 0;font-size:11px;display:flex}.busy:before{content:"";border:2px solid var(--lead);border-top-color:var(--ink);border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.hero{border:1px solid var(--ink);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:0;margin-bottom:14px;display:grid}.hero>div{border-right:1px solid var(--rule-soft);padding:12px 14px}.hero>div:last-child{border-right:0}.hero .k{letter-spacing:.1em;color:var(--muted);font-size:10px}.hero .v{margin:2px 0;font-size:22px;font-weight:700}.hero .s{color:var(--ink-2);font-size:10.5px}.grid2{grid-template-columns:1fr 1fr;gap:22px;display:grid}@media (width<=760px){.grid2{grid-template-columns:1fr}}table.t{border-collapse:collapse;width:100%;margin:4px 0 10px;font-size:11px}table.t th{letter-spacing:.08em;text-align:right;border-bottom:1px solid var(--ink);padding:3px 6px;font-size:9.5px;font-weight:700}table.t td{text-align:right;border-bottom:1px solid var(--lead);font-variant-numeric:tabular-nums;white-space:nowrap;padding:3px 6px}table.t td:first-child{white-space:normal}table.t th:first-child,table.t td:first-child{text-align:left}table.t tr.sum td{border-bottom:0;border-top:1px solid var(--ink);font-weight:700}table.t td.neg{color:var(--warn)}.sub{letter-spacing:.1em;margin:14px 0 6px;font-size:10.5px;font-weight:700}.chart svg{width:100%;height:auto;display:block}.chart .bar{fill:var(--sun)}.chart .bar:hover{fill:var(--ink)}.chart .ax{stroke:var(--ink);stroke-width:1px}.chart .gl{stroke:var(--lead);stroke-width:1px}.chart text{fill:var(--muted);font-family:inherit;font-size:9px}.chart text.v{fill:var(--ink-2)}.warnbox{border:1px solid var(--warn);color:var(--warn);margin:8px 0;padding:8px 10px;font-size:11px}.facts{color:var(--ink-2);font-size:10.5px;line-height:1.6}.facts li{margin:2px 0}.facts ul{margin:4px 0;padding-left:16px}.nogpu{border:1px solid var(--warn);margin:14px 0;padding:12px 14px;font-size:11.5px}.nogpu[hidden]{display:none}.nogpu b{color:var(--warn);letter-spacing:.06em}.toast{background:var(--ink);color:var(--paper);opacity:0;pointer-events:none;z-index:50;padding:6px 13px;font-size:11px;transition:opacity .14s,transform .14s;position:fixed;bottom:20px;left:50%;transform:translate(-50%,10px)}.toast.show{opacity:1;transform:translate(-50%)}svg .fp{fill:#ffffff14;stroke:#ffffff8c;stroke-width:1px;vector-effect:non-scaling-stroke}svg .face{fill:#ffffff1f;stroke:#ffffffb3;stroke-width:1px;vector-effect:non-scaling-stroke}svg .face.sel{fill:#ffc23d47;stroke:#ffc23d;stroke-width:2px}svg .pv{stroke:#000000a6;stroke-width:.6px;vector-effect:non-scaling-stroke}svg .pv.off{stroke:#ffffff80;stroke-dasharray:2 2;fill:#ffffff2e!important}svg .bld{fill:#ffc23d38;stroke:#ffc23d;stroke-width:2px;vector-effect:non-scaling-stroke}svg .lab{fill:#fff;stroke:#000000bf;stroke-width:3px;paint-order:stroke;vector-effect:non-scaling-stroke;text-anchor:middle;dominant-baseline:central;font-family:inherit;font-weight:700}svg .parcel{fill:none;stroke:#ffc23d;stroke-width:1.5px;stroke-dasharray:5 3;vector-effect:non-scaling-stroke}svg .draft{fill:none;stroke:#ff3b30;stroke-width:2px;vector-effect:non-scaling-stroke}svg .draftfill{fill:#ff3b3040;stroke:#ff3b30;stroke-width:2px;vector-effect:non-scaling-stroke}svg .dpt{fill:#fff;stroke:#ff3b30;stroke-width:1.5px;vector-effect:non-scaling-stroke}svg .dpt.first{fill:#ff3b30;stroke:#fff}svg .addr{fill:#ff3b30;stroke:#fff;stroke-width:1.5px;vector-effect:non-scaling-stroke}
