:root{--color-bg-base:#141226;--color-bg-elevated:#1a1730;--color-bg-raised:#221d3d;--color-surface:#1e1a378c;--color-surface-hi:#282248a6;--color-surface-soft:#231e4159;--color-line:#c8beff14;--color-line-emphasis:#c8beff29;--color-text:#e8e4f5;--color-text-dim:#bfb8d8;--color-text-muted:#938cb0;--color-text-disabled:#6a6485;--color-primary:#9eb0ff;--color-primary-strong:#b8c4ff;--color-primary-soft:#c4b5fd;--color-primary-bg:#9eb0ff1f;--color-primary-bg-hi:#9eb0ff38;--color-primary-border:#9eb0ff66;--color-ok:#7fd9a6;--color-ok-bg:#7fd9a624;--color-ok-bg-strong:#7fd9a638;--color-ok-border:#7fd9a640;--color-warn:#f4c56b;--color-warn-bg:#f4c56b24;--color-warn-bg-strong:#f4c56b38;--color-warn-border:#f4c56b40;--color-bad:#f08b8b;--color-bad-bg:#f08b8b24;--color-bad-bg-strong:#f08b8b38;--color-bad-border:#f08b8b40;--color-dawn:#f4c56b;--color-noon:#9eb0ff;--color-dusk:#d29bff;--color-night:#c8beff2e;--font-body:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-display:"Manrope", "Inter", system-ui, sans-serif;--text-xs:11px;--text-sm:12px;--text-base:14px;--text-md:15px;--text-lg:18px;--text-xl:22px;--text-2xl:28px;--text-3xl:32px;--text-display:56px;--leading-tight:1.15;--leading-snug:1.3;--leading-normal:1.5;--tracking-tight:-.5px;--tracking-normal:0;--tracking-wide:.4px;--weight-light:300;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-10:40px;--space-12:48px;--radius-xs:6px;--radius-sm:10px;--radius-md:12px;--radius-lg:14px;--radius-xl:18px;--radius-2xl:20px;--radius-pill:9999px;--blur-card:blur(14px);--blur-topbar:blur(14px);--shadow-glow-primary:0 0 14px #9eb0ff47;--shadow-glow-ok:0 0 10px #7fd9a673;--shadow-glow-warn:0 0 10px #f4c56b73;--shadow-glow-bad:0 0 10px #f08b8b73;--shadow-glow-dusk:0 0 10px #d29bff73;--motion-fast:.12s;--motion-base:.18s;--motion-slow:.32s;--ease-default:cubic-bezier(.32, .72, .32, 1);--ease-in-out:cubic-bezier(.45, .05, .55, .95);--z-base:0;--z-elevated:10;--z-sticky:20;--z-overlay:30;--z-modal:40;--z-toast:50;--container-max:1440px;--container-pad-x:var(--space-8);--container-pad-y:var(--space-6);--grid-gap:var(--space-6)}html,body{background:var(--color-bg-base);color:var(--color-text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}.app-bg{background-color:#0000;background-image:radial-gradient(1000px 700px at 85% -15%,#9eb0ff1f,#0000 60%),radial-gradient(900px 600px at -10% 100%,#c4b5fd1a,#0000 60%),radial-gradient(600px 400px at 50% 120%,#7fd9a60d,#0000 60%),linear-gradient(#141226 0%,#17142b 60%,#121024 100%);background-position:0 0,0 0,0 0,0 0;background-repeat:repeat,repeat,repeat,repeat;background-size:auto,auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box,border-box;min-height:100vh}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}img{max-width:100%;display:block}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-line-emphasis);border-radius:var(--radius-pill)}.app-bg{background-color:#0000;background-image:radial-gradient(1000px 700px at 85% -15%,#9eb0ff29,#0000 60%),radial-gradient(900px 600px at -10% 100%,#c4b5fd21,#0000 60%),radial-gradient(600px 400px at 50% 120%,#7fd9a60f,#0000 60%),linear-gradient(#161330 0%,#1a1633 60%,#131127 100%);background-position:0 0,0 0,0 0,0 0;background-repeat:repeat,repeat,repeat,repeat;background-size:auto,auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box,border-box;min-height:100vh;position:relative;overflow-x:hidden}.app-bg:before{content:"";pointer-events:none;z-index:0;filter:blur(20px);background:radial-gradient(500px 300px at 30% 20%,#9eb0ff1a,#0000 60%),radial-gradient(400px 280px at 70% 60%,#c4b5fd14,#0000 60%);animation:22s ease-in-out infinite alternate app-bg-aurora;position:fixed;inset:0}@keyframes app-bg-aurora{0%{opacity:.7;transform:translate(0)}to{opacity:1;transform:translate(40px,-30px)}}.app-bg>.shell,.app-bg>*{z-index:2;position:relative}.container{max-width:var(--container-max);padding:var(--container-pad-y) var(--container-pad-x);margin:0 auto}.page-header{margin-bottom:var(--space-6);justify-content:space-between;align-items:center;display:flex}.page-title{font-family:var(--font-display);font-size:var(--text-3xl);font-weight:var(--weight-bold);color:var(--color-text);letter-spacing:var(--tracking-tight)}.page-subtitle{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:var(--space-1)}.center-page{justify-content:center;align-items:center;min-height:100vh;display:flex}.shell{gap:var(--grid-gap);max-width:var(--container-max);padding:var(--space-6) var(--space-6) var(--space-12);grid-template-columns:240px minmax(0,1fr);margin:0 auto;display:grid}.shell-main{min-width:0}@media (width<=900px){.shell{gap:var(--space-3);padding:var(--space-3) var(--space-3) calc(64px + var(--space-6));grid-template-columns:minmax(0,1fr)}}.sidebar{top:var(--space-6);padding:var(--space-5) var(--space-3) var(--space-3);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-2xl);-webkit-backdrop-filter:var(--blur-card);backdrop-filter:var(--blur-card);flex-direction:column;align-self:start;gap:2px;max-height:calc(100vh - 48px);display:flex;position:sticky;overflow-y:auto}.sb-brand{align-items:center;gap:var(--space-3);padding:var(--space-1) var(--space-2) var(--space-4);border-bottom:1px solid var(--color-line);margin-bottom:var(--space-3);display:flex}.sb-brand .mark{border-radius:var(--radius-sm);width:36px;height:36px;color:var(--color-primary-soft);background:linear-gradient(135deg,#9eb0ff4d,#c4b5fd26);border:1px solid #c4b5fd40;flex-shrink:0;place-items:center;display:grid;position:relative}.sb-brand .mark svg{width:18px;height:18px}.sb-brand .mark:after{content:"";border:1px solid var(--color-primary-soft);pointer-events:none;border-radius:13px;animation:3s ease-out infinite sb-brand-ping;position:absolute;inset:-3px}@keyframes sb-brand-ping{0%{opacity:.7;transform:scale(.9)}80%,to{opacity:0;transform:scale(1.5)}}.sb-brand .wordmark{width:auto;height:16px;display:block}.sb-brand .sub{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:3px}.sb-group{font-family:var(--font-display);letter-spacing:1.6px;color:var(--color-text-disabled);text-transform:uppercase;padding:var(--space-4) var(--space-3) var(--space-2);font-size:10px;font-weight:var(--weight-semibold)}.sb-group:first-of-type{padding-top:var(--space-1)}.sb-item{align-items:center;gap:var(--space-3);padding:10px var(--space-3);border-radius:var(--radius-sm);color:var(--color-text-dim);transition:all var(--motion-fast) var(--ease-default);cursor:pointer;border:1px solid #0000;font-size:13.5px;text-decoration:none;display:flex;position:relative}.sb-item svg{width:18px;height:18px;color:var(--color-text-muted);flex-shrink:0}.sb-item:hover{background:var(--color-surface-soft);color:var(--color-text)}.sb-item:hover svg{color:var(--color-text-dim)}.sb-item.active{background:var(--color-primary-bg);color:var(--color-primary-strong);border-color:#9eb0ff47;box-shadow:inset 0 0 12px #9eb0ff14}.sb-item.active svg{color:var(--color-primary-strong)}.sb-item .count{border-radius:var(--radius-pill);background:var(--color-warn-bg-strong);color:var(--color-warn);font-size:10px;font-weight:var(--weight-semibold);margin-left:auto;padding:2px 7px}.sb-item .count.ok{background:var(--color-ok-bg-strong);color:var(--color-ok)}.sb-footer-link{padding:var(--space-3);border-top:1px solid var(--color-line);gap:var(--space-3);color:inherit;transition:background var(--motion-fast) var(--ease-default);border-radius:0;align-items:center;margin-top:auto;text-decoration:none;display:flex}.sb-footer-link:hover,.sb-footer-link.active{background:var(--color-surface-soft)}.sb-footer-link .avatar{width:34px;height:34px;color:var(--color-bg-base);font-weight:var(--weight-bold);font-size:13px;font-family:var(--font-display);background:linear-gradient(135deg,#8b9fff,#c4b5fd);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.sb-footer-link .who{flex:1;min-width:0}.sb-footer-link .uname{color:var(--color-text);font-size:13px;font-weight:var(--weight-medium);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sb-footer-link .umail{font-size:var(--text-xs);color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sb-more{color:var(--color-text-dim);cursor:pointer;font:inherit;background:0 0;border:0;display:none}@media (width<=900px){.sidebar{z-index:50;padding:6px 4px max(6px, env(safe-area-inset-bottom));border-bottom:0;border-left:0;border-right:0;border-top:1px solid var(--color-line);background:var(--color-surface-hi);border-radius:0;flex-direction:row;align-items:stretch;gap:0;max-height:none;position:fixed;inset:auto 0 0;overflow:visible}.sidebar .sb-brand,.sidebar .sb-group,.sidebar .sb-footer-link,.sidebar .sb-item-overflow{display:none}.sidebar .sb-section{display:contents}.sidebar .sb-item{border-radius:var(--radius-sm);color:var(--color-text-muted);text-align:center;border:0;flex-direction:column;flex:1;justify-content:center;gap:3px;min-width:0;padding:6px 2px;font-size:10px;line-height:1}.sidebar .sb-item svg{width:22px;height:22px}.sidebar .sb-item:hover{color:var(--color-text);background:0 0}.sidebar .sb-item.active{color:var(--color-primary-strong);box-shadow:none;background:0 0;border:0}.sidebar .sb-item.active svg{color:var(--color-primary-strong)}.sidebar .sb-label{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.sidebar .sb-more{color:var(--color-text-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:6px 2px;font-size:10px;line-height:1;display:flex}.sidebar .sb-more svg{width:22px;height:22px}}.topbar{align-items:center;gap:var(--space-5);padding:var(--space-3) var(--space-5);margin-bottom:var(--space-6);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-2xl);-webkit-backdrop-filter:var(--blur-topbar);backdrop-filter:var(--blur-topbar);display:flex}.topbar .page-name{font-family:var(--font-display);font-weight:var(--weight-bold);font-size:var(--text-lg);letter-spacing:var(--tracking-tight)}.topbar .spacer{flex:1}.topbar .time-now{color:var(--color-text-dim);font-size:var(--text-base);font-weight:var(--weight-medium)}.top-btn{background:var(--color-surface-soft);border:1px solid var(--color-line-emphasis);width:38px;height:38px;color:var(--color-text-muted);cursor:pointer;transition:all var(--motion-fast) var(--ease-default);border-radius:11px;place-items:center;display:grid}.top-btn:hover{color:var(--color-primary-strong);border-color:#9eb0ff59}.top-btn svg{width:18px;height:18px}.mqtt-link{font-family:ui-monospace,JetBrains Mono,monospace;font-size:var(--text-xs);color:var(--color-text-muted);letter-spacing:1.2px;align-items:center;gap:8px;display:inline-flex}.mqtt-link .dot{background:var(--color-text-disabled);border-radius:50%;width:6px;height:6px}.mqtt-link-linked{color:var(--color-text-dim)}.mqtt-link-linked .dot{background:var(--color-ok);box-shadow:0 0 8px var(--color-ok);animation:2.4s ease-in-out infinite mqtt-pulse}.mqtt-link-offline .dot{background:var(--color-bad);box-shadow:0 0 6px var(--color-bad)}@keyframes mqtt-pulse{0%,to{opacity:1}50%{opacity:.35}}.topbar .time-now{color:var(--color-text-dim);font-size:var(--text-base);font-weight:var(--weight-medium);font-variant-numeric:tabular-nums}.top-btn .badge-dot{background:var(--color-warn);width:7px;height:7px;box-shadow:0 0 8px var(--color-warn);border-radius:50%;animation:2.4s ease-in-out infinite mqtt-pulse;position:absolute;top:8px;right:8px}.top-btn{position:relative}@media (width<=900px){.topbar .mqtt-link,.topbar .time-now{display:none}}.topbar-mark{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--color-primary-soft);background:linear-gradient(135deg,#9eb0ff4d,#c4b5fd26);border:1px solid #c4b5fd40;flex-shrink:0;place-items:center;text-decoration:none;display:none}.topbar-mark svg{width:16px;height:16px}@media (width<=900px){.topbar{gap:var(--space-3);padding:var(--space-2) var(--space-3);margin-bottom:var(--space-3);border-radius:var(--radius-xl)}.topbar .page-name{font-size:var(--text-base)}.topbar-mark{display:grid}.top-btn{width:34px;height:34px}}.more-sheet-backdrop{z-index:100;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:more-sheet-fade var(--motion-fast) var(--ease-default);background:#0a08188c;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.more-sheet{background:var(--color-bg-elevated);border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl);border:1px solid var(--color-line);width:100%;max-width:520px;padding:8px var(--space-4) max(var(--space-4), env(safe-area-inset-bottom));gap:var(--space-3);animation:more-sheet-slide var(--motion-base) var(--ease-default);border-bottom:0;flex-direction:column;display:flex;box-shadow:0 -20px 40px #00000059}.more-sheet-grip{border-radius:var(--radius-pill);background:var(--color-line-emphasis);width:36px;height:4px;margin:0 auto var(--space-2)}.more-sheet-header{align-items:center;gap:var(--space-3);padding:var(--space-1) var(--space-2) var(--space-3);border-bottom:1px solid var(--color-line);display:flex}.more-sheet-header .mark{border-radius:var(--radius-sm);width:36px;height:36px;color:var(--color-primary-soft);background:linear-gradient(135deg,#9eb0ff4d,#c4b5fd26);border:1px solid #c4b5fd40;flex-shrink:0;place-items:center;display:grid}.more-sheet-header .mark svg{width:18px;height:18px}.more-sheet-header .title{font-family:var(--font-display);font-size:15px;font-weight:var(--weight-bold);color:var(--color-text);line-height:1.1}.more-sheet-header .subtitle{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:3px}.more-sheet-nav{flex-direction:column;display:flex}.more-sheet-item{align-items:center;gap:var(--space-3);padding:14px var(--space-2);color:var(--color-text);border-radius:var(--radius-sm);transition:background var(--motion-fast) var(--ease-default);text-decoration:none;display:flex}.more-sheet-item:hover,.more-sheet-item:active{background:var(--color-surface-soft)}.more-sheet-item .icon{width:22px;height:22px;color:var(--color-text-muted);flex-shrink:0}.more-sheet-item .label{font-size:var(--text-base);flex:1}.more-sheet-item .chev{width:16px;height:16px;color:var(--color-text-disabled);flex-shrink:0}.more-sheet-logout{margin-top:var(--space-2);justify-content:center;align-items:center;gap:var(--space-2);border:1px solid var(--color-line);border-radius:var(--radius-md);color:var(--color-bad);font-size:var(--text-base);cursor:pointer;transition:background var(--motion-fast) var(--ease-default), border-color var(--motion-fast) var(--ease-default);background:0 0;padding:14px;font-family:inherit;display:flex}.more-sheet-logout:hover,.more-sheet-logout:active{background:var(--color-bad-bg,#ef444414);border-color:var(--color-bad)}.more-sheet-logout svg{width:18px;height:18px}@keyframes more-sheet-fade{0%{opacity:0}to{opacity:1}}@keyframes more-sheet-slide{0%{transform:translateY(100%)}to{transform:translateY(0)}}.card{background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-xl);padding:var(--space-5) var(--space-6);-webkit-backdrop-filter:var(--blur-card);backdrop-filter:var(--blur-card);transition:transform var(--motion-base) var(--ease-default), border-color var(--motion-base) var(--ease-default), box-shadow var(--motion-base) var(--ease-default);position:relative}.plant-hero-card[data-stage=seedling]{background:linear-gradient(180deg, #f4c56b1a, transparent 70%), var(--color-surface);border-color:#f4c56b38}.plant-hero-card[data-stage=vegetative]{background:linear-gradient(180deg, #7fd9a61a, transparent 70%), var(--color-surface);border-color:#7fd9a638}.plant-hero-card[data-stage=flowering]{background:linear-gradient(180deg, #d29bff1c, transparent 70%), var(--color-surface);border-color:#d29bff38}.plant-hero-card[data-stage=harvest]{background:linear-gradient(180deg, #9eb0ff1c, transparent 70%), var(--color-surface);border-color:#9eb0ff38}.card.interactive,a.card,button.card{cursor:pointer;text-align:inherit}.card.interactive:hover,a.card:hover,button.card:hover{border-color:var(--color-primary-border);box-shadow:var(--shadow-glow-primary);transform:translateY(-2px)}.card-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.page-section-title{font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--color-text-muted);margin:0}.card-title{font-family:var(--font-display);font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--color-text)}.card-section-title{font-family:var(--font-display);font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:var(--tracking-wide)}.subsection-title{font-family:var(--font-display);font-size:var(--text-base);font-weight:var(--weight-semibold);color:var(--color-text-muted);margin:0}.subsection-title.muted{font-size:var(--text-sm);color:var(--color-text-muted);font-weight:var(--weight-medium)}.metric-heading{font-family:var(--font-display);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text-muted);align-items:center;gap:6px;margin-bottom:2px;display:flex}.stage-sections>section+section{border-top:1px solid var(--color-line);padding-top:var(--space-4)}.schedule-row{flex-direction:row;align-items:stretch;gap:0;display:flex}.schedule-row>section{min-width:0;padding:0 var(--space-4);flex:1}.schedule-row>section:first-child{padding-left:0}.schedule-row>section:last-child{padding-right:0}.schedule-row>.schedule-light{text-align:center;flex:none;min-width:140px}.schedule-row>.schedule-light .subsection-title{text-align:left}.schedule-row>section+section{border-left:1px solid var(--color-line)}@media (width<=760px){.schedule-row{gap:var(--space-4);flex-direction:column}.schedule-row>section{padding-left:0;padding-right:0}.schedule-row>section+section{border-left:none;border-top:1px solid var(--color-line);padding-top:var(--space-4)}}.guide-section{padding:0}.guide-section-summary{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-4);cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex}.guide-section-summary::-webkit-details-marker{display:none}.guide-section-chevron{color:var(--color-text-muted);transition:transform var(--motion-fast) var(--ease-default);flex-shrink:0}.guide-section[open] .guide-section-chevron{transform:rotate(0)}.guide-section:not([open]) .guide-section-chevron{transform:rotate(-90deg)}.guide-section[open] .guide-section-summary{padding-bottom:0}.guide-section[open]>p,.guide-section[open]>textarea{margin:var(--space-3) var(--space-4) var(--space-4);padding:0}.guide-section[open]>textarea{width:calc(100% - var(--space-4) * 2);padding:var(--space-3) var(--space-4)}.card-actions{top:var(--space-3);right:var(--space-3);z-index:2;align-items:center;gap:4px;display:flex;position:absolute}.card-action-btn{border-radius:var(--radius-sm);background:var(--color-surface-soft);border:1px solid var(--color-line);width:28px;height:28px;color:var(--color-text-muted);cursor:pointer;transition:all var(--motion-fast) var(--ease-default);place-items:center;display:grid}.card-action-btn:hover{background:var(--color-surface-hi);border-color:var(--color-line-emphasis);color:var(--color-text)}.card-action-btn.danger:hover{background:var(--color-bad-bg);border-color:var(--color-bad-border);color:var(--color-bad)}.card-action-btn svg{width:14px;height:14px}.card-action-btn.spinning svg{animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.btn{font-family:var(--font-body);font-weight:var(--weight-medium);font-size:var(--text-base);padding:var(--space-3) var(--space-5);border-radius:var(--radius-md);cursor:pointer;border:1px solid var(--color-line-emphasis);background:var(--color-surface-soft);color:var(--color-text-dim);align-items:center;gap:var(--space-2);transition:all var(--motion-base) var(--ease-default);display:inline-flex}.btn:hover{color:var(--color-text);border-color:#9eb0ff59}.btn:active{transform:scale(.98)}.btn.primary{border-color:var(--color-primary-border);color:#f4f2ff;background:linear-gradient(135deg,#9eb0ff38,#c4b5fd2e)}.btn.primary:hover{box-shadow:var(--shadow-glow-primary);border-color:var(--color-primary-strong)}.btn.ghost{color:var(--color-text-muted);background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--color-surface-soft);color:var(--color-text);border-color:var(--color-line)}.btn.danger{background:var(--color-bad-bg);border-color:var(--color-bad-border);color:var(--color-bad)}.btn.danger:hover{background:var(--color-bad-bg-strong);border-color:var(--color-bad)}.btn.ok{background:var(--color-ok-bg-strong);border-color:var(--color-ok-border);color:var(--color-ok)}.btn.bad{background:var(--color-bad-bg-strong);border-color:var(--color-bad-border);color:var(--color-bad)}.btn:disabled,.btn.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn svg{width:16px;height:16px}.btn-row{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.icon-btn{border-radius:var(--radius-sm);background:var(--color-surface-soft);border:1px solid var(--color-line-emphasis);width:38px;height:38px;color:var(--color-text-muted);cursor:pointer;transition:all var(--motion-fast) var(--ease-default);place-items:center;display:grid}.icon-btn:hover{color:var(--color-primary-strong);border-color:#9eb0ff59}.input{width:100%;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-line-emphasis);background:var(--color-bg-raised);color:var(--color-text);font-family:var(--font-body);font-size:var(--text-base);transition:border-color var(--motion-fast) var(--ease-default)}.input::placeholder{color:var(--color-text-disabled)}.input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.input.code{text-align:center;font-size:var(--text-lg);letter-spacing:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.input-row{gap:var(--space-3);display:flex}.input-row .input{flex:1}.form-stack{gap:var(--space-3);flex-direction:column;display:flex}.form-label{font-size:var(--text-sm);color:var(--color-text-muted);margin-bottom:var(--space-1)}.input::-webkit-calendar-picker-indicator{filter:invert(.85);opacity:.7;cursor:pointer}.input::-webkit-calendar-picker-indicator:hover{opacity:1}.input.time-compact{padding:var(--space-2) var(--space-3);font-variant-numeric:tabular-nums}.input[type=number]{appearance:textfield}.input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}select.input{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23938CB0' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right var(--space-3) center;padding-right:calc(var(--space-3) * 2 + 14px);background-size:14px}select.input:hover{border-color:var(--color-line-strong,var(--color-line-emphasis))}select.input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg)}select.input:disabled{opacity:.5;cursor:not-allowed}select.input option{background:var(--color-bg-elevated);color:var(--color-text);padding:6px 10px}select.input option:checked{background:var(--color-primary-bg);color:var(--color-text)}.select-trigger{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-line-emphasis);background:var(--color-bg-raised);color:var(--color-text);font-family:var(--font-body);font-size:var(--text-base);cursor:pointer;justify-content:space-between;align-items:center;gap:var(--space-3);min-width:120px;transition:border-color var(--motion-fast) var(--ease-default);display:inline-flex}.select-trigger:hover:not([data-disabled]){border-color:var(--color-line-strong,var(--color-line-emphasis))}.select-trigger[data-state=open],.select-trigger:focus-visible{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.select-trigger[data-placeholder]{color:var(--color-text-disabled)}.select-trigger[data-disabled]{opacity:.5;cursor:not-allowed}.select-trigger-icon{color:var(--color-text-muted);flex-shrink:0;display:inline-flex}.select-content{background:var(--color-bg-elevated);border:1px solid var(--color-line-emphasis);border-radius:var(--radius-md);z-index:100;min-width:var(--radix-select-trigger-width);max-height:var(--radix-select-content-available-height);overflow:hidden;box-shadow:0 8px 24px #0006}.select-viewport{padding:var(--space-2)}.select-item{padding:var(--space-2) var(--space-3) var(--space-2) calc(var(--space-3) + 18px);border-radius:var(--radius-sm);font-size:var(--text-base);color:var(--color-text);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;align-items:center;display:flex;position:relative}.select-item[data-highlighted]{background:var(--color-primary-bg);color:var(--color-text)}.select-item[data-state=checked]{color:var(--color-primary-strong,var(--color-primary))}.select-item[data-disabled]{color:var(--color-text-disabled);cursor:not-allowed}.select-item-indicator{left:var(--space-2);width:14px;color:var(--color-primary-strong,var(--color-primary));justify-content:center;align-items:center;display:inline-flex;position:absolute}.dropdown-menu-content{background:var(--color-bg-elevated);border:1px solid var(--color-line-emphasis);border-radius:var(--radius-md);padding:var(--space-2);z-index:100;min-width:220px;box-shadow:0 8px 24px #0006}.dropdown-menu-item{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-base);color:var(--color-text);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;display:flex}.dropdown-menu-item[data-highlighted]{background:var(--color-primary-bg)}.dropdown-menu-item[data-disabled]{color:var(--color-text-disabled);cursor:not-allowed}.dropdown-menu-item-hint{font-size:var(--text-xs);color:var(--color-text-muted);margin-left:auto}.dropdown-menu-separator{background:var(--color-line);height:1px;margin:var(--space-1) 0}.pill{font-size:var(--text-sm);border-radius:var(--radius-pill);font-weight:var(--weight-medium);background:var(--color-surface-soft);border:1px solid var(--color-line-emphasis);color:var(--color-text-dim);align-items:center;gap:6px;padding:5px 11px;display:inline-flex}.pill.ok{background:var(--color-ok-bg-strong);color:var(--color-ok);border-color:var(--color-ok-border)}.pill.warn{background:var(--color-warn-bg-strong);color:var(--color-warn);border-color:var(--color-warn-border)}.pill.bad{background:var(--color-bad-bg-strong);color:var(--color-bad);border-color:var(--color-bad-border)}.pill.primary{background:var(--color-primary-bg-hi);color:var(--color-primary-soft);border-color:#9eb0ff4d}.pill .dot{background:currentColor;border-radius:50%;width:6px;height:6px}.pill-row{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.status-row{border-radius:var(--radius-lg);border:1px solid var(--color-line-emphasis);grid-template-columns:40px 1fr auto;align-items:center;gap:14px;padding:14px 16px;display:grid}.status-row .ico-wrap{border-radius:11px;place-items:center;width:40px;height:40px;display:grid}.status-row .ico-wrap svg{width:20px;height:20px}.status-row .name{font-weight:var(--weight-semibold);font-size:var(--text-base);color:var(--color-text)}.status-row .detail{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:2px}.status-row.ok{background:var(--color-ok-bg);border-color:var(--color-ok-border)}.status-row.ok .ico-wrap{background:var(--color-ok-bg-strong);color:var(--color-ok)}.status-row.warn{background:var(--color-warn-bg);border-color:var(--color-warn-border)}.status-row.warn .ico-wrap{background:var(--color-warn-bg-strong);color:var(--color-warn)}.status-row.bad{background:var(--color-bad-bg);border-color:var(--color-bad-border)}.status-row.bad .ico-wrap{background:var(--color-bad-bg-strong);color:var(--color-bad)}.readout{border-radius:var(--radius-lg);background:var(--color-surface-soft);border:1px solid var(--color-line-emphasis);padding:14px 16px}.readout .lbl{font-size:var(--text-sm);color:var(--color-text-muted);letter-spacing:.5px;text-transform:uppercase;margin-bottom:6px}.readout .val{font-family:var(--font-display);font-weight:var(--weight-semibold);font-size:var(--text-xl);color:var(--color-text)}.readout .hint{font-size:var(--text-sm);color:var(--color-text-dim);margin-top:var(--space-1)}.readout-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));display:grid}.dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.dot.ok{background:var(--color-ok);box-shadow:var(--shadow-glow-ok)}.dot.warn{background:var(--color-warn);box-shadow:var(--shadow-glow-warn)}.dot.bad{background:var(--color-bad);box-shadow:var(--shadow-glow-bad)}.dot.off{background:var(--color-text-disabled)}.dot.primary{background:var(--color-primary);box-shadow:var(--shadow-glow-primary)}.grid-2{gap:var(--grid-gap);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));display:grid}.grid-3{gap:var(--grid-gap);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.flex-row{align-items:center;gap:var(--space-3);display:flex}.flex-between{justify-content:space-between;align-items:center;display:flex}.flex-col{gap:var(--space-3);flex-direction:column;display:flex}.text{color:var(--color-text)}.text-muted{color:var(--color-text-muted)}.text-dim{color:var(--color-text-dim)}.text-primary{color:var(--color-primary)}.text-ok{color:var(--color-ok)}.text-warn{color:var(--color-warn)}.text-bad{color:var(--color-bad)}.text-xs{font-size:var(--text-xs)}.text-sm{font-size:var(--text-sm)}.text-base{font-size:var(--text-base)}.text-lg{font-size:var(--text-lg)}.text-xl{font-size:var(--text-xl)}.text-2xl{font-size:var(--text-2xl)}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.font-display{font-family:var(--font-display)}.font-semibold{font-weight:var(--weight-semibold)}.font-bold{font-weight:var(--weight-bold)}.error{color:var(--color-bad);font-size:var(--text-sm);padding:var(--space-2) var(--space-3);background:var(--color-bad-bg);border-radius:var(--radius-sm);border:1px solid var(--color-bad-border)}.link{color:var(--color-primary);transition:color var(--motion-fast) var(--ease-default)}.link:hover{color:var(--color-primary-strong)}.text-link{color:var(--color-text-muted);font-size:var(--text-sm)}.text-link a,.text-link .link{color:var(--color-primary)}.stage-timeline{background:var(--color-bg-raised);border-radius:var(--radius-md);gap:2px;height:10px;display:flex;position:relative}.stage-timeline-wrap{position:relative}.stage-timeline-marker{background:var(--color-primary-strong);border-radius:var(--radius-pill);pointer-events:none;z-index:2;width:2px;margin-left:-1px;position:absolute;top:-4px;bottom:-4px}.stage-timeline-blip-track{border-radius:var(--radius-md);pointer-events:none;z-index:1;position:absolute;inset:0;overflow:hidden}.stage-timeline-blip{filter:blur(2px);background:linear-gradient(90deg,#0000,#ffffff8c,#0000);width:28px;margin-left:-14px;animation:4s ease-in-out infinite stage-timeline-blip;position:absolute;top:-1px;bottom:-1px}@keyframes stage-timeline-blip{0%{opacity:0;left:0}6%{opacity:.9}60%{left:var(--end,50%);opacity:.95}68%{left:var(--end,50%);opacity:0}to{left:var(--end,50%);opacity:0}}.stage-timeline-tooltip{border-radius:var(--radius-md);background:var(--color-bg-elevated);border:1px solid var(--color-primary-border);color:var(--color-primary-strong);font-family:var(--font-display);font-size:var(--text-xs);font-weight:var(--weight-semibold);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--motion-fast) var(--ease-default), transform var(--motion-fast) var(--ease-default);z-index:3;padding:6px 12px;position:absolute;top:calc(100% + 4px);transform:translate(-50%);box-shadow:0 4px 16px #0006}.stage-timeline-tooltip:before,.stage-timeline-tooltip:after{content:"";border:6px solid #0000;position:absolute;bottom:100%;left:50%;transform:translate(-50%)}.stage-timeline-tooltip:before{border-bottom-color:var(--color-primary-border)}.stage-timeline-tooltip:after{border-bottom-color:var(--color-bg-elevated);margin-bottom:-1px}.stage-timeline:hover .stage-timeline-tooltip{opacity:1;transform:translate(-50%)translateY(4px)}.stage-timeline .segment{height:100%;transition:opacity var(--motion-fast) var(--ease-default);position:relative}.stage-timeline .segment:first-child{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.stage-timeline .segment:last-child{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.stage-timeline .segment.germination{background:var(--color-dawn);opacity:.7}.stage-timeline .segment.seedling{background:var(--color-dawn)}.stage-timeline .segment.blackout{background:var(--color-text-muted)}.stage-timeline .segment.vegetative{background:var(--color-ok)}.stage-timeline .segment.flowering{background:var(--color-dusk)}.stage-timeline .segment.fruiting{background:var(--color-dusk);opacity:.85}.stage-timeline .segment.ripening{background:var(--color-primary);opacity:.7}.stage-timeline .segment.harvest{background:var(--color-primary)}.stage-timeline .segment.general{background:var(--color-noon)}.stage-timeline .segment:hover{opacity:.8}.stage-legend{gap:var(--space-3);margin-top:var(--space-3);font-size:var(--text-xs);flex-wrap:wrap;display:flex}.stage-legend-item{color:var(--color-text-muted);align-items:center;gap:6px;display:inline-flex}.stage-legend-item .swatch{border-radius:var(--radius-xs);flex-shrink:0;width:10px;height:10px}.stage-legend-item .swatch.germination{background:var(--color-dawn);opacity:.7}.stage-legend-item .swatch.seedling{background:var(--color-dawn)}.stage-legend-item .swatch.blackout{background:var(--color-text-muted)}.stage-legend-item .swatch.vegetative{background:var(--color-ok)}.stage-legend-item .swatch.flowering{background:var(--color-dusk)}.stage-legend-item .swatch.fruiting{background:var(--color-dusk);opacity:.85}.stage-legend-item .swatch.ripening{background:var(--color-primary);opacity:.7}.stage-legend-item .swatch.harvest{background:var(--color-primary)}.stage-legend-item .swatch.general{background:var(--color-noon)}.stage-detail{gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface-soft);border:1px solid var(--color-line);grid-template-columns:1fr;display:grid}.stage-detail .name{align-items:center;gap:var(--space-2);font-family:var(--font-display);font-weight:var(--weight-semibold);font-size:var(--text-base);color:var(--color-text);display:flex}.stage-detail .days{font-size:var(--text-sm);color:var(--color-text-muted);font-weight:var(--weight-regular)}.stage-detail .params{gap:var(--space-2);margin-top:var(--space-2);grid-template-columns:repeat(auto-fill,minmax(110px,1fr));display:grid}.stage-detail .param{padding:var(--space-2);border-radius:var(--radius-sm);background:var(--color-bg-raised);font-size:var(--text-xs)}.stage-detail .param .lbl{color:var(--color-text-muted);margin-bottom:2px}.stage-detail .param .val{color:var(--color-text);font-family:var(--font-display);font-weight:var(--weight-semibold)}.stage-detail .param .hint{color:var(--color-text-disabled);margin-top:2px;font-size:10px}.plant-card-progress{background:var(--color-bg-raised);border-radius:var(--radius-pill);height:6px;margin-bottom:var(--space-2);overflow:hidden}.plant-card-progress-fill{background:linear-gradient(90deg, var(--color-ok), var(--color-primary));border-radius:var(--radius-pill);height:100%;transition:width var(--motion-base) var(--ease-default);position:relative;overflow:hidden}.plant-card-progress-blip{filter:blur(1px);pointer-events:none;background:linear-gradient(90deg,#0000,#ffffffb3,#0000);width:24px;margin-left:-12px;animation:3.6s ease-in-out infinite plant-card-progress-blip;position:absolute;top:0;bottom:0;left:0}@keyframes plant-card-progress-blip{0%{opacity:0;left:0}6%{opacity:.95}60%{opacity:.95;left:100%}68%{opacity:0;left:100%}to{opacity:0;left:100%}}.tabs{background:var(--color-surface-soft);border:1px solid var(--color-line);border-radius:var(--radius-md);margin-bottom:var(--space-5);gap:2px;width:fit-content;padding:4px;display:flex}.tab{padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text-muted);cursor:pointer;transition:all var(--motion-fast) var(--ease-default);background:0 0;border:none}.tab:hover{color:var(--color-text)}.tab.active{background:var(--color-primary-bg-hi);color:var(--color-primary-strong);border:1px solid var(--color-primary-border);padding:calc(var(--space-2) - 1px) calc(var(--space-4) - 1px)}.modal-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:var(--z-modal);animation:modal-fade-in var(--motion-base) var(--ease-default);background:#0a081899;place-items:center;display:grid;position:fixed;inset:0}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}.modal{background:var(--color-bg-elevated);border:1px solid var(--color-line-emphasis);border-radius:var(--radius-2xl);width:100%;max-width:420px;padding:var(--space-6);animation:modal-pop-in var(--motion-slow) var(--ease-default);box-shadow:0 24px 60px #00000080}@keyframes modal-pop-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-title{font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--color-text);margin-bottom:var(--space-2)}.modal-message{font-size:var(--text-base);color:var(--color-text-dim);line-height:var(--leading-normal);margin-bottom:var(--space-5)}.modal-actions{gap:var(--space-3);justify-content:flex-end;display:flex}[data-tooltip]{position:relative}[data-tooltip]:before,[data-tooltip]:after{opacity:0;pointer-events:none;transition:opacity var(--motion-fast) var(--ease-default) 80ms;position:absolute}[data-tooltip]:before{content:attr(data-tooltip);border-radius:var(--radius-sm);background:var(--color-bg-elevated);border:1px solid var(--color-line-emphasis);color:var(--color-text);font-family:var(--font-body);font-size:var(--text-xs);font-weight:var(--weight-medium);white-space:nowrap;z-index:var(--z-overlay);padding:6px 10px;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0006}[data-tooltip]:after{content:"";border:5px solid #0000;border-top-color:var(--color-line-emphasis);z-index:var(--z-overlay);bottom:calc(100% + 2px);left:50%;transform:translate(-50%)}[data-tooltip]:hover:before,[data-tooltip]:hover:after{opacity:1}[data-tooltip-pos=bottom]:before{top:calc(100% + 8px);bottom:auto}[data-tooltip-pos=bottom]:after{border-top-color:#0000;border-bottom-color:var(--color-line-emphasis);top:calc(100% + 2px);bottom:auto}.skeleton{background:linear-gradient(90deg, var(--color-surface-soft) 0%, var(--color-surface) 50%, var(--color-surface-soft) 100%);border-radius:var(--radius-md);background-size:200% 100%;animation:1.6s linear infinite skeleton-shimmer}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.chart-skeleton{border-radius:var(--radius-lg);width:100%;position:relative;overflow:hidden}.chart-skeleton .bars{align-items:flex-end;gap:4px;height:100%;padding:12px;display:flex}.chart-skeleton .bar{background:linear-gradient(180deg, var(--color-primary-bg-hi), transparent);opacity:.4;border-radius:2px 2px 0 0;flex:1;animation:2s ease-in-out infinite skeleton-shimmer}.chart-fade-in{animation:chart-fade-in var(--motion-slow) var(--ease-default)}@keyframes chart-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.state-tracks{margin-top:var(--space-3);flex-direction:column;gap:4px;display:flex}.state-track-row{align-items:center;height:18px;display:flex}.state-track-axis{height:22px;margin-top:2px}.state-track-label{text-align:right;width:36px;color:var(--color-text-muted);white-space:nowrap;padding-right:4px;font-size:10px}.state-track-chart{flex:1;min-width:0}.metric-legend{align-items:center;gap:var(--space-3);font-size:var(--text-xs);color:var(--color-text-muted);flex-wrap:wrap;display:inline-flex}.metric-legend-item{align-items:center;gap:6px;display:inline-flex}.metric-legend-item .lbl{color:var(--color-text-muted)}.metric-legend-item strong{color:var(--color-text);font-weight:var(--weight-semibold)}.metric-legend .dash{border-top:1.5px dashed;flex-shrink:0;width:14px;height:0;display:inline-block}.metric-legend .dash-target{color:var(--color-ok)}.metric-legend .dash-limit{color:var(--color-bad)}.info-block-trigger{background:var(--color-primary-bg);width:18px;height:18px;color:var(--color-primary-strong,var(--color-primary));font-family:var(--font-display);font-size:12px;font-weight:var(--weight-semibold);cursor:pointer;transition:background var(--motion-fast) var(--ease-default), color var(--motion-fast) var(--ease-default);border:0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.info-block-trigger:hover,.info-block-trigger.open{background:var(--color-primary);color:var(--color-bg-base,#fff)}.info-block-body{background:var(--color-bg-elevated);border-left:2px solid var(--color-primary);padding:var(--space-2) var(--space-3);margin-top:var(--space-2);line-height:1.5;font-size:var(--text-xs);color:var(--color-text-muted)}.info-block-body ol,.info-block-body ul{margin:0;padding-left:18px}.info-block-body p{margin:0}.info-block-body p+p,.info-block-body p+ol,.info-block-body p+ul,.info-block-body ol+p,.info-block-body ul+p{margin-top:4px}.dashboard{gap:var(--space-6);flex-direction:column;display:flex}.dashboard-section{display:block}.dashboard-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(260px,1fr));display:grid}.dashboard-grid.devices{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.aurora-hero{padding:var(--space-2) 0 var(--space-3)}.aurora-hero-content{justify-content:space-between;align-items:center;gap:var(--space-5);flex-wrap:wrap;display:flex}.aurora-hero-greeting{font-family:var(--font-display);font-size:var(--text-2xl,28px);font-weight:var(--weight-semibold);letter-spacing:-.01em;margin:0 0 var(--space-1);color:var(--color-text)}.aurora-hero-date{text-transform:capitalize}.aurora-hero-stats{gap:var(--space-5);flex-wrap:wrap;display:flex}.aurora-hero-stat{text-align:right}.aurora-hero-stat-value{font-family:var(--font-display);font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--color-text);font-variant-numeric:tabular-nums;animation:ticker-up .6s var(--ease-default) both;line-height:1}.aurora-hero-stat-label{font-size:var(--text-xs);color:var(--color-text-muted);text-transform:lowercase;margin-top:4px}@keyframes ticker-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.dashboard-tile{gap:var(--space-3);padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-bg-raised);border:1px solid var(--color-line);color:inherit;transition:border-color var(--motion-fast) var(--ease-default), transform var(--motion-fast) var(--ease-default), box-shadow var(--motion-fast) var(--ease-default);flex-direction:column;text-decoration:none;display:flex;position:relative;overflow:hidden}.dashboard-tile:hover{border-color:var(--color-primary-strong);transform:translateY(-1px);box-shadow:0 8px 24px #9eb0ff14}.dashboard-tile:before{content:"";background:linear-gradient(90deg, transparent, var(--color-primary-soft), transparent);opacity:0;width:30%;height:1px;transition:opacity var(--motion-base);pointer-events:none;position:absolute;top:0;left:-30%}.dashboard-tile:hover:before{opacity:1;animation:2.6s linear infinite dashboard-tile-track}@keyframes dashboard-tile-track{0%{left:-30%}to{left:100%}}.dashboard-tile[data-health=ok]{border-color:#7fd9a659}.dashboard-tile[data-health=ok]:hover{box-shadow:0 0 0 1px var(--color-ok), 0 0 24px #7fd9a629}.dashboard-tile[data-health=warn]{border-color:#f4c56b66}.dashboard-tile[data-health=warn]:hover{box-shadow:0 0 0 1px var(--color-warn), 0 0 24px #f4c56b2e}.dashboard-tile[data-health=bad]{border-color:#ff6b6b73}.dashboard-tile[data-health=bad]:hover{box-shadow:0 0 0 1px var(--color-bad), 0 0 24px #ff6b6b2e}.plant-tile[data-stage=seedling]{background:linear-gradient(180deg, #f4c56b0f, transparent 60%), var(--color-bg-raised)}.plant-tile[data-stage=vegetative]{background:linear-gradient(180deg, #7fd9a60f, transparent 60%), var(--color-bg-raised)}.plant-tile[data-stage=flowering]{background:linear-gradient(180deg, #d29bff12, transparent 60%), var(--color-bg-raised)}.plant-tile[data-stage=harvest]{background:linear-gradient(180deg, #9eb0ff12, transparent 60%), var(--color-bg-raised)}.plant-tile-head{align-items:center;gap:var(--space-3);display:flex}.plant-status-badge{filter:drop-shadow(0 0 8px #0000);transition:filter var(--motion-fast) var(--ease-default);flex-shrink:0;display:inline-block;position:relative}.plant-status-badge:has(svg){filter:drop-shadow(0 0 6px)}.plant-status-badge-icon{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.plant-tile-name{font-family:var(--font-display);font-size:var(--text-md);font-weight:var(--weight-semibold);color:var(--color-text);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.plant-tile-readings{gap:var(--space-3);display:flex}.plant-tile-reading{font-size:var(--text-sm);font-variant-numeric:tabular-nums;align-items:center;gap:4px;display:flex}.plant-tile-reading-icon{color:var(--color-text-muted);align-items:center;display:inline-flex}.plant-tile-reading-value{color:var(--color-text)}.plant-tile-actuators{gap:var(--space-3);margin-top:auto;display:flex}.plant-tile-actuator{border-radius:var(--radius-sm);width:26px;height:26px;color:var(--color-text-disabled);transition:color var(--motion-fast) var(--ease-default), background var(--motion-fast) var(--ease-default);background:0 0;justify-content:center;align-items:center;display:inline-flex}.plant-tile-actuator[data-state=on]{color:var(--color-primary-strong);background:var(--color-primary-bg)}.plant-tile-actuator[data-state=off]{color:var(--color-text-disabled)}.plant-tile-actuator[data-state=unknown]{color:var(--color-line-emphasis)}.plant-tile-actuator[data-kind=light][data-state=on] svg{filter:drop-shadow(0 0 4px var(--color-primary-soft));animation:3s ease-in-out infinite actuator-light-breathe}@keyframes actuator-light-breathe{0%,to{opacity:1}50%{opacity:.65}}.plant-tile-actuator[data-kind=fan][data-state=on] svg{transform-origin:50%;animation:2.8s linear infinite actuator-fan-spin}@keyframes actuator-fan-spin{to{transform:rotate(360deg)}}.plant-tile-actuator[data-kind=pump][data-state=on]{position:relative}.plant-tile-actuator[data-kind=pump][data-state=on]:after{content:"";background:var(--color-primary-soft);border-radius:50%/60% 60% 40% 40%;width:3px;height:4px;animation:1.4s ease-in infinite actuator-pump-drip;position:absolute;bottom:-4px;left:50%;transform:translate(-50%)}@keyframes actuator-pump-drip{0%{opacity:0;transform:translate(-50%,-3px)scale(.6)}20%{opacity:1}80%{opacity:1}to{opacity:0;transform:translate(-50%,6px)scale(.9)}}.plant-tile-reading-value{animation:ticker-up .32s var(--ease-default);display:inline-block}.device-tile{align-items:center;gap:var(--space-2) var(--space-3);flex-flow:wrap}.device-tile-name{font-family:var(--font-display);font-weight:var(--weight-semibold);color:var(--color-text);flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.device-tile-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.device-tile-subtype{font-weight:var(--weight-regular)}.device-tile-readings{gap:var(--space-3);font-size:var(--text-sm);font-variant-numeric:tabular-nums;flex-basis:100%;display:flex}.signal{align-items:flex-end;gap:2px;margin-right:4px;display:inline-flex}.signal i{background:var(--color-text-disabled);border-radius:1px;width:3px;display:block}.signal i:first-child{height:5px}.signal i:nth-child(2){height:8px}.signal i:nth-child(3){height:11px}.signal.online i{background:var(--color-ok);animation:1.4s ease-in-out infinite signal-bar}.signal.online i:first-child{animation-delay:0s}.signal.online i:nth-child(2){animation-delay:.2s}.signal.online i:nth-child(3){animation-delay:.4s}@keyframes signal-bar{0%,to{opacity:1}50%{opacity:.4}}.device-spark{opacity:.85;flex-basis:100%;height:24px;margin-top:2px}.device-spark svg{width:100%;height:100%;overflow:visible}.device-spark path{fill:none;stroke:var(--color-primary-soft);stroke-width:1.2px}.device-spark .area{fill:#c4b5fd1a;stroke:none}.device-spark .tip{fill:var(--color-primary-soft);filter:drop-shadow(0 0 4px var(--color-primary-soft))}.status-dot{border-radius:50%;flex-shrink:0;display:inline-block}.status-dot.live{animation:2.4s ease-in-out infinite pulse-halo}@keyframes pulse-halo{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.18)}}.stagger-in{animation:stagger-in .32s var(--ease-default) both;animation-delay:calc(var(--i,0) * 60ms)}@keyframes stagger-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.control-log{gap:var(--space-2);flex-direction:column;display:flex}.control-log-date{font-size:var(--text-xs);color:var(--color-text-muted);text-transform:capitalize;margin:var(--space-2) 0 var(--space-1);border-bottom:1px solid var(--color-line);padding-bottom:4px}.control-log-date:first-child{margin-top:0}.control-log-row{gap:var(--space-3);font-size:var(--text-sm);grid-template-columns:56px 18px 1fr auto;align-items:center;padding:4px 0;display:grid}.control-log-time{font-variant-numeric:tabular-nums;color:var(--color-text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.control-log-icon{color:var(--color-text-muted);justify-content:center;align-items:center;display:inline-flex}.control-log-action{color:var(--color-text-dim)}.control-log-reason{font-size:var(--text-xs);color:var(--color-text-muted);font-style:italic}.current-readings{padding:var(--space-4)}.current-readings-row{gap:var(--space-3);grid-template-columns:repeat(3,1fr);display:grid}@media (width<=600px){.current-readings-row{grid-template-columns:1fr}}.current-reading{align-items:center;column-gap:var(--space-3);padding:var(--space-3) var(--space-3);border-radius:var(--radius-md);background:var(--color-bg-elevated);border:1px solid var(--color-line);transition:border-color var(--motion-fast) var(--ease-default);grid-template-columns:auto 1fr auto;grid-template-areas:"icon value pill"".target target";row-gap:4px;display:grid}.current-reading[data-health=ok]{border-color:#7fd9a652}.current-reading[data-health=warn]{border-color:#f4c56b59}.current-reading[data-health=bad]{border-color:#ff6b6b66}.current-reading-icon{border-radius:var(--radius-sm);background:var(--color-bg-raised);width:36px;height:36px;color:var(--color-text-muted);flex-shrink:0;grid-area:icon;place-items:center;display:grid}.current-reading[data-health=ok] .current-reading-icon{color:var(--color-ok)}.current-reading[data-health=warn] .current-reading-icon{color:var(--color-warn)}.current-reading[data-health=bad] .current-reading-icon{color:var(--color-bad)}.current-reading-value{font-family:var(--font-display);font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--color-text-dim);font-variant-numeric:tabular-nums;grid-area:value;line-height:1}.current-reading-unit{font-size:var(--text-base);font-weight:var(--weight-medium);color:var(--color-text-muted);margin-left:2px}.current-reading-target{grid-area:target;line-height:1.3}.current-reading .pill{font-size:var(--text-xs);white-space:nowrap;grid-area:pill}.pill.muted{background:var(--color-bg-raised);color:var(--color-text-muted);border:1px solid var(--color-line)}.system-section{gap:var(--space-3);flex-direction:column;display:flex}.system-section-head{align-items:center;gap:var(--space-3);display:flex}.system-section-head svg{color:var(--color-text-muted);transition:color var(--motion-fast) var(--ease-default);flex-shrink:0}.system-section[data-kind=light][data-state=on] .system-section-head svg{color:var(--color-warn)}.system-section[data-kind=fan][data-state=on] .system-section-head svg{color:var(--color-primary)}.system-section[data-kind=water][data-state=on] .system-section-head svg{color:var(--color-ok)}.system-section-title{flex:1;margin:0}.system-card{padding:var(--space-4);gap:var(--space-3);transition:border-color var(--motion-fast) var(--ease-default);flex-direction:column;display:flex}.system-section[data-kind=light][data-state=on] .system-card{border-color:var(--color-warn-border)}.system-section[data-kind=fan][data-state=on] .system-card{border-color:var(--color-primary-border)}.system-section[data-kind=water][data-state=on] .system-card{border-color:var(--color-ok-border)}.system-light-schedule{align-items:center;gap:var(--space-4);display:flex}@media (width<=480px){.system-light-schedule{flex-direction:column;align-items:flex-start}}.system-card-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.system-action-btn{border-radius:var(--radius-sm);background:var(--color-bg-elevated);color:var(--color-text-muted);border:1px solid var(--color-line);cursor:pointer;transition:background var(--motion-fast) var(--ease-default), border-color var(--motion-fast) var(--ease-default), color var(--motion-fast) var(--ease-default);align-items:center;gap:4px;padding:8px 10px;display:inline-flex}.system-action-btn:hover:not(:disabled){background:var(--color-bg-raised);border-color:var(--color-line-emphasis);color:var(--color-text)}.system-action-btn:disabled{opacity:.5;cursor:default}.system-action-chev{color:var(--color-text-muted)}.system-action-spin{border:2px solid var(--color-line-emphasis);border-top-color:var(--color-text);border-radius:50%;width:18px;height:18px;animation:.7s linear infinite system-action-spin}@keyframes system-action-spin{to{transform:rotate(360deg)}}.system-card-restore{color:var(--color-text-muted);font-size:var(--text-xs);cursor:pointer;transition:color var(--motion-fast) var(--ease-default);background:0 0;border:0;align-self:flex-start;align-items:center;gap:6px;padding:4px 0;display:inline-flex}.system-card-restore:hover:not(:disabled){color:var(--color-text)}.system-card-restore:disabled{opacity:.5;cursor:default}.device-controls{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.device-control{padding:var(--space-3);background:var(--color-bg-elevated);border:1px solid var(--color-line);border-radius:var(--radius-md);gap:var(--space-3);transition:border-color var(--motion-fast) var(--ease-default);flex-direction:column;display:flex}.device-control[data-kind=light][data-state=on]{border-color:var(--color-warn-border)}.device-control[data-kind=fan][data-state=on]{border-color:var(--color-primary-border)}.device-control[data-kind=water][data-state=on]{border-color:var(--color-ok-border)}.device-control-head{align-items:center;gap:var(--space-2);color:var(--color-text-muted);display:flex}.device-control-head svg{color:var(--color-text-muted);transition:color var(--motion-fast) var(--ease-default)}.device-control[data-kind=light][data-state=on] .device-control-head svg{color:var(--color-warn)}.device-control[data-kind=fan][data-state=on] .device-control-head svg{color:var(--color-primary)}.device-control[data-kind=water][data-state=on] .device-control-head svg{color:var(--color-ok)}.device-control-title{font-size:var(--text-sm);font-weight:var(--weight-medium)}.device-control-actions{gap:var(--space-2);display:flex}.grace-banner{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-4);margin-bottom:var(--space-4);background:var(--color-bad-bg,var(--color-surface-soft));border:1px solid var(--color-bad-border,var(--color-line));border-left:3px solid var(--color-bad,var(--color-text));border-radius:var(--radius-sm);color:var(--color-text);flex-wrap:wrap;display:flex}.grace-banner-actions{gap:var(--space-2);flex-shrink:0;display:flex}.auth-card{width:100%;max-width:400px;padding:var(--space-8) var(--space-7);border-color:var(--color-line-emphasis);animation:auth-rise var(--motion-slow) var(--ease-default) both;box-shadow:0 0 0 1px #9eb0ff0f,0 24px 70px -30px #000000bf,0 0 44px -14px #9eb0ff66}@keyframes auth-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.auth-brand{align-items:center;gap:var(--space-3);margin-bottom:var(--space-6);display:flex}.auth-mark{width:40px;height:40px;color:var(--color-primary-strong);background:var(--color-primary-bg);border:1px solid var(--color-primary-border);box-shadow:var(--shadow-glow-primary);border-radius:50%;place-items:center;display:grid}.auth-mark svg{width:22px;height:22px}.auth-wordmark{width:auto;height:20px;display:block}.auth-title{font-family:var(--font-display);font-weight:var(--weight-bold);font-size:var(--text-2xl);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);margin-bottom:var(--space-2);background:linear-gradient(100deg, var(--color-primary-strong), var(--color-primary-soft) 55%, var(--color-dusk));color:#0000;-webkit-background-clip:text;background-clip:text}.auth-sub{font-size:var(--text-base);color:var(--color-text-muted);line-height:var(--leading-normal);margin-bottom:var(--space-6)}.auth-sub strong{color:var(--color-text-dim);font-weight:var(--weight-semibold)}.auth-card .form-stack .btn{width:100%;margin-top:var(--space-1);justify-content:center}.auth-footer{margin-top:var(--space-6);gap:var(--space-3);text-align:center;font-size:var(--text-sm);color:var(--color-text-muted);flex-direction:column;align-items:center;display:flex}.auth-code{font-family:var(--font-mono,ui-monospace, "SF Mono", monospace);font-size:var(--text-xl);letter-spacing:10px;text-align:center;padding-left:10px}.auth-divider{border:0;border-top:1px solid var(--color-line);margin:var(--space-6) 0}
