:root{--ink:#22262b;--paper:#fffaf2;--line:#22262b;--mut:#6f6a62;--open:#ff7a1a;--openD:#c2560b;--done:#22b06b;--doneD:#167a4a;--blue:#3fb4ff;--red:#e5483b;--floor:#f4efe6}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;color:var(--ink);-webkit-user-select:none;user-select:none;touch-action:none;background:#2d3238;margin:0;font-family:Nunito,DM Sans,system-ui,-apple-system,sans-serif;overflow:hidden}canvas{display:block}.mono{font-family:JetBrains Mono,ui-monospace,Consolas,monospace}button{font-family:inherit}.top{top:calc(10px + env(safe-area-inset-top));z-index:20;align-items:center;gap:8px;display:flex;position:fixed;left:10px;right:118px}.room{background:var(--paper);border:3px solid var(--line);min-width:0;max-height:64px;box-shadow:0 4px 0 var(--line);border-radius:18px;flex:1;align-items:center;gap:10px;padding:6px 12px 6px 6px;display:flex}.room .rt{min-width:0}.room .rt b{white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:900;display:block;overflow:hidden}.room .rt span{color:var(--mut);white-space:nowrap;font-size:12px;font-weight:700}.ring{--p:0;background:conic-gradient(var(--done) calc(var(--p)*1%),#e6dfd3 0);border:2px solid var(--line);border-radius:50%;flex:none;justify-content:center;align-items:center;width:42px;height:42px;display:flex}.ring span{background:var(--paper);border-radius:50%;justify-content:center;align-items:center;width:30px;height:30px;font-size:10px;font-weight:900;display:flex}.ib{background:var(--paper);border:3px solid var(--line);width:46px;height:46px;box-shadow:0 4px 0 var(--line);cursor:pointer;color:var(--ink);border-radius:14px;flex:none;justify-content:center;align-items:center;font-size:20px;font-weight:900;display:flex;position:relative}.ib:active,.act:active,.quest:active,.btn:active{box-shadow:0 1px 0 var(--line);transform:translateY(3px)}.ib.round{border-radius:50%;width:54px;height:54px;font-size:26px}.badge{background:var(--blue);color:#fff;border:2px solid var(--line);border-radius:10px;justify-content:center;align-items:center;min-width:20px;height:20px;font-size:11px;font-style:normal;font-weight:900;display:flex;position:absolute;top:-8px;right:-8px}.minimap{top:calc(10px + env(safe-area-inset-top));z-index:20;border:3px solid var(--line);cursor:pointer;background:#1d2126e6;border-radius:18px;width:100px;height:100px;padding:4px;position:fixed;right:10px;box-shadow:0 4px #000}.bigmap{background:#1d2126;border-radius:14px;width:100%;height:auto;max-height:52vh;padding:6px}.mr{stroke:#11151a;stroke-width:.12px}.mr.f{fill:#4a4f56}.mr.v{fill:#d7cfc1}.mr.h{fill:#fff6e6;stroke:var(--blue);stroke-width:.25px}.mr.c{fill:#6fd39a}.mt{fill:#22262b;text-anchor:middle;dominant-baseline:middle;pointer-events:none;font-size:.9px;font-weight:900}.me{fill:var(--blue);stroke:#fff;stroke-width:.25px}.legend{color:var(--mut);flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;font-size:12px;font-weight:700;display:flex}.lc{border:2px solid var(--line);border-radius:3px;width:12px;height:12px;margin-right:2px;display:inline-block}.lc.c{background:#6fd39a}.lc.h{background:#fff6e6}.lc.v{background:#d7cfc1}.lc.f{background:#4a4f56}.banner{z-index:40;background:var(--paper);border:3px solid var(--line);box-shadow:0 6px 0 var(--line);text-align:center;opacity:0;pointer-events:none;border-radius:20px;min-width:240px;padding:12px 22px;transition:all .35s cubic-bezier(.2,1.6,.4,1);position:fixed;top:22%;left:50%;transform:translate(-50%,-30px)scale(.9)}.banner.on{opacity:1;transform:translate(-50%)scale(1)}.banner{flex-direction:column;gap:2px;display:flex}.banner b{white-space:nowrap;font-size:20px;font-weight:900;display:block}.banner span{color:var(--mut);font-size:13px;font-weight:700}.banner.clear{background:var(--done);color:#fff}.banner.clear span{color:#eafff3}.banner.clear b{font-size:26px}.banner.warn{background:#ffe7d6}.joy{left:18px;bottom:calc(22px + env(safe-area-inset-bottom));z-index:20;touch-action:none;background:#ffffff26;border:3px solid #fff5;border-radius:50%;justify-content:center;align-items:center;width:124px;height:124px;display:flex;position:fixed}.knob{background:var(--paper);border:3px solid var(--line);width:54px;height:54px;box-shadow:0 4px 0 var(--line);border-radius:50%;transition:transform 50ms}.actions{right:14px;bottom:calc(22px + env(safe-area-inset-bottom));z-index:20;flex-direction:column;align-items:flex-end;gap:10px;display:flex;position:fixed}.act{background:var(--open);color:#fff;border:3px solid var(--line);width:96px;height:96px;box-shadow:0 5px 0 var(--line);cursor:pointer;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;animation:1.4s ease-in-out infinite pulse;display:flex}.act b{font-size:14px;font-weight:900}.act small{font-size:10px;font-weight:800}.act .ai{font-size:22px;line-height:1}@keyframes pulse{50%{transform:scale(1.06)}}.actwrap{align-items:center;gap:6px;display:flex}.cyc{background:var(--paper);border:3px solid var(--line);width:40px;height:40px;box-shadow:0 3px 0 var(--line);cursor:pointer;border-radius:50%;font-size:16px;font-weight:900}.quest{background:var(--paper);border:3px solid var(--line);box-shadow:0 4px 0 var(--line);cursor:pointer;color:var(--ink);border-radius:16px;padding:12px 14px;font-size:14px;font-weight:900}.sheet{z-index:30;background:var(--paper);border:3px solid var(--line);max-width:540px;padding:8px 16px calc(18px + env(safe-area-inset-bottom));touch-action:pan-y;border-bottom:0;border-radius:26px 26px 0 0;max-height:64%;margin:0 auto;animation:.35s cubic-bezier(.2,1.2,.3,1) up;position:fixed;bottom:0;left:0;right:0;overflow:auto;box-shadow:0 -6px #0003}@keyframes up{0%{transform:translateY(100%)}to{transform:none}}.grab{cursor:pointer;background:#d3cabb;border-radius:3px;width:44px;height:6px;margin:0 auto 10px}.sh-h{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.sh-h b{font-size:19px}.sh-h span{color:var(--mut);font-size:12px;font-weight:700}.x{cursor:pointer;background:0 0;border:0;margin-left:auto;font-size:18px;font-weight:900}.flags{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.flag{color:var(--openD);background:#ffe7d6;border-radius:8px;padding:3px 7px;font-size:11px;font-weight:900}.flag.red{color:#b3261e;background:#fde2df}.flag.blue{color:#1b6fa8;background:#dcf1ff}.flag.grey{color:#5c564e;background:#ece6dc}.hgt{color:var(--mut);align-items:center;gap:6px;margin-top:10px;font-size:13px;font-weight:800;display:flex}.hgt button{border:2px solid var(--line);cursor:pointer;width:36px;height:36px;box-shadow:0 2px 0 var(--line);background:#fff;border-radius:11px;font-size:16px;font-weight:900}.hgt b{text-align:center;min-width:64px;color:var(--ink)}.hgt .cam{border:2px solid var(--line);cursor:pointer;width:40px;height:36px;box-shadow:0 2px 0 var(--line);background:#fff;border-radius:11px;justify-content:center;align-items:center;margin-left:auto;font-size:18px;display:flex}.photos{align-items:center;gap:6px;margin-top:8px;display:flex;overflow-x:auto}.photos img{object-fit:cover;border:2px solid var(--line);border-radius:10px;width:56px;height:56px}.edit{background:var(--floor);border:2px solid #e2d9cb;border-radius:14px;margin-top:10px;padding:10px}.el{color:var(--mut);text-transform:uppercase;letter-spacing:.06em;margin:4px 0 6px;font-size:11px;font-weight:900}.chips2{flex-wrap:wrap;gap:6px;display:flex}.chips2 button{border:2px solid var(--line);cursor:pointer;background:#fff;border-radius:11px;padding:8px 11px;font-size:13px;font-weight:800}.chips2 button.on{background:var(--ink);color:#fff}.q{margin:12px 0 4px;font-size:20px;font-weight:900;line-height:1.2}.s{color:var(--mut);font-size:12px;font-weight:700}p.s{font-size:14px}.opt{cursor:pointer;background:#fff;border:2px solid #e2d9cb;border-radius:16px;align-items:center;gap:12px;margin-top:8px;padding:11px;display:flex}.opt.sug{border:3px solid var(--done)}.opt .k{font-weight:900}.opt .go{background:var(--done);color:#fff;border:2px solid var(--line);box-shadow:0 3px 0 var(--line);border-radius:11px;margin-left:auto;padding:8px 12px;font-size:13px;font-weight:900}.cab{background:conic-gradient(#7b4520 0 20%,#25282b 0 40%,#8d9298 0 60%,#3d6fb6 0 80%,#7cc242 0 90%,#f2d43c 0);border:2px solid var(--line);border-radius:50%;flex:none;width:28px;height:28px}.lnk{text-align:center;color:var(--mut);cursor:pointer;margin-top:14px;font-size:13px;font-weight:800}.plate{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:12px;display:flex}.sk{cursor:pointer;background:#fff;border:3px dashed #b9b0a2;border-radius:20px;flex-direction:column;justify-content:center;align-items:center;gap:6px;width:76px;height:94px;display:flex;position:relative}.sk .n{color:var(--mut);font-size:11px;font-weight:900;position:absolute;top:6px;left:9px}.sk .face{background:radial-gradient(circle at 50% 35%,#fff,#d7dce0);border-radius:50%;width:44px;height:44px;position:relative;box-shadow:inset 0 -3px #0002,0 0 0 1px #0001}.sk .face:before,.sk .face:after{content:"";background:#2a333b;border-radius:50%;width:8px;height:8px;position:absolute;top:18px}.sk .face:before{left:9px}.sk .face:after{right:9px}.sk .f{color:var(--mut);font-size:11px;font-weight:900}.sk.arm{border:3px solid var(--open)}.sk.ok{border:3px solid var(--done);background:#ecfaf1}.sk.ok .face{box-shadow:0 0 0 4px var(--wc)}.wires{margin-top:12px}.w{cursor:pointer;border:3px solid #0000;border-radius:14px;align-items:center;padding:8px 6px;display:flex}.w.on{border-color:var(--open);background:#fff1e6}.w .ins{border-radius:9px 2px 2px 9px;width:150px;height:18px;box-shadow:inset 0 -4px #0005,inset 0 3px #ffffff30}.w .cu{background:linear-gradient(#ffc58f,#c4743a 60%,#8a4a1c);border-radius:0 4px 4px 0;width:26px;height:8px}.w .nm{margin-left:10px;font-size:14px;font-weight:900}.w .fn{color:var(--mut);margin-left:auto;font-size:11px;font-weight:700}.hint{color:var(--mut);margin:6px;font-size:12px;font-weight:700}.hint a{color:#1b6fa8;cursor:pointer;text-decoration:underline}.btn{border:3px solid var(--line);cursor:pointer;background:var(--done);color:#fff;width:100%;box-shadow:0 5px 0 var(--line);border-radius:16px;margin-top:12px;padding:14px;font-size:16px;font-weight:900;display:block}.btn.sec{color:var(--ink);box-shadow:0 3px 0 var(--line);background:#fff}.btn:disabled{opacity:.45}.online{top:calc(118px + env(safe-area-inset-top));z-index:20;flex-direction:column;align-items:flex-end;gap:4px;max-width:150px;display:flex;position:fixed;right:10px}.online i{border:2px solid var(--line);background:#999;border-radius:50%;width:10px;height:10px}.online i.on{background:var(--done)}.online span{background:var(--paper);border:2px solid var(--line);border-left:6px solid var(--c,#999);white-space:nowrap;border-radius:9px;padding:2px 7px;font-size:11px;font-weight:900}.toast{left:50%;top:calc(80px + env(safe-area-inset-top));z-index:45;background:var(--ink);color:#fff;opacity:0;pointer-events:none;white-space:nowrap;border-radius:12px;padding:8px 14px;font-size:13px;font-weight:900;transition:all .3s;position:fixed;transform:translate(-50%,-14px)}.toast.on{opacity:1;transform:translate(-50%)}.login{z-index:60;background:#1d2126d9;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.login .card{background:var(--paper);border:3px solid var(--line);box-shadow:0 6px 0 var(--line);border-radius:22px;width:100%;max-width:360px;padding:18px}.login input{border:2px solid var(--line);border-radius:12px;width:100%;margin-top:12px;padding:12px;font:800 15px inherit}.colors{gap:8px;display:flex}.colors i{border:3px solid var(--line);cursor:pointer;border-radius:50%;width:34px;height:34px}.colors i.on{box-shadow:0 0 0 3px #fff,0 0 0 6px var(--line)}.filters{left:0;right:0;top:calc(84px + env(safe-area-inset-top));z-index:19;scrollbar-width:none;gap:6px;margin-right:110px;padding:4px 10px 8px;display:flex;position:fixed;overflow-x:auto}.filters button{background:var(--paper);border:2px solid var(--line);box-shadow:0 3px 0 var(--line);cursor:pointer;white-space:nowrap;border-radius:12px;flex:none;padding:7px 10px;font-family:inherit;font-size:12px;font-weight:900}.filters button.on{background:var(--ink);color:#fff}.filters button i{opacity:.7;margin-left:3px;font-style:normal}.row2{gap:8px;display:flex}.li{text-align:center;width:28px;font-size:20px}.st{color:var(--mut);margin-left:auto;font-size:18px;font-weight:900}.opt.isdone{opacity:.55}.opt.isdone .st{color:var(--done)}.filterbtn{left:10px;top:calc(84px + env(safe-area-inset-top));z-index:19;background:var(--paper);border:3px solid var(--line);box-shadow:0 4px 0 var(--line);cursor:pointer;border-radius:16px;align-items:center;gap:8px;max-width:calc(100vw - 130px);padding:9px 12px;font-family:inherit;display:flex;position:fixed}.filterbtn span{font-size:18px}.filterbtn b{white-space:nowrap;font-size:14px;font-weight:900}.filterbtn i{color:var(--mut);white-space:nowrap;font-size:12px;font-style:normal;font-weight:800}.filterbtn em{font-style:normal;font-weight:900}.tiles{grid-template-columns:1fr 1fr;gap:10px;margin-top:10px;display:grid}.tile{border:3px solid var(--line);box-shadow:0 4px 0 var(--line);cursor:pointer;text-align:left;background:#fff;border-radius:16px;flex-direction:column;align-items:flex-start;gap:2px;min-height:84px;padding:12px;font-family:inherit;display:flex}.tile span{font-size:24px}.tile b{font-size:15px;font-weight:900}.tile i{color:var(--mut);font-size:12px;font-style:normal;font-weight:800}.tile.on{background:var(--ink);color:#fff}.tile.on i{color:#ddd}.tile.clear i{color:var(--done)}.cabcard{align-items:flex-start}.cabcard .cab{margin-top:3px}.cc{min-width:0}.cabcard .k{font-size:15px;font-weight:900}.cabcard .note{color:var(--ink);margin-top:3px;font-size:13px;font-style:italic}.cabcard .why{color:var(--done);margin-top:4px;font-size:11px;font-weight:800}.cabcard .why .mono{color:#aaa29a;margin-left:4px;font-weight:600}.cabcard .go{align-self:center}.quick{max-height:70%}.qh{align-items:center;display:flex}.qh b{font-size:16px;font-weight:900;display:block}.qh span{color:var(--mut);font-size:12px;font-weight:800}.walls{flex-direction:column;gap:8px;margin-top:8px;display:flex}.wallrow .wt{color:var(--mut);margin-bottom:3px;font-size:12px;font-weight:900}.wallrow .wt i{color:var(--openD);font-style:normal}.elev{border:2px solid var(--line);background:linear-gradient(#fff,#f1ebe0);border-radius:12px;height:96px;margin:0 16px;position:relative;overflow:visible}.elev:after{content:"";background:#cfc6b7;border-radius:0 0 10px 10px;height:6px;position:absolute;bottom:-2px;left:0;right:0}.dot{border:2px solid var(--line);background:var(--open);cursor:pointer;width:30px;height:30px;box-shadow:0 2px 0 var(--line);border-radius:10px;justify-content:center;align-items:center;padding:0;font-size:16px;animation:1.4s ease-in-out infinite pulse;display:flex;position:absolute;transform:translate(-50%,50%)}.dot.done{background:#bfe9cf;animation:none}.dot.sel{background:var(--blue);z-index:2;box-shadow:0 0 0 4px #3fb4ff55}.flat{flex-wrap:wrap;gap:8px;display:flex}.flat .dot{position:static;transform:none}.qcard{border:3px solid var(--line);box-shadow:0 4px 0 var(--line);background:#fff;border-radius:16px;margin-top:12px;padding:12px}.qt{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.qt b{font-size:17px}.qt span{color:var(--mut);font-size:12px;font-weight:800}.qt .ok{color:var(--done);font-size:12px;font-style:normal;font-weight:900}.qsug{margin-top:8px}.qsug .k{font-weight:900}.qsug .s{color:var(--mut);font-size:12px;font-weight:700}.qsug .why{color:var(--done);margin-top:3px;font-size:11px;font-weight:800}.qbtns{grid-template-columns:2fr 1fr;gap:8px;display:grid}.qbtns .btn{margin-top:10px}.cablebtn{color:#fff;background:#22262b}.cablepanel{z-index:25;background:var(--paper);border:3px solid var(--line);max-width:540px;padding:10px 12px calc(14px + env(safe-area-inset-bottom));border-bottom:0;border-radius:22px 22px 0 0;margin:0 auto;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -6px #0003}.cp-h b{font-size:16px;font-weight:900;display:block}.cp-h span{color:var(--mut);font-size:12px;font-weight:800}.cp-list{flex-direction:column;gap:6px;max-height:32vh;margin-top:8px;display:flex;overflow:auto}.cp-k{text-align:left;border:2px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;grid-template-rows:auto auto;grid-template-columns:16px 1fr auto;align-items:center;column-gap:8px;padding:8px 10px;font-family:inherit;display:grid}.cp-k i{background:var(--c);border:2px solid var(--line);border-radius:50%;grid-row:1/3;width:16px;height:16px}.cp-k b{font-size:14px;font-weight:900}.cp-k span{color:var(--mut);white-space:nowrap;text-overflow:ellipsis;grid-column:2;font-size:11px;font-weight:700;overflow:hidden}.cp-k em{grid-area:1/3/3;font-size:11px;font-style:normal;font-weight:900}.cp-k.on{background:var(--c);box-shadow:0 0 0 3px var(--line)}.cp-btns{grid-template-columns:1fr 2fr;gap:8px;display:grid}.cable2d{max-height:78%}.kchips{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.kchip{border:2px solid var(--line);cursor:pointer;box-shadow:0 2px 0 var(--line);background:#fff;border-radius:12px;align-items:center;gap:6px;padding:7px 9px;font-family:inherit;display:flex}.kchip i{background:var(--c);border:2px solid var(--line);border-radius:50%;width:14px;height:14px}.kchip b{font-size:13px;font-weight:900}.kchip em{color:var(--mut);font-size:11px;font-style:normal;font-weight:900}.kchip.on{background:var(--c);box-shadow:0 4px 0 var(--line);transform:translateY(-2px)}.kchip.on em{color:var(--ink)}.kchip.empty{border-style:dashed}.kinfo{color:var(--mut);margin:8px 2px 2px;font-size:12px;font-weight:800}.kinfo span{color:var(--openD)}.dot.k.linked{color:#fff;animation:none}.dot.k.dimmed{opacity:.3}.book{background:#fbf3e3}.chapter{border:2px solid var(--line);box-shadow:0 3px 0 var(--line);background:#fff;border-radius:16px;margin-top:10px;overflow:hidden}.ch-h{cursor:pointer;align-items:center;gap:10px;padding:10px 12px;display:flex}.ci{text-align:center;width:34px;font-size:24px}.ct{flex:1;min-width:0}.ct b{font-size:16px;font-weight:900;display:block}.ct span{color:var(--mut);font-size:11px;font-weight:700}.pbar{background:#ece4d6;border-radius:4px;height:7px;margin-top:5px;overflow:hidden}.pbar i{background:var(--done);height:100%;display:block}.cn{font-size:14px;font-weight:900}.ch-r{cursor:pointer;border-top:1px solid #eee3d2;align-items:center;gap:8px;padding:9px 12px 9px 56px;font-size:13px;display:flex}.ch-r span{color:var(--mut);flex:1;font-weight:700}.ch-r i{color:var(--openD);font-style:normal;font-weight:900}.ch-r.ok i{color:var(--done)}.confetti{pointer-events:none;z-index:50;position:fixed;inset:0;overflow:hidden}.confetti i{border-radius:2px;width:10px;height:16px;animation:linear forwards fall;position:absolute;top:-20px}@keyframes fall{to{top:110%;transform:rotate(720deg)translate(40px)}}.startline{border:3px solid var(--line);background:var(--open);color:#fff;cursor:pointer;width:calc(100% - 20px);box-shadow:0 3px 0 var(--line);border-radius:12px;margin:4px 10px 8px;padding:10px;font-family:inherit;font-size:14px;font-weight:900;display:block}.hpre{color:var(--mut);flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;font-size:13px;font-weight:800;display:flex}.hpre button{border:2px solid var(--line);cursor:pointer;box-shadow:0 2px 0 var(--line);color:var(--ink);background:#fff;border-radius:11px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:900}.hpre button.on{background:var(--ink);color:#fff}.hpre form{gap:6px;display:flex}.hpre input{border:2px solid var(--line);border-radius:11px;width:84px;padding:8px;font-family:inherit;font-size:14px;font-weight:900}.qbtns.one{grid-template-columns:1fr}.wwrap{align-items:center;gap:6px;display:flex}.wwrap .elev{flex:1;margin:0 16px 0 14px}.wkey{flex:none;width:48px;height:48px}.corner{border-left:2px dashed #cfc6b7;position:absolute;top:0;bottom:0}.kchips{grid-template-columns:1fr 1fr;gap:6px;display:grid}.kchip{text-align:left;flex-direction:column;align-items:stretch;gap:2px;min-width:0;padding:7px 8px}.kchip .kc1{align-items:center;gap:6px;display:flex}.kchip .kc1 b{flex:1}.kchip .kc2{font-size:11px;font-weight:800}.kchip .kc3{color:var(--mut);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:11px;font-weight:700;display:-webkit-box;overflow:hidden}.kchip .kc4{font-size:11px;font-weight:900}.kchip .kc4.warn{color:#c2410c}.kchip .kc5{color:var(--mut);font-size:10px;font-weight:700}.kchip.on .kc3,.kchip.on .kc5{color:var(--ink)}.kchip.on{order:-1;grid-column:1/-1}.kchip.mini>div:not(.kc1){display:none}.kchip.mini{padding:5px 8px}.kchip.mini em{font-size:10px}.kchips:has(.on){grid-template-columns:1fr 1fr 1fr}.kchips:has(.on) .kchip.mini b{font-size:12px}.kchip.mini b{white-space:nowrap}.kchip.mini .kc1{gap:4px}.kchip.mini i{width:11px;height:11px}
