:root{
  color-scheme: dark;
  --bg:#0d1117;
  --panel:#161d27;
  --panel-2:#1c2531;
  --line:#2a3543;
  --text:#f2f5fa;
  --muted:#9fadc0;
  --accent:#4f8cff;
  --ok:#4fc98a;
  --warn:#f2c14e;
  --danger:#ef5f5f;
  --shadow:0 16px 40px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{
  font-family:system-ui,-apple-system,"Hiragino Sans","Noto Sans JP","Meiryo",sans-serif;
  background:
    radial-gradient(circle at 15% -10%, rgba(79,140,255,.16), transparent 26rem),
    linear-gradient(180deg,#0d1117 0%, #0b0f15 100%);
  color:var(--text);
  min-height:100vh;
  -webkit-text-size-adjust:100%;
  overscroll-behavior-y:contain;
}
body.tripped{
  background:
    radial-gradient(circle at 50% 0%, rgba(239,95,95,.22), transparent 26rem),
    linear-gradient(180deg,#170c10 0%, #0b0f15 100%);
}
main{width:min(100%,760px);margin:0 auto;padding:14px 14px 40px}

/* header */
.head{display:flex;align-items:flex-start;gap:10px;padding:6px 2px 10px}
.head h1{margin:0;font-size:clamp(22px,6.2vw,32px);line-height:1.15;letter-spacing:.01em}
.head p{margin:6px 0 0;color:var(--muted);font-size:13px;line-height:1.5}
.head-btns{margin-left:auto;display:flex;gap:6px;flex-shrink:0}
.icon-btn{
  width:42px;height:42px;border-radius:10px;border:1px solid var(--line);
  background:var(--panel);color:var(--text);font-size:17px;cursor:pointer;
  display:grid;place-items:center;font-family:inherit;
}
.icon-btn[aria-pressed="false"]{color:var(--muted);opacity:.65}

/* view tabs */
.viewtabs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;background:var(--panel-2);
  border:1px solid var(--line);border-radius:12px;padding:4px;margin:4px 0;position:sticky;top:6px;z-index:5;
  box-shadow:0 6px 20px rgba(0,0,0,.35)}
.vt{padding:10px 6px;border-radius:9px;border:0;background:transparent;color:var(--muted);
  font-size:14px;font-family:inherit;cursor:pointer;white-space:nowrap}
.vt.active{background:var(--accent);color:#fff;font-weight:700}

.panel{
  background:var(--panel);border:1px solid var(--line);border-radius:14px;
  padding:14px;margin:12px 0;box-shadow:var(--shadow);
}
.panel h2{margin:0 0 10px;font-size:14px;color:var(--muted);font-weight:600;letter-spacing:.04em}

/* 表示切り替え */
body.view-lab .only-build, body.view-lab .only-play, body.view-lab .only-house{display:none}
body.view-build .only-lab, body.view-build .only-play, body.view-build .only-gauge{display:none}
body.view-play .only-lab, body.view-play .only-build{display:none}
body.view-play #contractPanel.locked{opacity:.55;pointer-events:none}

/* chips */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{
  padding:9px 13px;border-radius:999px;border:1px solid var(--line);
  background:var(--panel-2);color:var(--muted);font-size:14px;cursor:pointer;
  font-variant-numeric:tabular-nums;font-family:inherit;
}
.chip.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}
.chip.small{padding:6px 10px;font-size:12.5px}
.chip .sw{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}
.hint{margin:10px 0 0;color:var(--muted);font-size:12.5px;line-height:1.6}
.hint b{color:var(--text)}

/* gauge */
.meter{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;justify-items:center}
.gauge-wrap{width:min(100%,340px)}
svg.gauge{width:100%;height:auto;display:block}
.readout{text-align:center;margin-top:-14px}
.amp{font-size:clamp(38px,12vw,58px);font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.amp.over{color:var(--danger)}
.amp small{font-size:.42em;font-weight:600;margin-left:4px;color:var(--muted)}
.sub{margin-top:6px;color:var(--muted);font-size:13px;line-height:1.6}
.sub b{color:var(--text)}
.sub.over b{color:var(--danger)}
.heatbar{width:100%;max-width:340px;height:8px;border-radius:999px;background:var(--panel-2);
  border:1px solid var(--line);overflow:hidden;opacity:0;transition:opacity .2s}
.heatbar.on{opacity:1}
.heatbar i{display:block;height:100%;width:0%;background:linear-gradient(90deg,var(--warn),var(--danger));transition:width .12s linear}
.heatlabel{font-size:12px;color:var(--warn);min-height:17px;text-align:center}

/* 一日の進行 */
.daybar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.clock{display:flex;align-items:baseline;gap:10px}
.clock #clockView{font-size:clamp(30px,9vw,40px);font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:.03em}
.daymeta{color:var(--muted);font-size:13px}
.daybtns{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
.frames{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
.frames:empty{display:none}
.frame{flex:1;min-width:64px;text-align:center;padding:7px 4px;border-radius:9px;border:1px solid var(--line);
  background:var(--panel-2);color:var(--muted);font-size:12.5px}
.frame.done{opacity:.45}
.frame.now{border-color:var(--accent);color:#fff;background:rgba(79,140,255,.18);font-weight:700}
.daystats{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:6px;margin-top:10px}
.daystats:empty{display:none}
.stat{padding:7px 9px;border-radius:9px;background:var(--panel-2);border:1px solid var(--line)}
.stat .l{font-size:10.5px;color:var(--muted)}
.stat .v{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:1px}
.stat .v small{font-size:10.5px;color:var(--muted);font-weight:500;margin-left:2px}

/* 間取り図 */
.htoolbar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.madori-mini{font-weight:800;font-size:18px;margin-right:auto}
.svgwrap{border:1px solid var(--line);border-radius:12px;background:#0b1016;overflow:hidden;position:relative}
svg.house{width:100%;height:min(62vh,100vw,520px);display:block;touch-action:none;user-select:none;-webkit-user-select:none}
svg.house .rr{opacity:.28;stroke:rgba(255,255,255,.35);stroke-width:1.5}
svg.house .room.active .rr{opacity:.4}
svg.house .lit{fill:#ffe9a8;opacity:0;pointer-events:none;transition:opacity .3s}
svg.house .dark{fill:#02050a;opacity:0;pointer-events:none;transition:opacity .4s}
svg.house .room.dead .rr{stroke:var(--danger);stroke-width:2.5}
svg.house .room.isolated .rr{stroke:var(--danger);stroke-dasharray:6 4;stroke-width:2.5}
svg.house .room.bad .rr{fill:var(--danger)!important;opacity:.5}
svg.house .rname{fill:#fff;font-size:12px;font-weight:700;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.45);stroke-width:3px}
svg.house .rtat{fill:rgba(255,255,255,.55);font-size:10px;pointer-events:none}
svg.house .rtemp{font-size:11px;font-weight:700;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.5);stroke-width:2.5px}
svg.house .rtemp.ok{fill:#cfe0ff}
svg.house .rtemp.cold{fill:#7fd0ff}
svg.house .rtemp.hot{fill:#ff9a6a}
svg.house .rbadge{fill:var(--danger);font-size:13px;font-weight:800;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.6);stroke-width:3px}
svg.house .door{fill:#e9d9b8;opacity:.75;pointer-events:none}
svg.house .app .glow{fill:#ffd35a;opacity:0;transition:opacity .2s}
svg.house .app.on .glow{opacity:.55}
svg.house .app.waiting .glow{opacity:.15;fill:var(--danger)}
svg.house .app .aem{font-size:17px;opacity:.5;cursor:pointer}
svg.house .app.on .aem{opacity:1}
svg.house[data-mode="build"] .app .aem{opacity:.85}
svg.house .selbox{fill:none;stroke:#fff;stroke-width:2;stroke-dasharray:6 4;pointer-events:none}
svg.house .handle{fill:#fff;stroke:var(--accent);stroke-width:3;cursor:pointer}
svg.house .char{pointer-events:auto}
svg.house .bubble .bb{fill:#fff;stroke:#c9d4e3;stroke-width:1.2}
svg.house .bubble.urgent .bb{fill:#fff1d6;stroke:var(--warn);stroke-width:2}
svg.house .bubble.ok .bb{fill:#e3f8ec;stroke:var(--ok);stroke-width:2}
svg.house .bubble.missing .bb{fill:#ffe1e1;stroke:var(--danger)}
svg.house .bubble .ringbg{fill:none;stroke:#d8dee8;stroke-width:3}
svg.house .bubble .ring{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round}
svg.house .bubble.urgent .ring{stroke:var(--danger)}
svg.house .bubble .bslash{stroke:var(--danger);stroke-width:3;stroke-linecap:round}
svg.house .bubble{pointer-events:none}
.selbar{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:8px;padding:8px 10px;border:1px solid var(--line);
  border-radius:10px;background:var(--panel-2)}
.selbar[hidden]{display:none}
.selbar .nm{font-weight:700;margin-right:auto;font-size:14px}
.selbar .nm em{font-style:normal;color:var(--muted);font-size:12px;margin-left:6px}

/* 家族 */
.famstrip{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:7px}
.fam{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;padding:8px 9px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel-2);min-height:54px}
.fam .fe{font-size:24px;position:relative}
.fam .fe i{position:absolute;right:-6px;top:-6px;font-size:12px;font-style:normal}
.fam .fn{font-size:12.5px;font-weight:700;line-height:1.3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fam .fs{font-size:11px;color:var(--muted);line-height:1.3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fam.waiting{border-color:var(--warn)}
.fam.waiting .fs{color:var(--warn)}
.fam.urgent{border-color:var(--danger);background:#22141a}
.fam.urgent .fs{color:var(--danger)}
.fam.happy{border-color:var(--ok)}
.fam.happy .fs{color:var(--ok)}
.famlist{display:grid;gap:6px;margin-bottom:10px}
.famrow{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:8px;align-items:center;padding:7px 9px;
  border:1px solid var(--line);border-radius:10px;background:var(--panel-2)}
.famrow .fe{font-size:22px}
.famrow input{width:100%;min-width:0}
.famrow select{max-width:130px}
input[type="text"],input[type="number"],select,textarea{
  font:inherit;font-size:14px;color:var(--text);background:#0f151d;border:1px solid var(--line);border-radius:8px;padding:8px 10px}
textarea{width:100%;font-size:12px;resize:vertical;word-break:break-all}
.field{display:grid;gap:5px;margin:8px 0}
.field label{font-size:12px;color:var(--muted)}
.rates{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.switch{display:flex;gap:10px;align-items:flex-start;margin:8px 0;font-size:13.5px;color:var(--muted);line-height:1.5}
.switch input{width:20px;height:20px;flex-shrink:0;margin-top:1px}

/* 分電盤 */
.board{display:grid;gap:7px}
.circuit{
  display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:9px;
  padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);
}
.circuit .dot{width:10px;height:10px;border-radius:3px}
.circuit .nm{font-size:12.5px;line-height:1.35;min-width:0}
.circuit .nm em{font-style:normal;color:var(--muted);font-size:11px;display:block;
  font-variant-numeric:tabular-nums;margin-top:1px}
.circuit .bar{height:6px;border-radius:999px;background:#0f151d;overflow:hidden;margin-top:5px;border:1px solid var(--line)}
.circuit .bar i{display:block;height:100%;width:0%;background:var(--ok);transition:width .12s linear}
.circuit.warn .bar i{background:var(--warn)}
.circuit.over .bar i{background:var(--danger)}
.circuit .lever{
  width:44px;height:32px;border-radius:8px;border:1px solid var(--line);background:#0f151d;
  position:relative;flex-shrink:0;font-family:inherit;cursor:default;padding:0;
}
.circuit .lever::after{
  content:"";position:absolute;left:5px;right:5px;height:11px;border-radius:4px;
  background:var(--ok);top:4px;transition:top .12s,background .12s;
}
.circuit.tripped{border-color:rgba(239,95,95,.6);background:#22141a}
.circuit.tripped .lever{cursor:pointer;border-color:rgba(239,95,95,.6)}
.circuit.tripped .lever::after{top:15px;background:var(--danger)}
.circuit.tripped .nm b{color:var(--danger)}
body.mainoff .circuit{opacity:.5}

/* appliances */
.cat{margin:18px 0 8px;font-size:13px;color:var(--muted);letter-spacing:.04em}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:8px}
.grid.compact{grid-template-columns:repeat(auto-fill,minmax(94px,1fr));gap:6px}
.card{
  position:relative;border:1px solid var(--line);border-radius:12px;background:var(--panel);
  padding:10px 8px 8px;text-align:center;cursor:pointer;color:var(--text);
  display:flex;flex-direction:column;align-items:center;gap:3px;min-height:104px;
  transition:transform .08s,border-color .15s,background .15s;font-family:inherit;
}
.grid.compact .card{min-height:84px;padding:8px 6px 6px;background:var(--panel-2)}
.card:active{transform:scale(.96)}
.card .em{font-size:24px;line-height:1.1}
.grid.compact .card .em{font-size:20px}
.card .nm{font-size:12.5px;font-weight:600;line-height:1.25}
.grid.compact .card .nm{font-size:11.5px}
.card .wt{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.grid.compact .card .wt{font-size:10px}
.card.on{background:linear-gradient(180deg,rgba(79,140,255,.22),rgba(79,140,255,.06));border-color:var(--accent)}
.card.on .wt{color:#cfe0ff}
.card .v200{
  position:absolute;top:6px;right:6px;font-size:9.5px;padding:1px 4px;border-radius:4px;
  background:rgba(242,193,78,.16);color:var(--warn);border:1px solid rgba(242,193,78,.3);
}
.card.surging{animation:surge .5s ease-out}
@keyframes surge{0%{box-shadow:0 0 0 0 rgba(242,193,78,.6)}100%{box-shadow:0 0 0 14px rgba(242,193,78,0)}}
.pickcat{margin:10px 0 6px;font-size:12px;color:var(--muted)}

.row-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.btn{
  padding:11px 15px;border-radius:10px;border:1px solid var(--line);background:var(--panel-2);
  color:var(--text);font-size:14px;cursor:pointer;font-family:inherit;
}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}
.btn.ghost{background:transparent}
.btn.danger{color:var(--danger);border-color:rgba(239,95,95,.5)}
.btn.small{padding:8px 11px;font-size:13px}
.btn.big{padding:13px 18px;font-size:15px}
.btn:disabled{opacity:.4;cursor:default}

/* 部屋シートの機器行 */
.sheet-head{display:flex;align-items:baseline;gap:10px}
.sheet-sub{color:var(--muted);font-size:13px}
.placed{display:grid;gap:6px;margin:6px 0 2px}
.placed-row{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;
  padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);
  cursor:pointer;color:var(--text);font-family:inherit;text-align:left;
}
.placed-row.on{border-color:var(--accent);
  background:linear-gradient(180deg,rgba(79,140,255,.18),rgba(79,140,255,.04))}
.placed-row .pe{font-size:21px}
.placed-row .pn{font-size:13.5px;line-height:1.35;min-width:0}
.placed-row .pn em{font-style:normal;display:block;color:var(--muted);font-size:11px;
  font-variant-numeric:tabular-nums;margin-top:2px}
.placed-row .st{font-size:11.5px;color:var(--muted);border:1px solid var(--line);
  border-radius:999px;padding:3px 9px;white-space:nowrap}
.placed-row.on .st{color:#cfe0ff;border-color:rgba(79,140,255,.6)}
.rm-btn{width:36px;height:34px;border-radius:8px;border:1px solid var(--line);
  background:transparent;color:var(--muted);font-size:15px;cursor:pointer;font-family:inherit}
.empty{color:var(--muted);font-size:13px;margin:8px 0 2px}

/* テンプレ一覧 */
.tpl-list{display:grid;gap:8px}
.tpl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center;padding:10px;border:1px solid var(--line);
  border-radius:12px;background:var(--panel-2);cursor:pointer;color:var(--text);font-family:inherit;text-align:left}
.tpl svg{width:92px;height:64px;display:block}
.tpl b{font-size:15px}
.tpl span{display:block;color:var(--muted);font-size:12px;margin-top:2px}

/* 結果 */
.stars{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0 12px}
.star{padding:10px 6px;border-radius:12px;border:1px solid var(--line);background:var(--panel-2);text-align:center}
.star .s{font-size:30px;line-height:1.1;filter:grayscale(1);opacity:.35}
.star.got .s{filter:none;opacity:1}
.star .t{font-size:11.5px;color:var(--muted);margin-top:4px;line-height:1.3}
.star.got .t{color:var(--text);font-weight:700}
.result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:6px}
.result-grid .stat .v{font-size:17px}
.advice{margin:8px 0;padding:10px 12px;border-radius:10px;background:var(--panel-2);border:1px solid var(--line);font-size:13.5px;line-height:1.7;color:var(--muted)}
.advice b{color:var(--text)}
.advice .big{font-size:22px;font-weight:800;color:var(--text)}
table.ctab{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:6px}
table.ctab th{color:var(--muted);font-weight:600;text-align:left;padding:4px 6px;border-bottom:1px solid var(--line);font-size:11.5px}
table.ctab td{padding:5px 6px;border-bottom:1px solid rgba(42,53,67,.6);font-variant-numeric:tabular-nums}
table.ctab td:nth-child(2),table.ctab td:nth-child(3){text-align:right}
table.ctab tr.now td{color:#fff;font-weight:700;background:rgba(79,140,255,.12)}
table.ctab tr.trip td{color:var(--danger)}
table.ctab tr.best td{color:var(--ok)}
.peaklist{font-size:12px;color:var(--muted);line-height:1.6}

/* trip overlay */
.overlay{position:fixed;inset:0;background:rgba(4,6,9,.93);z-index:50;display:none;place-items:center;
  padding:20px;backdrop-filter:blur(2px)}
.overlay.open{display:grid;animation:blackout .45s ease-out}
@keyframes blackout{0%{opacity:0}8%{opacity:1;background:#fff}16%{background:rgba(4,6,9,.93)}100%{opacity:1}}
.trip-box{width:min(100%,420px);background:var(--panel);border:1px solid rgba(239,95,95,.5);
  border-radius:16px;padding:20px;text-align:center;box-shadow:0 24px 60px rgba(0,0,0,.6)}
.trip-box .bang{font-size:clamp(30px,9vw,42px);font-weight:900;color:var(--danger);margin:0 0 4px;letter-spacing:.06em}
.trip-box .why{margin:10px 0 0;color:var(--muted);font-size:14px;line-height:1.7}
.trip-box .why b{color:var(--text)}
.trip-box .cause{margin:14px 0 0;padding:10px;border-radius:10px;background:var(--panel-2);
  border:1px solid var(--line);font-size:13.5px;line-height:1.6;text-align:left;color:var(--muted)}
.trip-box .cause b{color:var(--text)}
.trip-box table{width:100%;border-collapse:collapse}
.trip-box td{padding:2px 0;font-size:12.5px}
.trip-box td:last-child{text-align:right;font-variant-numeric:tabular-nums}
.trip-actions{display:grid;gap:8px;margin-top:16px}

/* toast */
.toast{
  position:fixed;left:50%;bottom:20px;transform:translate(-50%,20px);z-index:40;
  background:#2a1418;border:1px solid rgba(239,95,95,.6);color:var(--text);
  padding:11px 15px;border-radius:12px;font-size:13.5px;line-height:1.5;max-width:min(92vw,420px);
  box-shadow:0 14px 40px rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;
}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.info{background:#15202c;border-color:rgba(79,140,255,.6)}
.toast.good{background:#132a1f;border-color:rgba(79,201,138,.6)}

/* modal */
.modal{position:fixed;inset:0;background:rgba(4,6,9,.7);z-index:60;display:none;align-items:flex-end;justify-content:center}
.modal.open{display:flex}
.sheet{width:min(100%,640px);max-height:88vh;overflow:auto;background:var(--panel);
  border:1px solid var(--line);border-radius:16px 16px 0 0;padding:18px 16px 28px}
.sheet h3{margin:0 0 4px;font-size:18px}
.sheet h4{margin:18px 0 6px;font-size:14.5px;color:var(--accent)}
.sheet p,.sheet li{color:var(--muted);font-size:13.5px;line-height:1.75;margin:6px 0}
.sheet ul{padding-left:1.2em;margin:6px 0}
.sheet b{color:var(--text)}

footer{margin-top:24px;color:#7d8899;font-size:11.5px;line-height:1.7;text-align:center}
