:root{--background:#f4f6f4;--panel:#fff;--ink:#1d2428;--muted:#65727c;--line:#d8dfda;--soft-line:#e8ede9;--accent:#117a65;--accent-strong:#0b5f4f;--accent-soft:#e7f5ef;--warn:#b42318;--blue:#2f6fbd;--shadow:0 12px 30px #1d2a2414}*{box-sizing:border-box}body{background:var(--background);min-height:100vh;color:var(--ink);letter-spacing:0;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}button,input{font:inherit}button{cursor:pointer}h1,h2,p{margin:0}h1{font-size:clamp(28px,4vw,42px);line-height:1}h2{font-size:18px}.shell{width:min(1180px,100% - 28px);margin:0 auto;padding:22px 0 40px}.auth-shell{grid-template-columns:minmax(0,1.1fr) minmax(320px,420px);align-items:center;gap:18px;min-height:100vh;display:grid}.loading-panel,.hero-panel,.auth-card{border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);border-radius:8px}.loading-panel{color:var(--muted);grid-column:1/-1;justify-self:center;align-items:center;gap:10px;padding:16px 18px;display:inline-flex}.hero-panel{gap:24px;padding:clamp(22px,4vw,42px);display:grid}.hero-copy{width:min(100%,620px);color:var(--muted);margin-top:14px;font-size:17px;line-height:1.5}.hero-points{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;display:grid}.hero-points span{border:1px solid var(--soft-line);min-width:0;color:var(--muted);overflow-wrap:anywhere;background:#fbfcfb;border-radius:8px;align-items:center;gap:8px;padding:12px;display:flex}.auth-card{padding:18px}.auth-tabs{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:14px;display:grid}.auth-tabs button{border:1px solid var(--line);min-height:40px;color:var(--muted);background:#fff;border-radius:8px;font-weight:850}.auth-tabs button.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.auth-form{gap:12px;display:grid}.topbar{justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;display:flex}.eyebrow{color:var(--accent);text-transform:uppercase;margin:0 0 5px;font-size:12px;font-weight:800}.status-pill{border:1px solid var(--line);background:var(--panel);min-height:38px;color:var(--muted);white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:0 14px;display:inline-flex}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.access-strip{grid-template-columns:minmax(240px,1fr) auto minmax(180px,auto) auto;align-items:center;gap:10px;margin-bottom:16px;display:grid}.token-field{border:1px solid var(--line);background:var(--panel);border-radius:8px;grid-template-columns:20px 1fr;align-items:center;gap:8px;min-height:44px;padding:0 12px;display:grid}.token-field input{width:100%;min-width:0;color:var(--ink);background:0 0;border:0;outline:0}.cloud-chip,.icon-button{border:1px solid var(--line);background:var(--panel);min-height:44px;color:var(--muted);white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:0 12px;display:inline-flex}.cloud-chip span{text-overflow:ellipsis;overflow:hidden}.cloud-chip.identity{justify-content:flex-start;min-width:0}.icon-button{color:var(--accent-strong);font-weight:800}.icon-button:disabled,.button:disabled,.device-tile:disabled,.gpio-tile:disabled{cursor:wait;opacity:.62}.alert{color:var(--warn);background:#fff4f2;border:1px solid #f1b4ad;border-radius:8px;margin-bottom:14px;padding:12px 14px}.notice{background:var(--accent-soft);color:var(--accent-strong);border:1px solid #75b798;border-radius:8px;margin-bottom:14px;padding:12px 14px}.device-area,.control-area{margin-top:16px}.section-title,.control-header{justify-content:space-between;align-items:center;gap:14px;margin-bottom:10px;display:flex}.section-title span,.device-status{border:1px solid var(--line);color:var(--muted);white-space:nowrap;border-radius:999px;padding:7px 10px;font-size:12px;font-weight:800}.device-tile-grid{grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:10px;display:grid}.device-tile{border:1px solid var(--line);background:var(--panel);min-height:148px;box-shadow:var(--shadow);color:var(--ink);text-align:left;border-radius:8px;align-content:start;gap:8px;padding:14px;display:grid}.device-tile svg{color:var(--accent)}.device-tile.selected{background:var(--accent-soft);border-color:#79bea5}.add-tile{color:var(--accent-strong);border-style:dashed}.device-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:16px;font-weight:850;overflow:hidden}.device-id,.device-meta{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.35;overflow:hidden}.control-area{border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);border-radius:8px;padding:16px}.control-header p{color:var(--muted);overflow-wrap:anywhere;margin-top:4px;font-size:13px}.gpio-tile-grid{grid-template-columns:repeat(auto-fill,minmax(126px,1fr));gap:10px;display:grid}.gpio-tile{border:1px solid var(--line);min-height:86px;color:var(--ink);text-align:left;background:#fbfcfb;border-radius:8px;grid-template-rows:auto auto;grid-template-columns:22px 1fr;align-items:center;gap:8px;padding:12px;display:grid}.gpio-tile span{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:800;overflow:hidden}.gpio-tile strong{color:var(--muted);grid-column:1/-1;font-size:22px;line-height:1}.gpio-tile.on{background:#e8f6ef;border-color:#75b798}.gpio-tile.on strong,.gpio-tile.on svg{color:var(--accent-strong)}.empty{min-height:260px;color:var(--muted);border:1px dashed #bdc7bf;border-radius:8px;place-items:center;gap:10px;display:grid}.sheet-backdrop{z-index:20;background:#12191c5c;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.sheet{border:1px solid var(--line);background:var(--panel);border-radius:8px;width:min(100%,440px);padding:18px;box-shadow:0 24px 70px #0c16123d}.setup-sheet{width:min(100%,640px)}.sheet-header{justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:18px;display:flex}.sheet-close{border:1px solid var(--line);width:36px;height:36px;color:var(--muted);background:#fff;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.field{color:var(--muted);gap:7px;font-size:13px;font-weight:800;display:grid}.field input{border:1px solid var(--line);width:100%;min-height:44px;color:var(--ink);background:#fbfcfb;border-radius:8px;padding:0 12px}.button{border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:8px;justify-content:center;align-items:center;gap:8px;width:100%;min-height:44px;margin-top:14px;font-weight:850;display:inline-flex}.button.secondary{color:var(--accent-strong);background:#fff}.setup-grid{gap:10px;display:grid}.claim-code{background:var(--accent-soft);color:var(--accent-strong);letter-spacing:0;text-align:center;border:1px solid #75b798;border-radius:8px;margin-bottom:14px;padding:18px;font-size:clamp(38px,12vw,72px);font-weight:900;line-height:1}.setup-note{color:var(--muted);margin-top:12px;font-size:14px;line-height:1.45}.setup-value{grid-template-columns:120px minmax(0,1fr) 40px;align-items:center;gap:8px;display:grid}.setup-value span{color:var(--muted);font-size:13px;font-weight:800}.setup-value code{border:1px solid var(--line);overflow-wrap:anywhere;background:#f7faf8;border-radius:8px;min-height:38px;padding:10px;display:block}.setup-value button{border:1px solid var(--line);width:40px;height:38px;color:var(--blue);background:#fff;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}@media (max-width:860px){.shell{width:min(100% - 20px,720px);padding-top:16px}.topbar{flex-direction:column;align-items:flex-start}.auth-shell{grid-template-columns:1fr;align-content:start;min-height:auto}.access-strip{grid-template-columns:1fr auto}.cloud-chip{justify-content:flex-start}.cloud-chip.phone{display:none}}@media (max-width:560px){.access-strip{grid-template-columns:1fr}.icon-button,.cloud-chip{width:100%}.device-tile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.device-tile{min-height:136px;padding:12px}.control-header{flex-direction:column;align-items:flex-start}.gpio-tile-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.setup-value{grid-template-columns:1fr 40px}.setup-value span{grid-column:1/-1}}
