:root{--bg:#07131f;--panel:rgba(14,28,44,.78);--panel2:rgba(255,255,255,.07);--text:#eef7ff;--muted:#91a7bc;--line:rgba(255,255,255,.13);--cyan:#35e7d2;--blue:#6da8ff;--green:#49df85;--amber:#ffd166;--red:#ff6b6b;--radius:24px;--shadow:0 24px 80px rgba(0,0,0,.36)}

/* Tema alternativo: activar con ?theme=apple. El tema actual es el predeterminado. */
body[data-theme="apple"]{--bg:#f5f5f7;--panel:rgba(255,255,255,.82);--panel2:#fff;--text:#1d1d1f;--muted:#6e6e73;--line:rgba(60,60,67,.18);--cyan:#00c7be;--blue:#007aff;--green:#34c759;--amber:#ff9f0a;--red:#ff3b30;--radius:22px;--shadow:0 12px 30px rgba(28,28,30,.10);color-scheme:light;background:radial-gradient(900px 560px at -8% -10%,rgba(90,200,250,.30),transparent 58%),radial-gradient(840px 480px at 108% 0,rgba(191,90,242,.16),transparent 56%),linear-gradient(145deg,#f5f5f7 20%,#edf7ff 56%,#f8f4ff);background-attachment:fixed}
body[data-theme="apple"] .topbar{background:rgba(255,255,255,.72);box-shadow:0 1px 0 rgba(60,60,67,.10);backdrop-filter:blur(26px) saturate(180%)}
body[data-theme="apple"] .brand-mark{background:linear-gradient(135deg,#0a84ff,#5e5ce6 52%,#bf5af2);color:#fff;box-shadow:0 10px 24px rgba(0,122,255,.24)}
body[data-theme="apple"] .top-actions a{background:rgba(255,255,255,.78);color:var(--blue);box-shadow:0 2px 7px rgba(28,28,30,.06)}
body[data-theme="apple"] .card,body[data-theme="apple"] .device-card,body[data-theme="apple"] .login-card,body[data-theme="apple"] .kpi,body[data-theme="apple"] .action-card{background:rgba(255,255,255,.78);box-shadow:var(--shadow);backdrop-filter:blur(24px) saturate(150%)}
body[data-theme="apple"] .glow:after{background:radial-gradient(circle,rgba(10,132,255,.17),transparent 70%)}
body[data-theme="apple"] .eyebrow{color:#007aff}
body[data-theme="apple"] .orb{background:conic-gradient(from 210deg,#5e5ce6,#0a84ff,#64d2ff,#30d158,#5e5ce6);box-shadow:inset 0 0 0 9px rgba(255,255,255,.72),0 14px 32px rgba(0,122,255,.24)}
body[data-theme="apple"] .action-card.primary{background:linear-gradient(135deg,#007aff,#5856d6 58%,#af52de);border-color:transparent;color:#fff;box-shadow:0 16px 34px rgba(0,122,255,.28)}
body[data-theme="apple"] .action-card.primary small{color:rgba(255,255,255,.78)}
body[data-theme="apple"] .action-card:not(.primary):hover,body[data-theme="apple"] .device-card:hover{border-color:rgba(0,122,255,.42);box-shadow:0 16px 36px rgba(0,122,255,.15);transform:translateY(-2px)}
body[data-theme="apple"] .chip,body[data-theme="apple"] .pill{background:rgba(255,255,255,.82);box-shadow:0 2px 6px rgba(28,28,30,.05)}
body[data-theme="apple"] .chip{color:var(--blue);border-color:rgba(0,122,255,.22)}
body[data-theme="apple"] .chip-danger{color:#c9342d;border-color:rgba(255,59,48,.26);background:rgba(255,59,48,.08)}
body[data-theme="apple"] .searchbar,body[data-theme="apple"] .ports-toolbar{background:rgba(255,255,255,.74);box-shadow:0 8px 22px rgba(28,28,30,.06)}
body[data-theme="apple"] input,body[data-theme="apple"] select,body[data-theme="apple"] textarea{background:rgba(255,255,255,.9);color:var(--text);border-color:rgba(60,60,67,.20);box-shadow:inset 0 1px 2px rgba(28,28,30,.04)}
body[data-theme="apple"] input:focus,body[data-theme="apple"] select:focus,body[data-theme="apple"] textarea:focus{border-color:var(--blue);box-shadow:0 0 0 4px rgba(0,122,255,.16);outline:0}
body[data-theme="apple"] button{background:linear-gradient(135deg,#007aff 0%,#5856d6 62%,#af52de 100%);color:#fff;border-color:rgba(255,255,255,.34);box-shadow:0 10px 22px rgba(88,86,214,.24)}body[data-theme="apple"] button:hover{filter:brightness(1.07);transform:translateY(-1px)}body[data-theme="apple"] button:active{transform:translateY(0);filter:brightness(.98)}
body[data-theme="apple"] .alert.success{background:rgba(52,199,89,.13);border-color:rgba(52,199,89,.34);color:#167a37}
body[data-theme="apple"] .alert.error{background:rgba(255,59,48,.10);border-color:rgba(255,59,48,.30);color:#b42318}
body[data-theme="apple"] .chem,body[data-theme="apple"] .port-card{background:linear-gradient(145deg,rgba(255,255,255,.92),rgba(247,249,255,.78));box-shadow:0 8px 20px rgba(28,28,30,.06)}
body[data-theme="apple"] .port-card.on{border-color:rgba(52,199,89,.44);box-shadow:0 10px 24px rgba(52,199,89,.16)}
body[data-theme="apple"] .gauge-arc{box-shadow:inset 0 0 0 18px rgba(245,245,247,.92),inset 0 0 0 20px rgba(60,60,67,.10)}
body[data-theme="apple"] .gauge-needle{background:linear-gradient(180deg,#1d1d1f,#6e6e73);box-shadow:0 3px 10px rgba(28,28,30,.24)}
body[data-theme="apple"] .gauge-hub{background:radial-gradient(circle at 35% 30%,#fff,#d1d1d6 46%,#636366 100%)}
body[data-theme="apple"] .footer{color:#6e6e73}
*{box-sizing:border-box}html{min-height:100%}body{margin:0;min-height:100%;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:var(--text);background:radial-gradient(900px 500px at 10% -10%,rgba(53,231,210,.35),transparent),radial-gradient(900px 500px at 95% 5%,rgba(109,168,255,.28),transparent),linear-gradient(160deg,#06101b,#0c2236 52%,#0b352f);background-attachment:fixed}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px max(16px,env(safe-area-inset-left));background:rgba(5,14,24,.72);border-bottom:1px solid var(--line);backdrop-filter:blur(18px)}.brand{display:flex;align-items:center;gap:10px}.brand-mark{width:42px;height:42px;border-radius:15px;display:grid;place-items:center;background:linear-gradient(135deg,var(--cyan),var(--blue));color:#03111d;font-weight:950;box-shadow:0 10px 26px rgba(53,231,210,.22)}.brand strong,.brand small{display:block}.brand small{color:var(--muted);font-size:11px;margin-top:1px}.top-actions{display:flex;gap:8px}.top-actions a{width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.07);font-weight:900}.main{width:min(1180px,100%);margin:0 auto;flex:1;padding:18px 14px 28px}.footer{display:flex;justify-content:space-between;padding:14px 18px;color:var(--muted);font-size:12px}.card,.device-card,.login-card,.kpi,.action-card{border:1px solid var(--line);background:var(--panel);border-radius:var(--radius);box-shadow:var(--shadow);backdrop-filter:blur(18px)}.glow{position:relative;overflow:hidden}.glow:after{content:"";position:absolute;right:-120px;top:-120px;width:280px;height:280px;background:radial-gradient(circle,rgba(53,231,210,.28),transparent 70%)}.eyebrow{text-transform:uppercase;letter-spacing:.14em;color:var(--cyan);font-size:11px;font-weight:900}.login-hero{min-height:calc(100vh - 130px);display:grid;gap:22px;align-items:center}.hero-copy h1,.dashboard-hero h1,.page-head h1{font-size:clamp(34px,8vw,72px);line-height:.92;margin:10px 0}.hero-copy p,.dashboard-hero p{color:var(--muted);font-size:18px;max-width:620px}.login-card{padding:22px;display:grid;gap:14px}.login-card h2{margin:0;font-size:28px}.login-card label,.install-form label{display:grid;gap:7px;color:var(--muted);font-size:13px;font-weight:800}.login-card input,.searchbar input,.install-form input,.install-form select{width:100%;border:1px solid var(--line);border-radius:16px;padding:13px 14px;background:rgba(2,9,16,.55);color:var(--text);outline:0}.login-card input:focus,.searchbar input:focus,.install-form input:focus,.install-form select:focus{border-color:rgba(53,231,210,.75);box-shadow:0 0 0 4px rgba(53,231,210,.12)}button,.login-card button,.install-form button{border:0;border-radius:16px;padding:14px 16px;background:linear-gradient(135deg,var(--cyan),var(--blue));color:#03111d;font-weight:950;cursor:pointer}.alert{border-radius:16px;padding:12px 14px;margin-bottom:12px;border:1px solid var(--line)}.alert.error{background:rgba(255,107,107,.14);border-color:rgba(255,107,107,.4)}.alert.success{background:rgba(73,223,133,.14);border-color:rgba(73,223,133,.4)}.dashboard-hero{padding:24px;display:flex;justify-content:space-between;align-items:center;gap:18px}.orb{width:132px;height:132px;flex:0 0 auto;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 35% 25%,#fff,rgba(53,231,210,.8) 18%,rgba(109,168,255,.26) 60%,rgba(255,255,255,.05));border:1px solid rgba(255,255,255,.3)}.orb span{font-size:46px;font-weight:950}.orb small{margin-top:-34px;color:#dff}.kpi-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:14px 0}.kpi{padding:16px}.kpi span,.kpi strong{display:block}.kpi span{color:var(--muted);font-size:12px;font-weight:800}.kpi strong{font-size:26px;margin-top:4px}.action-grid{display:grid;grid-template-columns:1fr;gap:12px}.action-card{padding:18px;display:grid;gap:8px;min-height:138px}.action-card span{font-size:30px}.action-card strong{font-size:20px}.action-card small{color:var(--muted)}.action-card.primary{background:linear-gradient(145deg,rgba(53,231,210,.28),rgba(109,168,255,.16)),var(--panel)}.page-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.page-head h1{font-size:44px;margin:4px 0}.chip{border:1px solid var(--line);background:var(--panel2);border-radius:999px;padding:10px 12px;font-size:13px;font-weight:900}.searchbar{display:flex;gap:8px;margin-bottom:14px}.searchbar button{width:52px;padding:0}.device-list{display:grid;grid-template-columns:1fr;gap:12px}.device-card{padding:12px;overflow:hidden}.device-main{display:grid;grid-template-columns:58px 1fr 20px;align-items:center;gap:12px}.device-main strong,.device-main small{display:block}.device-main small{color:var(--muted);margin-top:3px}.water-mark{height:58px;border-radius:20px;display:grid;place-items:center;background:linear-gradient(160deg,rgba(53,231,210,.25),rgba(109,168,255,.14));overflow:hidden}.water-mark span{width:34px;height:7px;border-radius:999px;background:rgba(238,247,255,.8);box-shadow:0 10px 0 rgba(238,247,255,.55),0 20px 0 rgba(238,247,255,.35)}.status-dot{width:13px;height:13px;border-radius:50%;background:var(--red);box-shadow:0 0 0 6px rgba(255,107,107,.12)}.device-card.online .status-dot{background:var(--green);box-shadow:0 0 0 6px rgba(73,223,133,.13)}.device-card.waiting .status-dot{background:var(--amber);box-shadow:0 0 0 6px rgba(255,209,102,.13)}.device-meta,.mini-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.device-meta span{font-size:12px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:6px 9px}.mini-actions a{width:40px;height:38px;display:grid;place-items:center;background:rgba(255,255,255,.08);border:1px solid var(--line);border-radius:14px}.install-list{padding:16px}.install-list h2{margin:0 0 12px}.install-list a{display:grid;grid-template-columns:32px 1fr auto;gap:10px;align-items:center;padding:12px;border-radius:16px;background:rgba(255,255,255,.06);margin-top:8px}.install-list small{color:var(--muted)}.install-form{padding:16px;display:grid;gap:14px}.form-title{display:flex;gap:12px;align-items:center;padding-bottom:12px;border-bottom:1px solid var(--line)}.form-title span{width:46px;height:46px;display:grid;place-items:center;border-radius:16px;background:rgba(53,231,210,.18);font-size:24px}.form-title strong,.form-title small{display:block}.form-title small{color:var(--muted);word-break:break-all}.form-grid,.toggle-grid{display:grid;grid-template-columns:1fr;gap:12px}.toggle-grid label{display:flex;align-items:center;gap:10px;background:rgba(255,255,255,.06);padding:12px;border-radius:16px}.toggle-grid input{width:auto}.note{color:var(--muted);font-size:12px;border:1px dashed var(--line);border-radius:16px;padding:12px}.empty{padding:22px;color:var(--muted)}
@media (min-width:760px){.main{padding:28px 22px 42px}.login-hero{grid-template-columns:1.1fr 420px}.kpi-grid{grid-template-columns:repeat(4,1fr)}.action-grid{grid-template-columns:repeat(3,1fr)}.device-list{grid-template-columns:repeat(2,1fr)}.form-grid{grid-template-columns:repeat(2,1fr)}}
@media (min-width:1120px){.device-list{grid-template-columns:repeat(3,1fr)}}
@media (max-width:520px){.topbar{padding:10px}.brand-mark{width:38px;height:38px}.top-actions a{width:35px;height:35px}.dashboard-hero{display:block}.orb{width:110px;height:110px;margin-top:16px}.page-head h1{font-size:36px}.hero-copy h1,.dashboard-hero h1{font-size:42px}.main{padding-left:10px;padding-right:10px}.device-main{grid-template-columns:50px 1fr 16px}.water-mark{height:50px}.login-hero{align-items:start;padding-top:20px}}
.admin-table{overflow:auto}.admin-table table{width:100%;border-collapse:collapse;min-width:720px}.admin-table th,.admin-table td{padding:13px 14px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.admin-table th{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.08em}.admin-table td strong,.admin-table td small{display:block}.admin-table td small{color:var(--muted);margin-top:3px}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:7px 10px;font-size:12px;font-weight:900;border:1px solid var(--line);background:rgba(255,255,255,.07)}.pill.online{border-color:rgba(73,223,133,.42);background:rgba(73,223,133,.14)}.pill.waiting{border-color:rgba(255,209,102,.42);background:rgba(255,209,102,.14)}.pill.offline{border-color:rgba(255,107,107,.42);background:rgba(255,107,107,.14)}.device-console{padding:18px;margin-bottom:14px}.console-head{display:flex;gap:14px;align-items:flex-start}.console-head h1{font-size:clamp(30px,7vw,58px);line-height:.95;margin:4px 0}.console-head small{color:var(--muted)}.chem-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:18px}.chem{border-radius:22px;padding:18px;background:rgba(255,255,255,.07);border:1px solid var(--line)}.chem span,.chem strong{display:block}.chem span{font-size:12px;color:var(--muted);font-weight:900;text-transform:uppercase;letter-spacing:.1em}.chem strong{font-size:44px;margin:6px 0}.chem meter{width:100%;height:16px}.ports-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px;padding:12px 14px;border:1px solid var(--line);border-radius:22px;background:rgba(255,255,255,.06);backdrop-filter:blur(14px)}.ports-toolbar strong{display:block;margin-top:2px}.chip-danger{border-color:rgba(255,209,102,.38);background:rgba(255,209,102,.13)}.ports-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:14px}.port-card{position:relative;min-height:132px;border-radius:24px;border:1px solid var(--line);background:linear-gradient(160deg,rgba(255,255,255,.08),rgba(255,255,255,.035)),var(--panel);padding:16px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.port-card:before{content:"";position:absolute;inset:auto -30px -60px auto;width:140px;height:140px;border-radius:50%;background:rgba(255,255,255,.045)}.port-card.on{border-color:rgba(73,223,133,.25)}.port-card.off{border-color:rgba(145,167,188,.16)}.port-id{position:relative;z-index:1}.port-id small,.port-id span{display:block}.port-id small{font-size:10px;letter-spacing:.16em;color:var(--muted);font-weight:950}.port-id span{margin-top:4px;font-size:15px;font-weight:900;color:var(--text)}.port-led-wrap{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:12px}.port-led-wrap strong{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.port-led{width:38px;height:38px;border-radius:50%;background:radial-gradient(circle at 35% 28%,#fff 0 8%,#8d99a8 18%,#263241 58%,#111a25 100%);border:1px solid rgba(255,255,255,.24);box-shadow:inset 0 -8px 14px rgba(0,0,0,.35),0 0 0 7px rgba(255,255,255,.04)}.port-card.on .port-led{background:radial-gradient(circle at 35% 28%,#fff 0 8%,#b9ffd0 18%,#49df85 48%,#159456 100%);box-shadow:inset 0 -8px 14px rgba(0,0,0,.22),0 0 0 7px rgba(73,223,133,.09),0 0 26px rgba(73,223,133,.85)}.port-card.off .port-led{opacity:.72}.port-switch{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:12px;border-radius:20px;padding:12px;background:rgba(255,255,255,.08);border:1px solid var(--line)}.port-switch:hover{text-decoration:none}.port-switch strong{font-size:15px;letter-spacing:.08em}.switch-track{position:relative;width:70px;height:38px;border-radius:999px;background:#273341;border:1px solid rgba(255,255,255,.16);box-shadow:inset 0 2px 10px rgba(0,0,0,.35)}.switch-thumb{position:absolute;top:4px;left:4px;width:30px;height:30px;border-radius:50%;background:linear-gradient(180deg,#fff,#c5d1dd);box-shadow:0 5px 12px rgba(0,0,0,.35);transition:transform .18s ease}.switch-on .switch-track{background:linear-gradient(135deg,var(--green),#19b96a);box-shadow:0 0 24px rgba(73,223,133,.38),inset 0 2px 10px rgba(0,0,0,.15)}.switch-on .switch-thumb{transform:translateX(32px)}.switch-off strong{color:var(--muted)}@media (min-width:760px){.ports-grid{grid-template-columns:repeat(3,1fr)}}@media (min-width:1120px){.ports-grid{grid-template-columns:repeat(5,1fr)}}@media (max-width:520px){.chem-grid{grid-template-columns:1fr}.admin-table table{min-width:620px}.ports-grid{grid-template-columns:1fr 1fr;gap:10px}.port-card{min-height:118px;padding:13px}.port-led{width:32px;height:32px}.ports-toolbar{position:sticky;top:64px;z-index:8}.switch-track{width:62px;height:34px}.switch-thumb{width:26px;height:26px}.switch-on .switch-thumb{transform:translateX(28px)}}
.gauge-card{position:relative;overflow:hidden}.gauge-title{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.gauge-title span{color:var(--text)}.gauge-title small{color:var(--muted);font-size:11px;font-weight:800}.gauge-shell{position:relative;width:min(260px,100%);aspect-ratio:2/1;margin:18px auto 0;overflow:hidden}.gauge-arc{position:absolute;left:0;right:0;top:0;aspect-ratio:1/1;border-radius:50%;background:conic-gradient(from 270deg,#fffde7 0deg,#fffad0 23deg,#fff7b9 46deg,#fff3a0 70deg,#ffe082 94deg,#ffca28 118deg,#ffb300 145deg,#ff9800 180deg,transparent 181deg 360deg);box-shadow:inset 0 0 0 18px rgba(4,17,29,.62),inset 0 0 0 20px rgba(255,255,255,.1)}.ph-gauge .gauge-arc{background:conic-gradient(from 270deg,#e53935 0deg,#c62828 28deg,#66bb6a 62deg,#43a047 82deg,#2e7d32 104deg,#8e24aa 135deg,#7b1fa2 158deg,#6a1b9a 180deg,transparent 181deg 360deg)}.gauge-needle{position:absolute;left:50%;bottom:0;width:4px;height:78%;border-radius:999px;background:linear-gradient(180deg,#fff,#dfe9f3);transform-origin:50% 100%;transform:translateX(-50%) rotate(var(--needle));box-shadow:0 0 14px rgba(255,255,255,.62),0 4px 12px rgba(0,0,0,.4)}.gauge-hub{position:absolute;left:50%;bottom:0;width:28px;height:28px;border-radius:50%;transform:translate(-50%,50%);background:radial-gradient(circle at 35% 30%,#fff,#93a4b4 46%,#223141 100%);border:1px solid rgba(255,255,255,.45);box-shadow:0 8px 20px rgba(0,0,0,.4)}.gauge-value{text-align:center;margin-top:-2px}.gauge-value strong{font-size:42px;line-height:1;margin:0;color:var(--text)}.gauge-value span{display:block;color:var(--muted);font-size:12px;font-weight:900;text-transform:uppercase;letter-spacing:.12em}.gauge-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;font-weight:900;margin-top:8px}.rx-gauge{box-shadow:inset 0 0 48px rgba(255,202,40,.05),var(--shadow)}.ph-gauge{box-shadow:inset 0 0 48px rgba(67,160,71,.06),var(--shadow)}@media (max-width:520px){.gauge-shell{width:min(230px,100%)}.gauge-value strong{font-size:38px}.gauge-arc{box-shadow:inset 0 0 0 16px rgba(4,17,29,.62),inset 0 0 0 18px rgba(255,255,255,.1)}}
.ports-groups{display:grid;gap:14px;margin-bottom:14px}.ports-group{padding:14px;border:1px solid var(--line);border-radius:22px;background:rgba(255,255,255,.04)}.ports-group h2{margin:0 0 10px;font-size:14px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.ports-group .ports-grid{margin:0}.port-led-wrap{display:contents}.port-led-wrap strong,.port-switch strong{display:none}.port-led{width:16px;height:16px;border-radius:50%;box-shadow:0 0 14px currentColor}.port-card.on .port-led{color:#49df85;background:currentColor}.port-card.off .port-led{color:#8c9aa7;background:currentColor}.gauge-mark{position:absolute;z-index:2;color:var(--muted);font-size:11px;font-weight:900;line-height:1}.gauge-mark-min{left:13px;bottom:7px}.gauge-mark-mid{left:50%;top:8px;transform:translateX(-50%)}.gauge-mark-max{right:13px;bottom:7px}.device-main{grid-template-columns:50px 1fr 16px}.connection-dot{width:14px;height:14px;align-self:center;justify-self:center;border-radius:50%;background:#8c9aa7;box-shadow:0 0 12px rgba(140,154,167,.65)}.connection-dot.online{background:#49df85;box-shadow:0 0 12px rgba(73,223,133,.8)}.connection-dot.waiting{background:#ffd166;box-shadow:0 0 12px rgba(255,209,102,.75)}.connection-dot.offline{background:#ff6b6b;box-shadow:0 0 12px rgba(255,107,107,.75)}.mini-actions{gap:8px}
.connection-dot.waiting{background:#8c9aa7;box-shadow:0 0 12px rgba(140,154,167,.65)}
.port-card{min-height:68px;padding:10px 12px;display:flex;align-items:center;gap:12px;overflow:hidden}.port-card:before,.port-card:after{display:none}.port-card .port-id{position:static;margin:0}.port-card .port-id small{margin-bottom:1px}.port-card .port-switch,.port-card .port-led-wrap{margin-left:auto;flex:0 0 auto}.port-card .port-led-wrap{display:flex;align-items:center;justify-content:center}.port-led{width:30px;height:30px}.port-switch.switch-pending{pointer-events:none;opacity:.7}.port-switch.switch-pending .switch-thumb{left:50%!important;transform:translateX(-50%)!important;animation:pending-switch 1s ease-in-out infinite}.gauge-mark-min{left:2px;bottom:2px}.gauge-mark-mid{top:0}.gauge-mark-max{right:2px;bottom:2px}@keyframes pending-switch{50%{opacity:.35}}
.ports-group .ports-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}.port-card{min-width:0;min-height:62px;padding:6px 3px;flex-direction:column;justify-content:center;gap:4px}.port-card .port-id{width:100%;text-align:center;min-width:0}.port-card .port-id small{display:none}.port-card .port-id span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:1.1}.port-card .port-switch,.port-card .port-led-wrap{position:static;margin:0;transform:scale(.84);transform-origin:center}.port-card .port-led-wrap{height:27px}.port-led{width:30px;height:30px}
.header-actions{display:flex;align-items:center;gap:8px}.theme-toggle{width:38px;height:38px;display:grid;place-items:center;padding:0;border:1px solid var(--line);border-radius:14px;color:var(--text);background:rgba(255,255,255,.07);font:inherit;font-size:20px;font-weight:900;cursor:pointer}.theme-toggle:hover{border-color:var(--cyan);color:var(--cyan)}body[data-theme="apple"] .theme-toggle{background:rgba(255,255,255,.78);color:var(--blue);box-shadow:0 2px 7px rgba(28,28,30,.06)}@media (max-width:520px){.theme-toggle{width:35px;height:35px}}
.command-toast{position:fixed;z-index:100;left:50%;top:50%;transform:translate(-50%,-50%);min-width:210px;padding:18px 24px;text-align:center;box-shadow:0 18px 48px rgba(0,0,0,.42);animation:command-toast-hide 1s forwards;pointer-events:none}@keyframes command-toast-hide{0%,70%{opacity:1}100%{opacity:0;visibility:hidden}}
.port-switch-form,.header-logout{margin:0}.port-switch-form .port-switch,.header-logout button{border:0;padding:0;background:none;color:inherit;font:inherit;cursor:pointer}.header-logout button{width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.07);font-weight:900}
.password-field{display:flex;gap:8px}.password-field input{min-width:0;flex:1}.password-toggle,.device-state-form button{border:1px solid var(--line);border-radius:12px;padding:0 10px;background:rgba(255,255,255,.07);color:var(--text);font:inherit;font-weight:800;cursor:pointer}.check-line{display:flex;align-items:center;gap:8px}.check-line input{width:auto}.list-filters{display:grid;grid-template-columns:1fr;gap:10px;padding:14px;margin-bottom:10px}.list-summary{color:var(--muted);font-size:13px;margin:0 0 12px}.device-state-form{margin:0;display:inline}.mini-actions a,.mini-actions button{width:40px;height:38px;padding:0;display:grid;place-items:center;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.07);color:var(--text);font:inherit;line-height:1;cursor:pointer}.mini-actions a:hover,.mini-actions button:hover{background:rgba(255,255,255,.12);border-color:var(--cyan);transform:translateY(-1px)}.mini-actions .ps-icon{width:20px;height:20px;margin:0}.pagination{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:18px}.pagination span{color:var(--muted);font-weight:800}@media (min-width:760px){.list-filters{grid-template-columns:2fr repeat(3,1fr) auto;align-items:center}}@media (max-width:520px){.header-logout button{width:35px;height:35px}.top-actions{gap:5px}}
@media (orientation:landscape) and (max-height:520px){.topbar{position:static}.main{padding-top:12px;padding-bottom:16px}.login-hero{min-height:auto}.device-card{min-height:0}}
.telemetry-grid,.telemetry-details{display:grid;grid-template-columns:1fr;gap:12px;margin-bottom:14px}.telemetry-card{padding:15px}.telemetry-card>strong{display:block;margin:6px 0;font-size:18px}.telemetry-card>small{display:block;color:var(--muted);line-height:1.45}.telemetry-list{display:grid;gap:7px;margin-top:10px}.telemetry-list div{display:flex;justify-content:space-between;gap:10px;padding-top:7px;border-top:1px solid var(--line)}.telemetry-list span{color:var(--muted)}.telemetry-list strong{font-size:13px}.telemetry-list strong.online{color:var(--green)}.telemetry-list strong.offline{color:var(--muted)}@media (min-width:760px){.telemetry-grid{grid-template-columns:repeat(2,1fr)}.telemetry-details{grid-template-columns:repeat(2,1fr)}}@media (min-width:1120px){.telemetry-grid{grid-template-columns:repeat(4,1fr)}}
.config-links{display:grid;grid-template-columns:1fr;gap:12px;margin-bottom:14px}.config-links .action-card{padding:15px}.config-links .action-card span{font-size:22px;display:block;margin-bottom:6px}@media (min-width:760px){.config-links{grid-template-columns:repeat(3,1fr)}}
.inline-form{margin:0 0 12px}.inline-form button{border:1px solid var(--line);border-radius:12px;padding:9px 12px;background:rgba(255,255,255,.07);color:var(--text);font:inherit;font-weight:800;cursor:pointer}.users-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px}.users-toolbar .searchbar{flex:1;margin:0}.users-filter{flex:0 0 auto}.user-status-led{display:inline-block;width:14px;height:14px;border-radius:50%;box-shadow:0 0 12px currentColor}.user-status-led.is-active{color:#49df85;background:currentColor}.user-status-led.is-inactive{color:#ff6b6b;background:currentColor}@media(max-width:560px){.users-toolbar{align-items:stretch;flex-direction:column}.users-filter{display:flex}.users-filter .chip{width:100%;justify-content:center}}
.firmware-selection{margin:0}.firmware-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:12px 0}.firmware-actions select,.firmware-actions button{min-height:40px}.firmware-actions button{border:1px solid var(--line);border-radius:12px;padding:8px 12px;background:rgba(255,255,255,.07);color:var(--text);font:inherit;font-weight:800;cursor:pointer}
.maintenance-actions{display:grid;grid-template-columns:1fr;gap:12px;margin-bottom:14px}.maintenance-actions form{padding:16px}.maintenance-actions h2{margin-top:0}.maintenance-actions p{color:var(--muted);line-height:1.45}.maintenance-actions button{border:1px solid var(--line);border-radius:12px;padding:10px 14px;background:rgba(255,255,255,.07);color:var(--text);font:inherit;font-weight:800;cursor:pointer}.danger-card{border-color:rgba(255,107,107,.45)!important}@media (min-width:760px){.maintenance-actions{grid-template-columns:repeat(2,1fr)}}
.ps-icon{width:1.25rem;height:1.25rem;display:inline-block;flex:0 0 auto;color:currentColor;vertical-align:middle}.ps-icon-md{width:1.25rem;height:1.25rem}.ps-icon-lg{width:1.75rem;height:1.75rem;margin-bottom:8px}.top-actions .ps-icon{display:block}.header-logout .ps-icon{display:block;margin:auto}
.brand-logo{width:42px;height:42px;object-fit:contain;border-radius:15px;flex:0 0 auto}.theme-toggle,.top-actions a,.header-logout button{width:38px;height:38px;min-width:38px;padding:0;display:grid;place-items:center}.theme-toggle{flex:0 0 auto;line-height:1}.top-actions a.is-active{border-color:var(--cyan);color:var(--cyan);background:rgba(53,231,210,.16);box-shadow:0 0 0 2px rgba(53,231,210,.14),0 8px 18px rgba(53,231,210,.16)}body[data-theme="apple"] .top-actions a.is-active{border-color:var(--blue);color:var(--blue);background:rgba(0,122,255,.12);box-shadow:0 0 0 2px rgba(0,122,255,.12),0 8px 18px rgba(0,122,255,.12)}.dashboard-logo{display:block;width:clamp(120px,18vw,210px);max-height:150px;margin-top:16px;object-fit:contain;filter:drop-shadow(0 12px 20px rgba(0,0,0,.2))}@media (max-width:520px){.brand-logo{width:38px;height:38px}.theme-toggle,.top-actions a,.header-logout button{width:35px;height:35px;min-width:35px}.dashboard-logo{width:150px;margin:14px 0 2px}}
.login-logo{display:block;width:min(100%,420px);max-height:300px;margin-top:18px;object-fit:contain;filter:drop-shadow(0 16px 28px rgba(0,0,0,.24))}.hero-copy .eyebrow{font-size:clamp(14px,2vw,20px);letter-spacing:.12em}.header-actions{flex:1 1 auto;min-width:0;flex-wrap:wrap;justify-content:flex-end}.top-actions{min-width:0;flex:1 1 0;flex-wrap:wrap;justify-content:flex-end}@media (max-width:520px){.topbar{align-items:flex-start}.login-logo{width:min(100%,300px);margin-top:14px}}
.notifications{position:fixed;z-index:1000;top:50%;left:50%;display:grid;gap:10px;width:min(420px,calc(100vw - 32px));transform:translate(-50%,-50%);pointer-events:none}.notification{margin:0;padding:16px 20px;border:1px solid var(--line);border-radius:16px;background:rgba(14,28,44,.96);color:var(--text);text-align:center;font-weight:800;box-shadow:0 18px 48px rgba(0,0,0,.42);opacity:1;transform:translateY(0);transition:opacity .35s ease,transform .35s ease}.notification.is-hiding{opacity:0;transform:translateY(-6px)}.notification.success{border-color:rgba(73,223,133,.48);background:rgba(18,75,52,.96)}.notification.error{border-color:rgba(255,107,107,.58);background:rgba(104,35,42,.96)}.notification.warning{border-color:rgba(255,209,102,.58);background:rgba(91,70,29,.96)}body[data-theme="apple"] .notification.success{background:rgba(235,250,240,.98);color:#167a37}body[data-theme="apple"] .notification.error{background:rgba(255,241,241,.98);color:#b42318}body[data-theme="apple"] .notification.warning{background:rgba(255,249,229,.98);color:#8a5a00}

/* 1.4.8 · Espaciado uniforme de tarjetas administrativas con encabezado/notas. */
.admin-table.card>h2{
    margin:0;
    padding:18px 18px 12px;
    font-size:22px;
    line-height:1.2;
}
.admin-table.card>p{
    margin:0;
    padding:12px 18px 18px;
    color:var(--muted);
    line-height:1.45;
}
.admin-table.card>h2+table{border-top:1px solid var(--line)}
.admin-table.card+ .admin-table.card{margin-top:14px}
@media(max-width:520px){
    .admin-table.card>h2{padding:15px 14px 10px;font-size:19px}
    .admin-table.card>p{padding:10px 14px 15px}
}
