:root{--bg0:#07040d;--bg1:#0e0a14;--card:#0f0c16;--card2:#0f0c16;--surface:#15111d;--surface2:#1b1624;--stroke:rgba(255,255,255,.08);--stroke2:rgba(255,255,255,.14);--text:#f4f1f8;--muted:rgba(236,232,245,.58);--label:rgba(236,232,245,.78);--shine:rgba(255,255,255,.04);--accent:#a78bfa;--accent2:#8b5cf6;--accent-soft:rgba(139,92,246,.16);--accent-ring:rgba(167,139,250,.55);--radius:12px}*{box-sizing:border-box}@keyframes drift{0%{transform:translate(0,0) scale(1)}50%{transform:translate(2%,1%) scale(1.02)}100%{transform:translate(0,0) scale(1)}}@keyframes shimmer{0%{background-position:0% 50%}100%{background-position:200% 50%}}html{min-height:100%}body{font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;margin:0;color:var(--text);background:var(--bg0);line-height:1.5;position:relative;overflow-x:hidden;-webkit-font-smoothing:antialiased}body::before{content:"";position:fixed;inset:-25%;background:radial-gradient(ellipse 80% 45% at 15% -5%,rgba(124,58,237,.16),transparent 55%),radial-gradient(ellipse 60% 40% at 105% 0%,rgba(56,189,248,.06),transparent 50%);pointer-events:none;z-index:0}.wrap{position:relative;z-index:1;max-width:36rem;margin:0 auto;padding:1.35rem 1rem 3.25rem}.toputil{display:flex;justify-content:flex-end;align-items:center;flex-wrap:nowrap;gap:.15rem;margin:0 0 .9rem;min-height:1.35rem;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.doclink{display:inline-flex;align-items:center;gap:.32rem;flex:0 0 auto;white-space:nowrap;font-size:.78rem;font-weight:600;color:var(--muted);text-decoration:none;border-radius:8px;padding:.38rem .6rem;border:1px solid transparent;-webkit-tap-highlight-color:transparent;touch-action:manipulation;cursor:pointer;transition:color .12s ease,background .12s ease,border-color .12s ease}.doclink:hover{color:var(--text);background:rgba(255,255,255,.05)}.doclink:active{color:var(--text);background:rgba(255,255,255,.09)}footer a[href],.doc a[href^="/"]{-webkit-tap-highlight-color:transparent;touch-action:manipulation;cursor:pointer;transition:color .12s ease,opacity .12s ease,transform .1s ease;border-radius:4px}footer a[href]:active,.doc a[href^="/"]:active{transform:scale(0.98);opacity:.92}body.nav-pending{cursor:progress!important}body.nav-pending *{cursor:progress!important}body.nav-pending::after{content:"";position:fixed;inset:0;z-index:10000;pointer-events:none;background:radial-gradient(120% 85% at 50% 20%,rgba(124,58,237,.35),rgba(7,4,13,.72) 55%,rgba(7,4,13,.88));opacity:1}body.nav-pending::before{content:"";position:fixed;left:0;right:0;top:0;height:7px;z-index:10001;pointer-events:none;background:linear-gradient(90deg,#a78bfa,#38bdf8,#f472b6,#a78bfa);background-size:220% 100%;box-shadow:0 0 22px rgba(124,58,237,.55);animation:navBarFlow 1s linear infinite}@keyframes navBarFlow{0%{background-position:0% 0}100%{background-position:100% 0}}@keyframes _navSpin{to{transform:rotate(360deg)}}#_navLd{display:none;position:fixed;inset:0;z-index:10002;flex-direction:column;align-items:center;justify-content:center;gap:1.05rem;pointer-events:none;padding:max(1.25rem,env(safe-area-inset-top)) 1.25rem 1.25rem;background:rgba(7,4,13,.78);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-weight:800;font-size:clamp(1.05rem,4.5vw,1.22rem);font-family:inherit;color:#f5f3ff;text-align:center;line-height:1.35;text-shadow:0 1px 2px rgba(0,0,0,.45)}body.nav-pending #_navLd{display:flex!important}#_navLd ._navSpin{width:52px;height:52px;border-radius:50%;flex-shrink:0;border:5px solid rgba(167,139,250,.22);border-top-color:#e9d5ff;border-right-color:rgba(56,189,248,.75);animation:_navSpin .58s linear infinite}.hero{margin:0 0 1.5rem;padding:.2rem 0}.hero-compact{margin:0 0 1rem;padding:.15rem 0}.hero-compact h1{font-size:1.6rem;margin:.2rem 0 0;line-height:1.2;letter-spacing:-.025em;font-weight:700}.hero-compact .eyebrow{margin:0 0 .35rem}.hero-compact .tagline{margin-top:.35rem}.hero-follow{margin-left:.5rem;font-size:.78rem;font-weight:600;letter-spacing:0;color:var(--muted);vertical-align:middle}.hero-follow[hidden]{display:none}.name-eyebrow{text-transform:none;letter-spacing:.02em;font-weight:600;color:var(--label)}.eyebrow{font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 0 .4rem;font-weight:600}h1{font-size:clamp(1.45rem,4.5vw,1.8rem);font-weight:700;margin:0 0 .4rem;line-height:1.15;letter-spacing:-.025em;color:var(--text)}.tagline{font-size:.88rem;color:var(--muted);margin:0;max-width:32em;line-height:1.55}.callout{background:rgba(139,92,246,.08);border:1px solid rgba(167,139,250,.28);border-radius:var(--radius);padding:.8rem 1rem;margin:.75rem 0 0;font-size:.8rem;line-height:1.52}.callout b{color:var(--label)}.callout code{font-size:.78em;padding:.06em .28em;border-radius:6px;background:rgba(18,12,32,.9);border:1px solid var(--stroke);word-break:break-all}section{margin-top:2rem;isolation:isolate;clear:both}h2{font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 .7rem;padding:0;border-bottom:none;display:block;font-weight:600;line-height:1.45;position:relative;z-index:2;overflow-wrap:break-word}section>h2+p.note{margin-top:.15rem}section>h2+p.note+.grid.modes,section>h2+p.note+.pal{margin-top:.55rem}section>h2+.grid{margin-top:.5rem}section>h2+.card{margin-top:.45rem}p.note{font-size:.8rem;color:var(--muted);margin:.35rem 0 0;line-height:1.5}p.note.lead{margin:0 0 .75rem}.grid{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.power-bar{display:flex;flex-direction:column;gap:1rem;align-items:stretch;margin-top:.5rem}.power-bar .grid{margin-top:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.power-sliders{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.75rem 1.5rem;align-items:end;padding:.85rem 1rem .5rem;background:var(--card);border:1px solid var(--stroke);border-radius:var(--radius)}.power-sliders label{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:0 .5rem;font-size:.78rem;font-weight:600;letter-spacing:0;text-transform:none;color:var(--label);min-width:0}.power-sliders input[type=range]{flex:1 0 100%;width:100%;height:36px;margin:0;padding:0;-webkit-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer}.power-sliders input[type=range]::-webkit-slider-runnable-track{width:100%;height:6px;border-radius:999px;background:rgba(255,255,255,.1);border:none}.power-sliders input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;margin-top:-8px;border-radius:50%;background:#fff;border:none;box-shadow:0 0 0 4px var(--accent-soft),0 1px 4px rgba(0,0,0,.5)}.power-sliders input[type=range]::-moz-range-track{width:100%;height:6px;border-radius:999px;background:rgba(255,255,255,.1);border:none}.power-sliders input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:#fff;border:none;box-shadow:0 0 0 4px var(--accent-soft),0 1px 4px rgba(0,0,0,.5);cursor:pointer}.power-sliders .sl-val{font-size:.78rem;font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted);font-variant-numeric:tabular-nums}.grid.modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;align-items:stretch;margin:0 0 .5rem}@media (min-width:380px){.grid.modes{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:560px){.grid.modes{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:380px){.pal{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:560px){.pal{grid-template-columns:repeat(4,minmax(0,1fr))}}.mt{margin-top:.5rem}.card{background:var(--card);border:1px solid var(--stroke);border-radius:14px;padding:1rem 1.1rem;margin:0 0 1rem;box-shadow:none}.card b{font-size:.92rem;letter-spacing:0;font-weight:650}.status{font-size:.78rem;color:var(--muted);margin-top:.45rem;line-height:1.45}a.btn,button.btn{display:inline-flex;align-items:center;justify-content:center;margin:0;padding:.6rem 1rem;min-height:2.6rem;border-radius:10px;text-decoration:none;border:1px solid var(--stroke2);font:inherit;font-size:.84rem;font-weight:600;line-height:1.2;cursor:pointer;color:var(--text);background:var(--surface2);box-shadow:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:background .12s ease,border-color .12s ease,color .12s ease,transform .08s ease}a.btn:hover,button.btn:hover{background:#221c2d;border-color:rgba(255,255,255,.2)}a.btn:active,button.btn:active{transform:scale(.98);filter:none}a.btn.secondary,button.secondary{color:var(--text);background:transparent;border:1px solid var(--stroke2);box-shadow:none}a.btn.secondary:hover{background:rgba(255,255,255,.05);box-shadow:none}.pal{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:0 0 .45rem;align-items:stretch}.pal a.btn,.grid.modes a.btn{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:4rem;height:100%;padding:.6rem .5rem .55rem;font-weight:600;line-height:1.1;border:1px solid var(--stroke);background:var(--surface);gap:.3rem;text-align:center}.pal a.btn{padding-top:.6rem}.grid.modes a.btn{padding-top:.6rem}.pal a.btn .k,.grid.modes a.btn .k{position:absolute;top:.35rem;left:.5rem;font-size:.62rem;letter-spacing:0;opacity:.45;font-weight:600;font-variant-numeric:tabular-nums;line-height:1}.grid.modes a.btn .k.sub{font-size:.6rem;opacity:.4;letter-spacing:0}.pal a.btn .n,.grid.modes a.btn .n{font-size:.78rem;letter-spacing:0;text-align:center;word-break:break-word;hyphens:auto;line-height:1.2}.grid.modes a.btn .mode-emoji,.pal a.btn .mode-emoji{display:block;font-size:1.35rem;line-height:1;margin:0}input[type=text],input[type=password]{width:100%;padding:.65rem .85rem;border-radius:10px;border:1px solid var(--stroke2);background:rgba(0,0,0,.35);color:var(--text);margin:.4rem 0;font-size:.9rem;box-shadow:none}input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}#form-sched .sched-slots{margin-top:.55rem;border-top:1px solid var(--stroke);padding-top:.35rem}#form-sched .sched-slot{padding:.85rem 0 .9rem;border-bottom:1px solid var(--stroke);display:flex;flex-direction:column;gap:.65rem}#form-sched .sched-slot:last-child{border-bottom:none;padding-bottom:.15rem}#form-sched .sched-line1{display:flex;flex-wrap:wrap;align-items:flex-start;column-gap:.85rem;row-gap:.65rem}#form-sched .sched-num{flex:0 0 auto;min-width:2rem;height:2.1rem;padding:0 .35rem;display:inline-flex;align-items:center;justify-content:center;font-weight:800;font-size:.82rem;color:#ede9fe;background:rgba(27,22,36,.92);border:1px solid var(--stroke);border-radius:12px}#form-sched label.sched-on{display:inline-flex!important;align-items:center;gap:.42rem;margin:0!important;padding-top:.35rem;font-size:.76rem;font-weight:650;color:var(--label)}#form-sched .sched-time-block,#form-sched .sched-days-block{display:flex;flex-direction:column;gap:.28rem;min-width:0}#form-sched .sched-inline-lab{font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:700}#form-sched .sched-time-wrap{display:inline-flex;align-items:center;gap:.2rem;flex-wrap:nowrap}#form-sched .sched-colon{opacity:.7;font-weight:700;padding:0 .05rem}#form-sched input.sched-hm{width:3rem;max-width:3.25rem;min-width:2.65rem;padding:.48rem .32rem;margin:0!important;display:inline-block;text-align:center;font-size:.9rem!important;box-sizing:border-box;border-radius:11px}#form-sched .sched-days-wrap{display:flex;flex-wrap:wrap;gap:.45rem .55rem;align-items:center;padding:.1rem 0 .05rem}#form-sched label.sched-day-lbl{display:inline-flex!important;align-items:center;gap:.22rem;margin:0!important;font-size:.72rem;font-weight:600;color:var(--label);padding:.2rem .05rem}#form-sched .sched-line2{display:flex;flex-wrap:wrap;gap:.75rem 1rem;align-items:flex-end}#form-sched .sched-field{display:flex;flex-direction:column;gap:.32rem;margin:0!important;min-width:0}#form-sched .sched-field-action{flex:1 1 100%;min-width:0}#form-sched .sched-field-value{flex:1 1 100%;min-width:0;max-width:100%}#form-sched .sched-field-value input.sched-arg{max-width:100%}#form-sched .sched-lab{font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:700}#form-sched select{width:100%;margin:0!important;padding:.55rem .65rem;border-radius:10px;border:1px solid var(--stroke2);background:rgba(0,0,0,.35);color:var(--text);font-size:.84rem;box-shadow:none}#form-sched select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}#form-leds select,#form-pins select{width:100%;margin:.4rem 0 .15rem;padding:.58rem .7rem;border-radius:10px;border:1px solid var(--stroke2);background:rgba(0,0,0,.35);color:var(--text);font-size:.9rem;box-shadow:none}#form-leds select:focus,#form-pins select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}#form-sched input.sched-arg{width:100%;margin:0!important;padding:.55rem .65rem;font-size:.88rem;border-radius:12px;max-width:9rem}@media (min-width:400px){#form-sched .sched-line1{align-items:flex-end}#form-sched .sched-days-block{flex:1 1 10rem}}@media (min-width:480px){#form-sched .sched-field-action{flex:1 1 12rem}#form-sched .sched-field-value{flex:0 1 7.5rem;max-width:9rem}#form-sched .sched-field-value input.sched-arg{max-width:9rem}}label{font-size:.76rem;color:var(--label);font-weight:600;display:block;margin-top:.35rem}.card button.btn{margin-top:.65rem}#toast{position:fixed;left:50%;bottom:1.25rem;transform:translate3d(-50%,120%,0);z-index:50;padding:.6rem 1.1rem;border-radius:10px;font-size:.84rem;font-weight:600;background:rgba(27,22,36,.96);color:var(--text);border:1px solid var(--stroke2);opacity:0;pointer-events:none;transition:opacity .2s,transform .28s cubic-bezier(.2,.85,.2,1);box-shadow:0 12px 32px rgba(0,0,0,.5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}#toast.show{opacity:1;transform:translate3d(-50%,0,0)}#mtrLite{display:none;margin:0 0 .65rem;padding:.45rem .7rem;border-radius:10px;background:rgba(27,22,36,.6);border:1px solid rgba(125,108,168,.45);color:rgba(230,220,255,.85);font-size:.74rem;line-height:1.4}#mtrLite.show{display:block}#mtrLite b{color:var(--label)}.ddns-stack{margin:0 0 1.15rem}.ddns-pending{margin:0;padding:.55rem .78rem;border-radius:12px;background:rgba(245,158,11,.14);border:1px solid rgba(251,191,36,.45);color:rgba(254,243,199,.95);font-size:.8rem;line-height:1.48}.ddns-pending b{color:#fef08a}.ddns-hero{margin:0;padding:1.05rem 1.15rem 1.1rem;border-radius:14px;border:2px solid rgba(192,132,252,.55);background:linear-gradient(155deg,rgba(124,58,237,.32),rgba(24,16,40,.92));box-shadow:0 0 36px rgba(124,58,237,.32),inset 0 1px 0 rgba(255,255,255,.1)}.ddns-eyebrow{margin:0 0 .5rem;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:#ede9fe;font-weight:800}.ddns-hero .ddns-url{display:block;margin:0;font-size:clamp(1.08rem,4.5vw,1.5rem);font-weight:800;color:#fff;text-decoration:underline;text-underline-offset:4px;word-break:break-all;line-height:1.32}.ddns-hero .ddns-url:hover{color:#fef08a}.ddns-hint{margin:.6rem 0 0;font-size:.78rem;color:rgba(230,220,255,.85);line-height:1.48}.chips{display:flex;flex-wrap:wrap;gap:.35rem .5rem;align-items:center;margin:.25rem 0 .5rem}.chip{font-size:.74rem;font-weight:600;padding:.32rem .62rem;border-radius:8px;background:var(--surface);border:1px solid var(--stroke);color:var(--text)}.chip b{color:var(--label);font-weight:700}a.btn.is-active,button.btn.is-active{outline:none;background:var(--accent-soft);border-color:var(--accent);color:#fff;box-shadow:inset 0 0 0 1px var(--accent);filter:none;transform:none;position:relative;z-index:0}a.btn.secondary.is-active,button.btn.secondary.is-active{outline:none;background:var(--accent-soft);border-color:var(--accent);color:#fff;box-shadow:inset 0 0 0 1px var(--accent);filter:none;transform:none;position:relative;z-index:0}.modes a.btn.is-active{outline:none;background:var(--accent-soft);border-color:var(--accent);color:#fff;box-shadow:inset 0 0 0 1px var(--accent);filter:none;transform:none;position:relative;z-index:0}.modes a.btn.is-active .mode-emoji{filter:none}.pal a.btn.is-active{outline:none;background:var(--accent-soft);border-color:var(--accent);color:#fff;box-shadow:inset 0 0 0 1px var(--accent);filter:none;transform:none;position:relative;z-index:0}footer{margin-top:2.5rem;padding-top:1rem;border-top:1px solid var(--stroke);font-size:.72rem;color:var(--muted);letter-spacing:.04em;text-align:center}.doc{max-width:42rem}.doc p{margin:.55rem 0 0;line-height:1.62;color:rgba(247,242,255,.94)}.doc p.lead{color:var(--muted);font-size:.9rem;line-height:1.58;margin:.4rem 0 .85rem}.doc h3{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--label);margin:1.45rem 0 .55rem;font-weight:800}.doc table{width:100%;border-collapse:collapse;font-size:.76rem;margin:.55rem 0 0}.doc th,.doc td{border:1px solid var(--stroke);padding:.48rem .55rem;text-align:left;vertical-align:top}.doc th{background:rgba(27,22,36,.58);color:var(--label);font-weight:700;width:30%}.doc ul{margin:.45rem 0 .15rem;padding-left:1.15rem}.doc li{margin:.32rem 0}.callout{background:rgba(124,58,237,.1);border:1px solid rgba(167,139,250,.38);border-radius:12px;padding:.8rem 1rem;margin:.75rem 0 0;font-size:.8rem;line-height:1.52}.callout b{color:var(--label)}kbd{display:inline-block;font-size:.72em;padding:.1em .42em;border-radius:5px;background:var(--surface2);border:1px solid var(--stroke2);border-bottom-width:2px;font-family:inherit;font-weight:600;color:var(--text)}.doc .modechip{display:inline-block;font-size:.68rem;font-weight:700;padding:.2rem .45rem;border-radius:8px;background:rgba(27,22,36,.85);border:1px solid var(--stroke);margin:.1rem .1rem 0 0}.cust-intro{font-size:.8rem;color:var(--muted);line-height:1.55;margin:0 0 .55rem}.hero-compact p.cust-intro:last-of-type{margin-bottom:1rem}.cust-slots-help{font-size:.78rem;color:rgba(236,230,255,.88);line-height:1.58;margin:.35rem 0 .5rem;padding:.6rem .75rem;background:rgba(124,58,237,.1);border:1px solid rgba(167,139,250,.28);border-radius:11px}.cust-slots-help b{color:var(--label)}.cust-card{background:linear-gradient(145deg,var(--card),var(--card2));border:1px solid var(--stroke);border-radius:16px;padding:1rem 1.1rem;margin:0 0 1rem}.cust-row{margin:.55rem 0 0}.cust-row label{display:block;font-size:.72rem;color:var(--label);font-weight:600;margin-bottom:.28rem}select.cust-in,input.cust-in{width:100%;max-width:100%;padding:.52rem .6rem;border-radius:11px;border:1px solid var(--stroke);background:rgba(0,0,0,.35);color:var(--text);font-size:.86rem}.cust-row.cust-slider-row{margin-top:.7rem}.cust-row.cust-slider-row label{font-size:.8rem;margin-bottom:.4rem}.cust-dz .cust-row.cust-slider-row{margin-top:.5rem}.cust-dz .cust-row.cust-slider-row:first-of-type{margin-top:.15rem}.cust-custom-pal{margin:.5rem 0 0;padding:.65rem .75rem;background:rgba(8,5,14,.55);border:1px solid rgba(167,139,250,.22);border-radius:12px}.cust-custom-pal.is-hidden{display:none}.cust-pal-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(7.5rem,1fr));gap:.55rem;margin-top:.45rem}.cust-pal-swatch label{display:block;font-size:.68rem;color:var(--label);margin-bottom:.25rem}.cust-pal-swatch input[type=color]{width:100%;height:2.65rem;padding:0;border-radius:10px;border:1px solid var(--stroke);cursor:pointer;background:transparent}input.cust-in[type=range]{-webkit-appearance:none;appearance:none;display:block;width:100%;max-width:100%;height:2.5rem;padding:.45rem 0;margin:.1rem 0 0;background:transparent;border:none;box-shadow:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent}input.cust-in[type=range]::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:rgba(255,255,255,.1);border:none;box-shadow:none}input.cust-in[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;margin-top:-8px;background:#fff;border:none;box-shadow:0 0 0 4px var(--accent-soft),0 1px 4px rgba(0,0,0,.5)}input.cust-in[type=range]::-moz-range-track{height:6px;border-radius:999px;background:rgba(255,255,255,.1);border:none;box-shadow:none}input.cust-in[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;border:none;cursor:pointer;background:#fff;box-shadow:0 0 0 4px var(--accent-soft),0 1px 4px rgba(0,0,0,.5)}.cust-hint{font-size:.74rem;color:var(--muted);margin:.35rem 0 0;line-height:1.45}.cust-pal-ref{margin:.45rem 0 0;font-size:.74rem;color:var(--muted)}.cust-pal-ref summary{cursor:pointer;font-weight:650;color:var(--label);letter-spacing:.02em}.cust-pal-ref table{width:100%;font-size:.7rem;border-collapse:collapse;margin-top:.4rem;color:rgba(247,242,255,.9)}.cust-pal-ref td,.cust-pal-ref th{border:1px solid var(--stroke);padding:.32rem .4rem;text-align:left;vertical-align:top}.cust-pal-ref th{color:var(--label);font-weight:700;width:2.4rem;white-space:nowrap}.cust-pal-ref kbd{display:inline-block;font-size:.62em;padding:.06em .32em;border-radius:5px;background:rgba(18,12,32,.95);border:1px solid var(--stroke);font-family:inherit;font-weight:700;color:#ede9fe}.cust-pal-foot{font-size:.68rem!important;color:rgba(230,220,255,.72)!important;line-height:1.45}.cust-actions{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.85rem;align-items:center}.cust-actions .btn{margin:0}.cust-chase2{margin-top:.75rem;padding-top:.65rem;border-top:1px solid var(--stroke)}.cust-chase2>h3{font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--label);margin:0 0 .4rem;font-weight:800}.cust-dz{border:1px solid rgba(167,139,250,.22);border-radius:12px;padding:.55rem .65rem .6rem;margin:.55rem 0 0;background:rgba(18,12,28,.38)}.cust-dz>h4{margin:0 0 .35rem;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--label);font-weight:800;display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}.cust-dz .cust-row{margin-top:.38rem}.cust-dz .cust-row:first-of-type{margin-top:0}.cust-layer-group{margin:.85rem 0 0}.cust-layer-group>h3{margin:0 0 .35rem;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;font-weight:800}.cust-layer-group>h3.sub{color:#fecaca;border-left:3px solid #f87171;padding-left:.55rem}.cust-layer-group>h3.add{color:#bbf7d0;border-left:3px solid #4ade80;padding-left:.55rem}.cust-layer-note{font-size:.74rem;color:var(--muted);margin:0 0 .45rem;line-height:1.48}.cust-dz-sub{border-color:rgba(248,113,113,.38);background:rgba(40,12,18,.32)}.cust-dz-add{border-color:rgba(74,222,128,.32);background:rgba(12,32,20,.32)}.cust-dz-badge{font-size:.58rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:.14rem .42rem;border-radius:6px;white-space:nowrap}.cust-dz-badge.sub{color:#fecaca;background:rgba(127,29,29,.45);border:1px solid rgba(248,113,113,.45)}.cust-dz-badge.add{color:#bbf7d0;background:rgba(20,83,45,.45);border:1px solid rgba(74,222,128,.45)}.m0{margin:0}.mt0{margin-top:0}.mt55{margin-top:.55rem}.mt65{margin-top:.65rem}.dn{display:none}.cmatch-chips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.45rem;margin:.45rem 0 .1rem}.cmatch-chip{display:flex;flex-direction:column;align-items:center;gap:.35rem;margin:0;padding:.45rem .3rem .55rem;border-radius:14px;border:1px solid var(--stroke);background:rgba(18,12,32,.55);cursor:pointer;color:inherit;font:inherit;-webkit-tap-highlight-color:transparent}.cmatch-chip .sw{width:100%;height:2.4rem;border-radius:10px;border:1px solid rgba(255,255,255,.18);box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}.cmatch-chip .n{font-size:.72rem;font-weight:700;color:#ede9fe}.cmatch-chip.is-active{outline:none;border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}.cmatch-sl label{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;margin-top:.75rem}.cmatch-sl .pct{font-variant-numeric:tabular-nums;color:var(--muted);font-weight:650;font-size:.72rem;text-transform:none;letter-spacing:0}.card .grid>button.btn{margin-top:0}
/* ---- Timer (/schedule): switches, day chips, per-action value, plain-English summary ---- */
.sched-master{display:flex!important;align-items:flex-start;gap:.6rem;margin:0!important;font-size:.86rem;color:var(--text);font-weight:600;cursor:pointer}
.sched-master input{width:1.35rem;height:1.35rem;margin:.1rem 0 0;accent-color:#a78bfa;flex:0 0 auto}
.sched-master .note{margin:.1rem 0 0;font-weight:500}
.sched-tz-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.55rem}
#form-sched .sched-tz-row select{flex:1 1 12rem;min-width:0;width:auto}
.sched-tz-row .btn{flex:0 0 auto;padding:.45rem .8rem;font-size:.76rem}
#form-sched .sched-slot{opacity:.62;transition:opacity .15s ease}
#form-sched .sched-slot.is-on{opacity:1}
#form-sched .sched-head{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap}
#form-sched input.sched-clock-in{flex:1 1 7.5rem;min-width:7rem;max-width:11rem;margin:0!important;padding:.5rem .6rem;border-radius:10px;border:1px solid var(--stroke2);background:rgba(0,0,0,.35);color:var(--text);font-size:1rem;font-weight:700;font-variant-numeric:tabular-nums;box-shadow:none}
#form-sched input.sched-clock-in:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
#form-sched label.sched-sw{display:inline-flex!important;align-items:center;gap:.4rem;margin:0!important;cursor:pointer;-webkit-tap-highlight-color:transparent}
#form-sched label.sched-sw input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.sched-sw-track{width:2.6rem;height:1.5rem;border-radius:999px;background:rgba(27,22,36,.95);border:1px solid var(--stroke);position:relative;flex:0 0 auto;transition:background .15s ease,border-color .15s ease}
.sched-sw-track::after{content:"";position:absolute;top:.16rem;left:.18rem;width:1.05rem;height:1.05rem;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.5);transition:transform .15s ease}
.sched-slot.is-on .sched-sw-track{background:var(--accent2);border-color:var(--accent2)}
.sched-slot.is-on .sched-sw-track::after{transform:translateX(1.05rem)}
.sched-sw-txt{font-size:.72rem;font-weight:700;color:var(--muted);min-width:1.6rem}
.sched-slot.is-on .sched-sw-txt{color:var(--text)}
#form-sched .sched-body{padding-left:.1rem}
#form-sched label.sched-day-lbl{display:inline-flex!important;align-items:center;justify-content:center;min-width:2.35rem;padding:.34rem .5rem;margin:0!important;border-radius:999px;border:1px solid var(--stroke);background:rgba(27,22,36,.72);color:var(--muted);font-size:.74rem;font-weight:700;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .12s ease,color .12s ease,border-color .12s ease}
#form-sched label.sched-day-lbl input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
#form-sched label.sched-day-lbl.is-on{background:var(--accent-soft);border-color:var(--accent);color:#fff}
.sched-quick{border:1px dashed var(--stroke2);background:transparent;color:var(--label);font:inherit;font-size:.7rem;font-weight:700;padding:.3rem .55rem;border-radius:999px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.sched-quick:active{background:rgba(124,58,237,.22)}
#form-sched select.sched-act{margin-top:.28rem!important}
#form-sched .sched-val{margin-top:.5rem}
#form-sched .sched-val.dn{display:none}
#form-sched .sched-val .sched-inline-lab{display:block;margin-bottom:.1rem}
#form-sched .sched-val .pct{font-variant-numeric:tabular-nums;color:var(--label);font-weight:700;letter-spacing:0;text-transform:none;margin-left:.35rem}
.sched-say{margin:.55rem 0 0;font-size:.78rem;line-height:1.45;color:var(--label);background:rgba(139,92,246,.08);border:1px solid rgba(167,139,250,.2);border-radius:10px;padding:.4rem .55rem}
.sched-say.is-off{color:var(--muted);background:transparent;border-color:transparent;padding-left:0}
.sched-say.is-warn{color:#fde68a;background:rgba(245,158,11,.14);border-color:rgba(251,191,36,.4)}

/* ---- Design (/design): live slider readouts and quiet layers ---- */
.cust-slider-row label{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem}
.cust-slider-row .lv{font-size:.72rem;font-weight:700;color:var(--label);font-variant-numeric:tabular-nums;letter-spacing:0;text-transform:none}
.cust-slider-row .lv.is-off{color:var(--muted);font-weight:600}
.cust-dz{transition:opacity .15s ease}
.cust-dz.is-quiet{opacity:.55}
.cust-dz-state{font-size:.58rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:.14rem .42rem;border-radius:6px;white-space:nowrap;color:var(--muted);background:rgba(27,22,36,.85);border:1px solid var(--stroke)}
.cust-dz:not(.is-quiet) .cust-dz-state{color:#bbf7d0;background:rgba(20,83,45,.4);border-color:rgba(74,222,128,.4)}
/* `is-hidden` is set by JS on the Design page's "your palette" row; it had no rule, so the
   four colour pickers showed for every palette choice. */
.is-hidden{display:none!important}
.sched-src-warn{color:#fde68a!important}

/* ---- Polish: keyboard focus, phone nav, power buttons, reduced motion ---- */
.toputil::-webkit-scrollbar{display:none}
@media (max-width:420px){.toputil{justify-content:flex-start;margin-left:-.5rem;margin-right:-1rem;padding-right:1rem}.doclink{padding:.38rem .45rem;font-size:.76rem}}
a.btn:focus-visible,button.btn:focus-visible,.doclink:focus-visible,.cmatch-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.power-bar .grid a.btn{width:100%;white-space:nowrap;padding-left:.4rem;padding-right:.4rem}
/* Lifts dark emoji (e.g. the black circle on Blackouts) off the dark tiles. */
.pal .mode-emoji,.grid.modes .mode-emoji{filter:drop-shadow(0 0 1px rgba(255,255,255,.45))}
.power-sliders+.status,.power-bar+.status{margin-top:.6rem}
input[type=checkbox],input[type=radio]{accent-color:var(--accent2)}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
button.btn:not(.secondary):not(.is-active){background:var(--accent2);border-color:transparent;color:#fff}
button.btn:not(.secondary):not(.is-active):hover{background:#7c4ff0;border-color:transparent}
/* The base .pal rule sits after its media queries, so they never applied; restate them last. */
@media (min-width:380px){.pal{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (min-width:560px){.pal{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* ---- Live preview (Lights page + full screen) ---- */
.pv-card{display:flex;flex-direction:column;gap:.6rem}
.pv-inline{width:100%;border-radius:10px;background:#000;overflow:hidden;line-height:0}
.pv-inline[hidden]{display:none}
/* ?demo=ball&embed=1: only the live preview and its look buttons (the website's "Try it live"). */
html.embed body{background:#05030a}
html.embed #app{padding:0;max-width:none;margin:0}
html.embed #app>*:not(#pv-section),html.embed #browser-support,html.embed #pv-section>h2{display:none!important}
html.embed #pv-section{margin:0}
html.embed .pv-card{background:transparent;border:0;box-shadow:none;padding:.5rem}
.pv-embed-bar{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap}
.pv-embed-cap{font-weight:600;color:#e2e8f0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 12rem}
.pv-embed-btns{display:flex;gap:.4rem}
.pv-embed-btns .btn{min-width:3rem}
.pv-canvas{display:block;margin:0 auto}
.pv-msg{margin:0}
.pv-msg[hidden],.pv-full-msg[hidden],#pv-full-open[hidden]{display:none}
body.pv-open{overflow:hidden}
.pv-full{position:fixed;inset:0;z-index:1000;background:#000;display:flex;flex-direction:column}
.pv-full-stage{flex:1 1 auto;min-height:0;position:relative;overflow:hidden;touch-action:none}
.pv-full-bar{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:2rem max(1rem,env(safe-area-inset-right)) max(.75rem,env(safe-area-inset-bottom)) max(1rem,env(safe-area-inset-left));background:linear-gradient(transparent,rgba(0,0,0,.7));transition:opacity .6s ease}
.pv-full-btns{display:flex;gap:.5rem;flex:0 0 auto}
.pv-full-btns .btn{width:auto!important;margin:0!important}
.pv-full-btns .btn{white-space:nowrap}
/* Phone held upright: caption on its own line above the buttons. */
@media (max-width:600px){.pv-full-bar{flex-direction:column;align-items:stretch;gap:.6rem}.pv-full-btns{justify-content:flex-start}.pv-full-btns .pv-full-close{margin-left:auto!important}}
.pv-full.pv-idle .pv-full-bar{opacity:0;pointer-events:none}
.pv-full.pv-idle{cursor:none}
.pv-full-cap{min-width:0;color:var(--label);font-weight:700;font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-full-close{width:auto!important;flex:0 0 auto;padding:.55rem 1.1rem}
.pv-full-msg{position:absolute;left:0;right:0;top:45%;text-align:center;color:var(--muted);margin:0;padding:0 1.5rem}

/* ---- TV (Android TV WebView sets html.tv): ten-foot sizing and a visible D-pad focus ring ---- */
html.tv{font-size:20px}
html.tv .wrap{max-width:1100px}
html.tv a.btn:focus,html.tv button.btn:focus,html.tv .doclink:focus,html.tv input:focus,html.tv select:focus{outline:3px solid #fff;outline-offset:3px;box-shadow:0 0 0 6px var(--accent-ring)}
html.tv .pv-full-cap{font-size:1.3rem}

/* ---- Demo (simulated light) ---- */
.demo-banner{margin:.75rem 0 0}
.demo-actions{display:flex;flex-wrap:wrap;gap:.5rem}
.demo-actions .btn{width:auto;flex:1 1 10rem}

/* ---- Classic palette tile: its four colours instead of an emoji ---- */
.pal a.btn .pal-dots{display:flex;gap:.22rem;justify-content:center;align-items:center;height:1.35rem;filter:none}
.pal a.btn .pal-dots i{display:block;width:.62rem;height:.62rem;border-radius:50%;box-shadow:0 0 6px rgba(255,255,255,.18)}

/* ---- Live preview toggle (eye icon beside the Lights title) ---- */
.hero-line{display:flex;align-items:center;justify-content:space-between;gap:.75rem}
.hero-line h1{margin:.2rem 0 0;min-width:0}
.pv-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;
  border-radius:50%;border:1px solid var(--stroke2);background:transparent;color:var(--muted);cursor:pointer;
  -webkit-tap-highlight-color:transparent;touch-action:manipulation;transition:background .12s ease,color .12s ease,border-color .12s ease}
.pv-toggle:hover{background:rgba(255,255,255,.05);color:var(--text)}
.pv-toggle.is-on{background:var(--accent-soft);border-color:var(--accent);color:#fff}
.pv-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
html.tv .pv-toggle:focus{outline:3px solid #fff;outline-offset:3px;box-shadow:0 0 0 6px var(--accent-ring)}
#pv-section[hidden]{display:none}
/* Zones (Lights page): one row per vehicle zone — name, its own look or "Same as all", and a color */
#zones-sec[hidden]{display:none}
.zone-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,9.5rem) 2.6rem;gap:.55rem;align-items:center;padding:.45rem 0;border-bottom:1px solid var(--stroke)}
.zone-row:last-child{border-bottom:none}
.zone-name{font-size:.86rem;font-weight:650;color:var(--label)}
.zone-row select{width:100%;padding:.5rem .55rem;border-radius:10px;border:1px solid var(--stroke2);background:rgba(0,0,0,.35);color:var(--text);font-size:.84rem}
.zone-row select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.zone-row input[type=color]{width:2.6rem;height:2.3rem;padding:0;border-radius:10px;border:1px solid var(--stroke2);background:transparent;cursor:pointer}
.zone-row input[type=color][hidden]{visibility:hidden;display:block}
/* The demo's signal buttons */
.grid.signals{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}
.grid.signals button.btn{margin:0}
/* button.btn sets display, which would otherwise override the hidden attribute (Cups on a non-ball). */
.pv-full-btns button[hidden]{display:none}
