.tc-warning{color:var(--red)}.tc-window{display:flex;align-items:center;gap:8px;color:var(--muted)}.tc-window select{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:20px;padding:5px 10px;font:inherit}.tc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--scada-gap);min-height:0;flex:1;grid-template-rows:repeat(3,minmax(0,1fr))}.tc-card{text-align:left;color:var(--text);background:var(--surface);border:3px solid var(--border);border-radius:14px;padding:12px 16px;display:flex;flex-direction:column;gap:10px;min-width:0;cursor:pointer}.tc-card:hover{background:var(--surface-2)}.tc-card:focus-visible{outline:3px solid var(--blue);outline-offset:3px}.tc-card.activo{border-color:var(--green-line);box-shadow:inset 4px 0 0 var(--green-line)}.tc-card.warn{border-color:var(--yellow-line);box-shadow:inset 4px 0 0 var(--yellow-line)}.tc-card.alarm{border-color:var(--red-line);box-shadow:inset 4px 0 0 var(--red-line)}.tc-heading{display:flex;align-items:center;gap:9px;min-width:0}.tc-heading h3{margin:0;font-size:12px;letter-spacing:.08em;color:var(--tone-a6bac9);flex:1;min-width:0}.tc-icon{flex-shrink:0;display:grid;place-items:center;width:32px;height:32px;border-radius:9px;background:var(--surface-2)}.tc-badge{display:inline-flex;align-items:center;gap:4px;border-radius:30px;padding:4px 8px;font-size:11px;font-weight:600;background:transparent;color:var(--muted);border:1px solid var(--border)}.tc-badge svg{flex:none}.tc-badge.activo{background:var(--green);color:var(--surface);border-color:var(--green)}.tc-badge.ok{color:var(--green);border-color:var(--green-line)}.tc-badge.warn{background:var(--yellow-dim);color:var(--yellow);border-color:var(--yellow-line)}.tc-badge.alarm{background:var(--red-dim);color:var(--red);border-color:var(--red-line)}.tc-value-alarma{width:.7em;height:.7em;margin-right:.2em;vertical-align:-.05em}.tc-value{font:700 clamp(26px,3vw,48px)/1.15 var(--mono);font-variant-numeric:tabular-nums}.tc-value small{font-size:.34em;font-weight:500;color:var(--muted)}.tc-plot{position:relative;flex:1;min-height:54px;background:var(--tone-0d161f);border:1px solid var(--border-soft);border-radius:8px;overflow:hidden}.tc-plot svg{position:absolute;inset:0;width:100%;height:100%}.tc-plot.expanded{height:320px;flex:none}.tc-limit{position:absolute;right:6px;transform:translateY(-50%);font:10px var(--mono);color:var(--muted);background:var(--surface)}.tc-dot{position:absolute;width:7px;height:7px;margin:-3.5px;border-radius:50%}.tc-notice{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted);font:10px var(--mono)}.tc-notice span{background:var(--surface);padding:3px 8px}.tc-foot{display:flex;justify-content:space-between;gap:8px;color:var(--muted);font:11px var(--mono);margin:0}.tc-foot>span{display:flex;align-items:center;gap:5px}.tc-progress{height:8px;background:var(--surface-3);border-radius:20px;margin:auto 0;overflow:hidden}.tc-progress i{display:block;height:100%;background:var(--trend-strong);transition:width .3s}.tc-dialog{padding:0;width:min(1100px,calc(100% - 32px));max-height:calc(100dvh - 40px);color:var(--text);background:var(--surface);border:3px solid var(--border);border-radius:16px;box-shadow:var(--shadow)}.tc-dialog::backdrop{background:#03060ab8}.tc-detail{padding:24px;display:flex;flex-direction:column;gap:18px}.tc-detail-head,.tc-detail-summary{display:flex;align-items:center;justify-content:space-between;gap:16px}.tc-detail-head .tc-heading{flex:1}.tc-detail-head button{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px;cursor:pointer}.tc-axis{position:absolute;inset:3px auto 3px 6px;display:flex;flex-direction:column;justify-content:space-between;font:10px var(--mono);color:var(--muted)}@media(max-width:680px){.tc-detail{padding:14px}.tc-detail-summary{flex-wrap:wrap}}.tc-simple .tc-card{justify-content:space-between}.tc-simple .tc-value{font-size:clamp(26px,4vw,64px)}.tc-simple .tc-progress{margin:0}.app-dashboard{height:100dvh;min-height:0;grid-template-rows:minmax(0,1fr);overflow:hidden}.app-dashboard .main{min-height:0}.app-dashboard .sidebar{height:100%;min-height:0}.app-dashboard .page{flex:1;min-height:0;display:flex;flex-direction:column;padding:8px var(--scada-padding) 12px}.app-dashboard .banner{flex:none;margin-block:6px;padding-block:6px}.app-dashboard .tc-warning{margin:0 0 6px}.tc-grid>.tc-card{min-height:0;padding:clamp(6px,1.2dvh,12px) clamp(8px,1vw,16px);gap:clamp(3px,.7dvh,8px);container-type:inline-size}.tc-card .tc-heading{flex:none;gap:8px;flex-wrap:nowrap}.tc-card .tc-heading h3{font-size:min(clamp(11px,2dvh,15px),4.5cqi);font-weight:600;letter-spacing:.05em;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tc-card .tc-icon{width:32px;height:32px}.tc-card .tc-badge{font-size:clamp(10px,1.7dvh,13px);padding:4px 9px;flex:none;white-space:nowrap}.tc-card .tc-value{flex:none;font-size:min(clamp(18px,3.6dvh,38px),10cqi);white-space:nowrap}.tc-simple .tc-card .tc-value{font-size:min(clamp(22px,4.6dvh,46px),11cqi)}.tc-card .tc-value small{font-size:.42em}.tc-card .tc-plot{min-height:0}.tc-card .tc-foot{flex:none;font-size:clamp(10px,1.7dvh,13px);gap:4px}.tc-card .tc-foot>span:first-child{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tc-card .tc-foot>span:last-child{flex:none}.tc-card .tc-progress{flex-shrink:0}@media(max-height:720px){.app-dashboard .sidebar{padding-block:10px}.app-dashboard .nav{gap:2px}.app-dashboard .nav-link{padding-block:6px}.app-dashboard .sidebar-foot{padding-top:6px}}@media(max-width:600px){.app-dashboard .page{padding:6px}.tc-card .tc-icon{display:none}.tc-card .tc-foot>span:last-child{display:none}}@media(max-width:600px),(max-height:500px){.app-dashboard{height:auto;min-height:100dvh;overflow:visible}.app-dashboard .page{flex:1 0 auto;padding:8px 8px calc(12px + env(safe-area-inset-bottom))}.tc-grid{flex:1 0 auto;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;grid-auto-rows:auto;align-content:stretch;gap:8px}.tc-grid>.tc-card:last-child{grid-column:1 / -1}.tc-grid>.tc-card{padding:10px 12px;gap:6px;justify-content:space-between;border-width:2px}.tc-card .tc-heading{flex-wrap:wrap;align-items:flex-start;gap:5px 8px}.tc-card .tc-icon{display:none}.tc-card .tc-heading h3{flex:1 1 100%;font-size:13px;line-height:1.2;letter-spacing:.04em;white-space:normal}.tc-card .tc-badge{font-size:12px;padding:2px 8px;margin-left:auto}.tc-simple .tc-card .tc-value{font-size:26px}.tc-card .tc-value small{font-size:.45em}.tc-card .tc-foot{display:none}.tc-simple .tc-progress{margin:2px 0 0;height:6px}}@media(max-height:500px)and (min-width:601px){.tc-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.tc-grid>.tc-card:last-child{grid-column:auto}.tc-card .tc-heading{flex-wrap:nowrap;align-items:center}.tc-card .tc-heading h3{flex:1 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tc-card .tc-heading{gap:6px}.tc-card .tc-heading h3{font-size:12.5px;letter-spacing:.02em}.tc-card .tc-badge{font-size:11px;padding:2px 6px}.app-dashboard .page{padding-bottom:calc(6px + env(safe-area-inset-bottom))}.tc-dialog{max-height:calc(100dvh - 16px)}.tc-detail{padding:10px 14px;gap:6px}.tc-plot.expanded{height:max(110px,calc(100dvh - 190px))}.tc-detail>p.tc-foot:last-child{display:none}}.vista-btn{flex:none;min-width:38px;min-height:38px;padding:8px;justify-content:center}.vista-btn:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.vista-pop{position:fixed;inset:auto;margin:0;width:280px;padding:16px;display:none;flex-direction:column;gap:16px;color:var(--text);background:var(--surface);border:2px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.vista-pop:popover-open{display:flex}.vista-pop h3{margin:0;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.vista-campo{display:flex;flex-direction:column;gap:8px;font-size:14px}.vista-seg{display:grid;grid-template-columns:repeat(3,1fr);padding:3px;gap:3px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px}.vista-seg button{padding:7px 0;border:0;border-radius:7px;background:transparent;color:var(--muted);font:600 13px var(--mono);cursor:pointer}.vista-seg button:hover{color:var(--text)}.vista-seg button[aria-checked=true]{background:var(--surface);color:var(--text);box-shadow:inset 0 0 0 1px var(--green-line),0 1px 3px #00000026}.vista-seg button:focus-visible,.vista-switch input:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.vista-switch{flex-direction:row;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.vista-switch small{display:block;margin-top:2px;font-size:12px;color:var(--muted)}.vista-switch input{appearance:none;flex:none;position:relative;width:42px;height:24px;margin:0;border-radius:99px;background:var(--surface-3);border:1px solid var(--border);cursor:pointer;transition:background .2s}.vista-switch input:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0000004d;transition:transform .2s}.vista-switch input:checked{background:var(--green-line);border-color:var(--green-line)}.vista-switch input:checked:after{transform:translate(18px)}:root{--bg: #070b10;--bg-2: #0b1118;--sidebar: #090e14;--surface: #121a22;--surface-2: #17222c;--surface-3: #1c2a36;--border: #243140;--border-soft: #1c2833;--text: #e8eef4;--muted: #8b9aab;--dim: #5d6d7e;--green: #3ee089;--green-dim: rgba(62, 224, 137, .14);--teal: #2ad4c4;--teal-dim: rgba(42, 212, 196, .14);--cyan: #3ecbff;--cyan-dim: rgba(62, 203, 255, .14);--blue: #4aa3ff;--blue-dim: rgba(74, 163, 255, .16);--yellow: #f5c542;--yellow-dim: rgba(245, 197, 66, .14);--orange: #fb923c;--orange-dim: rgba(251, 146, 60, .16);--red: #ff4d5a;--red-dim: rgba(255, 77, 90, .16);--shadow: 0 10px 40px rgba(0, 0, 0, .35);--radius: 14px;--radius-sm: 10px;--sidebar-w: 268px;--mono: "JetBrains Mono", ui-monospace, monospace;--sans: "DM Sans", system-ui, sans-serif;--green-line: var(--green);--teal-line: var(--teal);--cyan-line: var(--cyan);--blue-line: var(--blue);--yellow-line: var(--yellow);--orange-line: var(--orange);--red-line: var(--red);--trend: #8b9aab;--trend-strong: #d5dee6;--trend-limit: #5d6d7e;--tone-0c141c: #0c141c;--tone-090e14: #090e14;--tone-b7c4d0: #b7c4d0;--tone-14202a: #14202a;--tone-15202a: #15202a;--tone-1d2c38: #1d2c38;--tone-374151: #374151;--tone-2a1216: #2a1216;--tone-1a0d10: #1a0d10;--tone-5a1d24: #5a1d24;--tone-ff8b93: #ff8b93;--tone-7a2430: #7a2430;--tone-ffc1c6: #ffc1c6;--tone-3a151a: #3a151a;--tone-d5dee6: #d5dee6;--tone-101820: #101820;--tone-0e1620: #0e1620;--tone-314150: #314150;--tone-2a3846: #2a3846;--tone-c9d6e0: #c9d6e0;--tone-3a4b59: #3a4b59;--tone-3d5164: #3d5164;--tone-1c2a36: #1c2a36;--tone-151d26: #151d26;--tone-0d161f: #0d161f;--tone-182733: #182733;--tone-111c26: #111c26;--tone-2b3c4b: #2b3c4b;--tone-a6bac9: #a6bac9;--tone-263543: #263543;--tone-0c141d: #0c141d;--tone-243342: #243342;--tone-a2b3c4: #a2b3c4;--tone-1c2a37: #1c2a37;--tone-e3edf5: #e3edf5;--tone-405364: #405364;--tone-243341: #243341;--tone-14232e: #14232e;--tone-14232d: #14232d;--tone-0c131b: #0c131b;--tone-61798c: #61798c;--tone-e0eff5: #e0eff5;--tone-152530: #152530;--tone-35505f: #35505f}:root[data-theme=light]{color-scheme:light;--bg: #f1f5f9;--bg-2: #f6f8fb;--sidebar: #ffffff;--surface: #ffffff;--surface-2: #edf3f8;--surface-3: #e2ebf3;--border: #c7d4e0;--border-soft: #dce5ee;--text: #1b2d40;--muted: #526579;--dim: #627388;--green: #0f6d3a;--teal: #05685f;--cyan: #075e9c;--blue: #1f5fb8;--yellow: #7a4f00;--orange: #a8480a;--red: #b8243a;--green-line: #16a34a;--teal-line: #0d9488;--cyan-line: #0284c7;--blue-line: #2563eb;--yellow-line: #c28500;--orange-line: #dd6a0e;--red-line: #dc2626;--green-dim: #d3f2df;--teal-dim: #ccf0ea;--cyan-dim: #d6ecfa;--blue-dim: #dbe6ff;--yellow-dim: #ffeeb0;--orange-dim: #ffe2c7;--red-dim: #ffdade;--trend: #6b7c8f;--trend-strong: #2c3e52;--trend-limit: #8a9bad;--shadow: 0 10px 40px rgba(35, 57, 78, .12);--panel-dark: #edf3f8;--tone-0c141c: #f6f9fc;--tone-090e14: #ffffff;--tone-b7c4d0: #42556a;--tone-14202a: #e8eef4;--tone-15202a: #edf3f8;--tone-1d2c38: #e1e9f1;--tone-374151: #cad5e1;--tone-2a1216: #fff1f2;--tone-1a0d10: #ffe4e6;--tone-5a1d24: #f0aab0;--tone-ff8b93: #ad2033;--tone-7a2430: #e5a0aa;--tone-ffc1c6: #a51d30;--tone-3a151a: #ffe4e6;--tone-d5dee6: #42556a;--tone-101820: #edf2f7;--tone-0e1620: #d9e3ed;--tone-314150: #b6c6d5;--tone-2a3846: #cbd7e3;--tone-c9d6e0: #42556a;--tone-3a4b59: #b0c0d0;--tone-3d5164: #8199b0;--tone-1c2a36: #e7eef5;--tone-151d26: #ffffff;--tone-0d161f: #f3f7fb;--tone-182733: #ffffff;--tone-111c26: #f0f5fa;--tone-2b3c4b: #cad7e3;--tone-a6bac9: #53697d;--tone-263543: #d6e1eb;--tone-0c141d: #f8fafc;--tone-243342: #d3dee8;--tone-a2b3c4: #52687b;--tone-1c2a37: #e0e7ef;--tone-e3edf5: #344e65;--tone-405364: #b2c4d4;--tone-243341: #d8e3ed;--tone-14232e: #e7eef5;--tone-14232d: #edf4f8;--tone-0c131b: #f7fafc;--tone-61798c: #526b80;--tone-e0eff5: #213d50;--tone-152530: #e2ecf3;--tone-35505f: #819bad}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:14px;letter-spacing:.01em}button,input,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}.app{display:grid;grid-template-columns:auto 1fr;min-height:100%}.sidebar{background:linear-gradient(180deg,var(--tone-0c141c) 0%,var(--tone-090e14) 100%);border-right:2px solid var(--border-soft);display:flex;flex-direction:column;padding:18px 14px 12px;position:sticky;top:0;height:100vh;transition:width .3s ease;width:var(--sidebar-w)}.sidebar.compact{width:70px}.sidebar{overflow:hidden;white-space:nowrap}.brand-title,.nav-label,.user-meta,.clock{transition:opacity .2s ease,max-width .3s ease,visibility .2s}.sidebar.compact .brand-title,.sidebar.compact .nav-label,.sidebar.compact .user-meta,.sidebar.compact .clock{opacity:0;visibility:hidden}.sidebar.compact .user-meta{max-width:0}.sidebar-header{display:flex;align-items:center;margin-bottom:8px}.brand{display:flex;align-items:center;gap:10px;padding:6px 3px 20px}.brand-mark{flex:none;width:36px;height:36px;border:0;padding:0;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#001e4b;box-shadow:0 0 14px #4aa3ff59;color:#e8eef4}.brand-logo{display:block;width:100%;height:100%;object-fit:cover;border-radius:50%}.login-card .brand-mark{width:88px;height:88px}.sidebar .brand-mark{cursor:pointer}.sidebar .brand-mark:hover{box-shadow:0 0 20px #4aa3ff8c}.brand-title{font-weight:700;font-size:13.5px;line-height:1.25;white-space:normal;width:150px}.nav{display:flex;flex-direction:column;gap:4px;flex:1}.nav-link svg,.nav-btn svg{flex:none}.nav-link,.nav-btn{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:var(--tone-b7c4d0);border:0;background:transparent;width:100%;text-align:left;cursor:pointer}.nav-link:hover,.nav-btn:hover{background:var(--tone-14202a);color:var(--text)}.nav-link.active{background:var(--green-dim);color:var(--green);box-shadow:inset 3px 0 0 var(--green)}.nav-link.active.teal{background:var(--teal-dim);color:var(--teal);box-shadow:inset 3px 0 0 var(--teal)}.nav-sub{display:flex;flex-direction:column;gap:2px;padding:4px 0 6px 18px}.nav-sub a{padding:7px 10px;border-radius:8px;color:var(--muted);font-size:13px}.nav-sub a.active,.nav-sub a:hover{color:var(--text);background:var(--tone-14202a)}.sidebar-foot{margin-top:auto;padding-top:12px}.user-card{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--surface);border:2px solid var(--border);border-radius:12px;padding:10px 11px}.user-card button{flex:none;background:transparent;border:0;color:var(--muted);cursor:pointer;padding:0}.user-meta{display:flex;align-items:center;gap:8px}.user-meta strong{display:block;font-size:13px}.user-meta span{color:var(--dim);font-size:11px}.clock{margin-top:10px;color:var(--dim);font-size:11.5px;padding:0 6px;display:flex;justify-content:space-between;font-family:var(--mono)}.role-menu{position:relative}.role-pop{position:absolute;left:0;right:0;bottom:46px;background:var(--tone-15202a);border:2px solid var(--border);border-radius:10px;padding:6px;box-shadow:var(--shadow);z-index:5}.role-pop button{width:100%;text-align:left;background:transparent;border:0;padding:8px 10px;border-radius:8px;cursor:pointer;color:var(--text)}.role-pop button:hover{background:var(--tone-1d2c38)}.main{min-width:0;display:flex;flex-direction:column;background:radial-gradient(900px 400px at 80% -10%,rgba(62,224,137,.05),transparent 50%),var(--bg-2)}.topbar{display:grid;grid-template-columns:1fr auto;gap:14px;padding:16px 20px 8px;position:sticky;top:0;z-index:1000;background:var(--tone-090e14);border-bottom:1px solid var(--tone-374151)}.status-card,.estop-card{display:flex;align-items:center;justify-content:space-between;gap:16px;background:var(--surface);border:3px solid var(--border);border-radius:var(--radius);padding:16px 20px;min-height:88px}.status-card h2{margin:0 0 4px;font-size:16px;letter-spacing:.14em;color:var(--muted);font-weight:600}.status-value{margin:0;font-size:28px;font-weight:700;letter-spacing:.04em}.status-value.prep,.status-value.run{color:var(--text)}.status-value.ready{color:var(--green)}.status-value.emg{color:var(--red)}.status-ico{width:58px;height:58px;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.status-ico.prep,.status-ico.run{border:3px solid var(--trend);color:var(--text);background:var(--surface-2)}.status-ico.ready{border:3px solid var(--green-line);color:var(--green);background:var(--surface-2)}.status-ico.emg{border:3px solid var(--red-line);color:var(--red);background:var(--red-dim)}.estop-card{background:linear-gradient(180deg,var(--tone-2a1216),var(--tone-1a0d10));border-color:var(--tone-5a1d24);min-width:340px;font:inherit;color:inherit;text-align:left;width:100%;cursor:pointer}.estop-card:disabled{cursor:not-allowed}.estop-card h2{margin:0 0 4px;font-size:30px;letter-spacing:.14em;color:var(--tone-ff8b93);font-weight:600}.estop-label{font-size:30px;font-weight:700;letter-spacing:.04em;line-height:1.1;color:var(--tone-ff8b93)}.estop-btn{width:62px;height:62px;border-radius:50%;border:4px solid #ff6b75;background:radial-gradient(circle at 35% 30%,#ff6a72,#c31220 70%);color:#fff;cursor:pointer;display:grid;place-items:center;box-shadow:0 0 22px #ff3c4673}.estop-card:hover:not(:disabled){background:linear-gradient(#ff5a641f,#ff5a641f),linear-gradient(180deg,var(--tone-2a1216),var(--tone-1a0d10))}.estop-card:hover:not(:disabled) .estop-btn{filter:brightness(1.08)}.estop-card:disabled .estop-btn{opacity:.55}.page{padding:8px 20px 24px;min-width:0}.banner{margin:0 20px 4px;padding:10px 14px;border-radius:10px;background:var(--red-dim);border:1px solid var(--tone-7a2430);color:var(--tone-ffc1c6);display:flex;justify-content:space-between;align-items:center;gap:12px}.banner button{background:var(--tone-3a151a);border:2px solid var(--tone-7a2430);border-radius:8px;padding:6px 10px;cursor:pointer}.subsys-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.subsys{background:var(--surface);border:3px solid var(--border);border-radius:var(--radius);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;min-height:92px}.subsys.info{border-color:#2a5d7a;box-shadow:inset 0 0 0 1px #38bdf826}.subsys.warn{border-color:#7a5d1c;box-shadow:inset 0 0 0 1px #f5c54226}.subsys.ok{border-color:#1f6a45;box-shadow:inset 0 0 0 1px #3ee08926}.subsys h3{margin:0 0 6px;font-size:20px;letter-spacing:.12em;color:var(--muted)}.subsys p{margin:0;font-size:19px;font-weight:700}.subsys-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.subsys-detalle{font-size:24px;font-weight:700;color:var(--text);font-family:var(--mono)}.subsys-ico{width:48px;height:48px;border-radius:12px;display:grid;place-items:center;background:var(--surface-2);color:var(--tone-d5dee6)}.subsys.info .subsys-ico{color:var(--blue);background:var(--blue-dim)}.subsys.warn .subsys-ico{color:var(--yellow);background:var(--yellow-dim)}.subsys.ok .subsys-ico{color:var(--green);background:var(--green-dim)}.panel{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius);padding:16px 18px 18px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}.panel-head h3{margin:0;font-size:13px;letter-spacing:.1em}.pills{display:flex;gap:8px;flex-wrap:wrap}.pill{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:4px 10px;font-size:11.5px;color:var(--muted);font-family:var(--mono)}.gauge-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:10px}.meter-card{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:12px;padding:12px 12px 10px;min-height:180px}.meter-card.lin{min-height:136px}.meter-card h4{margin:0 0 4px;font-size:11px;letter-spacing:.08em;color:var(--muted);font-weight:600}.tag{float:right;font-size:10px;font-family:var(--mono);color:var(--dim);background:var(--tone-101820);border-radius:6px;padding:1px 6px}.meter-val{font-family:var(--mono);font-size:30px;font-weight:700;margin:6px 0 2px;line-height:1.1}.meter-unit{color:var(--muted);font-size:14px;font-weight:500}.range{color:var(--dim);font-size:12px;font-family:var(--mono)}.gauge{display:block;width:100%;height:78px}.bar{height:7px;background:var(--tone-0e1620);border-radius:99px;overflow:hidden;margin-top:12px}.bar>i{display:block;height:100%;border-radius:inherit}.ensayo-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:12px}.col-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px}.col-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.col-head h3{margin:0;font-size:11px;letter-spacing:.1em;color:var(--muted)}.badge{font-size:11px;padding:3px 8px;border-radius:999px;background:var(--teal-dim);color:var(--teal);font-weight:600}.step-item{width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:10px;padding:9px 10px;display:flex;align-items:center;gap:10px;cursor:pointer;color:var(--muted);margin-bottom:4px}.step-item:hover:not(:disabled){background:var(--tone-15202a)}.step-item.active{border-color:var(--teal);background:#2ad4c414;color:var(--text)}.step-item.done{color:var(--tone-c9d6e0)}.step-item:disabled{cursor:not-allowed;opacity:.72}.step-num{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--tone-3a4b59);display:grid;place-items:center;font-size:11px;flex-shrink:0}.step-item.active .step-num{border-color:var(--teal);color:var(--teal)}.step-item small{display:block;color:var(--dim);font-size:11px}.step-item .lock{margin-left:auto;color:var(--dim)}.paso h2{margin:0 0 6px;font-size:22px}.paso>p{margin:0 0 14px;color:var(--muted)}.hw-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}.hw-card{background:var(--surface-2);border:1px solid var(--border);border-radius:12px;padding:12px;cursor:pointer;text-align:left}.hw-card:hover{border-color:var(--tone-3d5164)}.hw-card b{display:block;margin-bottom:8px;font-size:13px}.chip{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.04em;padding:3px 8px;border-radius:999px}.chip.warn{background:var(--orange-dim);color:var(--orange)}.chip.danger{background:var(--red-dim);color:var(--red)}.chip.ok{background:var(--green-dim);color:var(--green)}.chip.neutral,.chip.info{background:var(--tone-1c2a36);color:var(--muted)}.hint{border:1px solid rgba(42,212,196,.28);background:#2ad4c40f;border-radius:12px;padding:12px 14px;margin-bottom:14px}.hint h4{margin:0 0 8px;color:var(--teal);font-size:12px;letter-spacing:.08em}.hint ul{margin:0;padding-left:16px;color:var(--tone-c9d6e0)}.hint li{margin:4px 0}.valid h4{margin:0 0 8px;font-size:12px;letter-spacing:.08em;color:var(--muted)}.valid-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--border-soft);color:var(--muted);cursor:pointer}.valid-row input{accent-color:var(--teal)}.valid-row.on{color:var(--text)}.valid-row em{margin-left:auto;font-style:normal;font-size:12px;color:var(--dim)}.valid-row.on em{color:var(--teal)}.valid-item{border-bottom:1px solid var(--border-soft)}.valid-linea{display:flex;align-items:center;gap:8px}.valid-linea .valid-row{flex:1;min-width:0;border-bottom:0}.valid-detalle-btn{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;border:1px solid var(--border-soft);background:transparent;color:var(--muted);border-radius:999px;padding:3px 9px;font-size:12px;cursor:pointer}.valid-detalle-btn:hover,.valid-detalle-btn[aria-expanded=true]{color:var(--teal);border-color:#2ad4c473}.valid-detalle-btn svg{transition:transform .15s ease}.valid-detalle-btn[aria-expanded=true] svg{transform:rotate(180deg)}.valid-detalle{margin:0 0 10px 26px;padding:10px 12px;border-radius:10px;border:1px solid rgba(42,212,196,.28);background:#2ad4c40f;color:var(--tone-c9d6e0);font-size:13px;line-height:1.5;white-space:pre-line}.salidas-paso{display:grid;gap:8px;margin-top:16px}.salidas-paso .cta{margin-top:0;text-align:left}.salidas-paso .cta small{font-weight:500;opacity:.8}.proc-nombre{margin:-4px 0 10px;color:var(--muted);font-size:12px}.proc-nombre small{color:var(--dim)}.proc-del-programa{margin:0 0 8px;color:var(--muted);font-size:13px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cta{width:100%;margin-top:16px;border:0;border-radius:12px;padding:13px 16px;background:linear-gradient(180deg,#3ee0b4,#1bb894);color:#06241c;font-weight:700;cursor:pointer}.cta:disabled{opacity:.4;cursor:not-allowed}.cta:not(:disabled):hover{filter:brightness(1.05)}.kv{display:grid;gap:8px;margin:10px 0}.kv div{display:flex;justify-content:space-between;gap:8px;font-size:13px}.kv span{color:var(--muted)}.kv b{color:var(--teal);font-family:var(--mono);font-weight:500}.linkish{background:none;border:0;color:var(--teal);cursor:pointer;padding:0;font-size:12.5px}.mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.mini{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:10px;padding:8px}.mini label{display:block;color:var(--dim);font-size:10.5px;margin-bottom:2px}.mini b{font-family:var(--mono);font-size:14px}.live-dot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green);display:inline-block;margin-right:6px}.filters{display:grid;grid-template-columns:repeat(6,1fr) auto;gap:8px;align-items:end;margin-bottom:12px;transition:all .3s ease;max-height:1000px;overflow:hidden}.filters.collapsed{max-height:0;margin-bottom:0;opacity:0}.field label{display:block;font-size:11px;color:var(--muted);margin-bottom:5px}.field input,.field select,.search input{width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:8px 10px}.ghost,.primary,.icon-btn{border-radius:10px;border:1px solid var(--border);background:var(--surface-2);padding:8px 12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.ghost:hover,.icon-btn:hover{background:var(--surface-3)}.primary{background:#2563eb;border-color:#3b82f6;color:#fff;font-weight:600}.toolbar{display:flex;gap:10px;align-items:center;margin:8px 0 12px;flex-wrap:wrap}.search{flex:1;min-width:240px;position:relative}.search input{padding-left:34px}.search svg{position:absolute;left:10px;top:9px;color:var(--dim)}.results{margin-left:auto;color:var(--muted);font-size:13px;display:flex;align-items:center;gap:8px}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:12px}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:11px;letter-spacing:.08em;color:var(--dim);padding:10px 12px;background:var(--tone-101820);border-bottom:1px solid var(--border)}td{padding:11px 12px;border-bottom:1px solid var(--border-soft)}tr{cursor:pointer}tr:hover td{background:var(--tone-15202a)}tr.sel td{background:#3ee0890f}tr.sel td:first-child{box-shadow:inset 3px 0 0 var(--green)}.mono{font-family:var(--mono);font-size:12.5px}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:8px}.dot.ok{background:var(--green)}.dot.warn{background:var(--orange)}.dot.danger{background:var(--red)}.st{font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px}.st.ok{background:var(--green-dim);color:var(--green)}.st.warn{background:var(--orange-dim);color:var(--orange)}.st.danger{background:var(--red-dim);color:var(--red)}.st.info{background:var(--blue-dim);color:var(--blue)}.ok-txt{color:var(--green);font-weight:600}.err-txt{color:var(--red)}.pager{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 0;color:var(--muted)}.pages{display:flex;gap:6px}.pages button{width:32px;height:32px;border-radius:50%;border:0;background:transparent;color:var(--muted);cursor:pointer}.pages button.on{background:#2563eb;color:#fff}.page-title{margin:0 0 14px;font-size:22px}.cards-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.cards-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.control-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--border-soft)}.toggle{width:44px;height:24px;border-radius:99px;background:var(--tone-2a3846);border:0;position:relative;cursor:pointer}.toggle.on{background:#1bb894}.toggle i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .15s}.toggle.on i{left:23px}.modal-bg{position:fixed;inset:0;background:#0000008c;display:grid;place-items:center;z-index:1100}.modal{width:min(460px,calc(100% - 32px));background:var(--tone-151d26);border:2px solid #4aa3ff;border-radius:16px;padding:22px;box-shadow:var(--shadow)}.modal h3{margin:0 0 8px;color:var(--red)}.modal p{color:var(--muted)}.modal.neutral h3{color:var(--text)}.modal p.aviso-ctrl.warn{color:var(--orange)}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;border-bottom:1px solid var(--border-soft);padding-bottom:12px}.modal-header h3{margin:0;color:var(--text)}.modal-close{background:transparent;border:0;color:var(--muted);font-size:20px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.modal-close:hover{background:var(--tone-1d2c38);color:var(--text)}.modal-body{display:flex;flex-direction:column;gap:12px;max-height:calc(100vh - 220px);overflow-y:auto;padding-right:4px}.modal-body.cols-2{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}.modal-body.cols-2 .field.full{grid-column:1 / -1}.detail-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:8px 0;border-bottom:1px solid var(--border-soft)}.detail-row label{color:var(--muted);font-size:12px;font-weight:600;min-width:120px}.detail-row span{color:var(--text);text-align:right;flex:1}.tabs{display:flex;gap:6px;margin-bottom:14px}.tabs a,.tabs button{padding:8px 12px;border-radius:9px;border:1px solid var(--border);background:transparent;color:var(--muted);cursor:pointer}.tabs a.active,.tabs button.active{background:var(--surface-2);color:var(--text)}input[type=range]{width:160px;accent-color:var(--teal)}.detail-page{display:flex;flex-direction:column;gap:20px}.detail-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0}.detail-header h2{margin:0;flex:1;text-align:center;font-size:24px}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:16px}.detail-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.detail-card h3{margin:0 0 12px;font-size:14px;letter-spacing:.1em;color:var(--text)}.info-rows{display:flex;flex-direction:column;gap:12px}.info-row{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--border-soft)}.info-row .label{color:var(--muted);font-size:15px;font-weight:600;min-width:100px}.info-row .value{color:var(--text);text-align:right;flex:1;font-size:18px;font-weight:600}@media(max-width:1280px){.subsys-grid,.gauge-grid,.cards-3{grid-template-columns:1fr 1fr}.filters{grid-template-columns:1fr 1fr 1fr}.estop-card{min-width:0}}@media(max-width:900px){.app{grid-template-columns:1fr}.sidebar{display:none}.topbar,.gauge-grid,.subsys-grid,.cards-3,.cards-2{grid-template-columns:1fr}}.login-page{min-height:100%;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 0%,var(--surface-2),var(--bg) 60%)}.login-card{width:min(380px,100%);display:grid;gap:14px;padding:32px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.login-card .primary{justify-content:center;margin-top:6px}.login-error{margin:0;padding:10px 12px;border-radius:var(--radius-sm);background:var(--red-dim);color:var(--red);font-size:14px}.login-demo{margin:6px 0 0;color:var(--muted);font-size:13px;text-align:center;line-height:1.5}.login-demo b{color:var(--text);font-family:var(--mono);font-weight:500}.splash{min-height:100%;display:grid;place-items:center;color:var(--muted)}.status-value.idle{color:var(--muted)}.status-ico.idle{color:var(--muted);border-color:var(--border);background:var(--surface-2)}.aviso-ctrl{margin:0 0 12px;padding:10px 12px;border-radius:var(--radius-sm);font-size:14px}.aviso-ctrl.info{background:var(--blue-dim);color:var(--blue)}.aviso-ctrl.warn{background:var(--orange-dim);color:var(--orange)}.aviso-ctrl.error{background:var(--red-dim);color:var(--red)}.acciones-paso{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.valid-row.auto{position:relative;cursor:default}.valid-row.auto input{cursor:help}.valid-row.auto em{display:inline-flex;align-items:center;gap:5px;color:var(--teal)}.valid-row.auto:not(.on) em{color:var(--dim)}.ayuda-sensor{position:absolute;left:0;bottom:calc(100% + 6px);z-index:20;width:min(320px,90vw);padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);font-size:12px;line-height:1.4;box-shadow:0 6px 18px #00000073;opacity:0;visibility:hidden;transition:opacity .12s,visibility .12s;pointer-events:none}.valid-row.auto input:hover~.ayuda-sensor{opacity:1;visibility:visible;transition-delay:2s}.valid-row.auto input:focus-visible~.ayuda-sensor,.valid-row.auto.mostrar-ayuda .ayuda-sensor{opacity:1;visibility:visible;transition-delay:0s}.resultado-ensayo{margin-top:12px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2)}.resultado-ensayo a{color:var(--teal)}.primary:disabled,.ghost:disabled{opacity:.4;cursor:not-allowed;filter:grayscale(.4)}.lab-page{max-width:1600px;margin:0 auto}.detail-page{max-width:1680px;margin:0 auto}.detail-grid{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start}.detail-card{min-width:0}.detail-spectrum{padding:26px}.detail-header h2{text-align:left;font-family:var(--mono);font-size:21px}.info-row .label{font-size:12px;min-width:0;flex:0 1 45%}.info-row .value{font-size:14px;overflow-wrap:anywhere}.info-rows{gap:5px}.chart-eyebrow{font:10px var(--mono);letter-spacing:.14em;color:var(--teal)}.spectrum-heading,.trend-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:22px}.spectrum-heading h2,.trend-heading h2{font-size:23px;font-weight:600;letter-spacing:-.02em;margin:7px 0}.spectrum-heading p{color:var(--muted);font-size:12px;margin:0}.chart-series{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);white-space:nowrap}.chart-series i{width:18px;height:3px;border-radius:2px}.spectrum-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--border);border-radius:10px;margin-bottom:18px;background:var(--tone-0d161f)}.spectrum-stats>div{padding:15px 20px;border-right:1px solid var(--border-soft)}.spectrum-stats>div:last-child{border:0}.spectrum-stats span{display:block;font-size:11px;color:var(--muted);margin-bottom:7px}.spectrum-stats b{font:20px var(--mono)}.spectrum-stats small{font-size:11px;color:var(--muted)}.spectrum-stats>div:first-child b{color:var(--yellow)}.chart-toolbar{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;margin:0 0 12px}.chart-toolbar>div{display:flex;flex-wrap:wrap;gap:6px}.chart-toolbar button{display:inline-flex;align-items:center;gap:6px;font-size:11px;padding:7px 10px;min-height:32px}.spectrum-svg{display:block;width:100%;height:auto;cursor:crosshair;touch-action:pan-y;font-family:var(--mono);border:1px solid var(--border-soft);border-radius:10px}.spectrum-svg:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.chart-footer{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-top:14px;color:var(--muted);font:11px var(--mono);min-height:20px}.chart-footer>span{display:flex;align-items:center;gap:8px}.chart-footer b{color:var(--text)}.chart-footer small{font:11px var(--sans);color:var(--muted)}.chart-min-dot{width:7px;height:7px;background:var(--yellow);border-radius:50%}.chart-empty{display:grid;justify-items:center;text-align:center;padding:50px 20px;color:var(--muted)}.chart-empty h3{color:var(--text);margin:14px 0 4px}.chart-empty p{font-size:12px}.gauge{height:112px;margin:8px 0 5px}.gauge path{transition:stroke-dasharray .3s}.meter-card{background:linear-gradient(155deg,var(--tone-182733),var(--tone-111c26));border:1px solid var(--tone-2b3c4b)}.meter-card h4{color:var(--tone-a6bac9);line-height:1.5}.meter-val{font-variant-numeric:tabular-nums}.range{color:var(--muted)}.bar{height:9px;background:var(--tone-263543)}.bar>i{transition:width .3s ease}.trend-section{margin-top:24px}.trend-heading{margin-bottom:14px}.trend-heading h2{font-size:20px}.trend-window{display:flex;gap:3px;padding:4px;border:1px solid var(--border);border-radius:8px}.trend-window button{padding:6px 10px;font-size:11px;border:0;background:transparent;border-radius:5px;color:var(--muted);cursor:pointer}.trend-window button[aria-pressed=true]{background:var(--surface-3);color:var(--text)}.trend-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.trend-card{min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:20px}.trend-card-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.trend-card h3{display:flex;align-items:center;gap:8px;font-size:13px;margin:0;font-weight:500}.trend-card h3 i{width:6px;height:6px;border-radius:50%}.trend-card-head b{font:21px var(--mono)}.trend-card-head small{font-size:11px;color:var(--muted)}.trend-card svg{display:block;width:100%;margin:10px 0 6px;font-family:var(--mono)}.trend-card-foot{display:flex;justify-content:space-between;gap:8px;color:var(--muted);font:10px var(--mono)}.trend-note{font-size:11px;color:var(--muted);line-height:1.6}@media(max-width:1100px){.detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.spectrum-stats b{font-size:17px}.spectrum-stats>div{padding:14px}}@media(max-width:650px){.detail-grid,.trend-grid{grid-template-columns:1fr}.detail-spectrum{padding:14px}.spectrum-heading{align-items:flex-start;flex-direction:column}.spectrum-stats{grid-template-columns:1fr 1fr}.spectrum-stats>div:nth-child(2){border-right:0}.spectrum-stats>div:nth-child(-n+2){border-bottom:1px solid var(--border)}.spectrum-heading h2{font-size:21px}.trend-heading{align-items:flex-start;flex-direction:column}.detail-header{gap:8px}.detail-header h2{font-size:14px}.detail-header button{padding:8px;font-size:11px}}.lab-heading{display:flex;justify-content:space-between;align-items:center;gap:24px;margin:8px 0 26px}.lab-eyebrow{color:var(--teal);font:11px var(--mono);letter-spacing:.12em}.lab-heading h1{margin:9px 0;font-size:clamp(26px,3vw,38px);letter-spacing:-.04em}.lab-heading p{color:var(--muted);margin:0;line-height:1.6;max-width:600px}.lab-live{display:flex;align-items:center;gap:8px;padding:10px 14px;border:1px solid var(--border);border-radius:24px;color:var(--muted);font-size:12px;white-space:nowrap}.lab-live i{width:7px;height:7px;border-radius:50%;background:var(--red)}.lab-live.on i{background:var(--green);box-shadow:0 0 10px #3ee08966}.lab-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;align-items:start}.lab-scene{min-width:0;border:1px solid var(--border);border-radius:16px;overflow:hidden;background:radial-gradient(ellipse at 55% 50%,var(--tone-14232d),var(--tone-0c131b) 75%)}.lab-scene.emergency{border-color:var(--red)}.lab-scene.offline svg{opacity:.4}.lab-scene-head{padding:20px 22px;border-bottom:1px solid var(--border-soft);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}.lab-scene-head>span{color:var(--muted);font:10px var(--mono);letter-spacing:.1em}.lab-scene-head b{font-size:12px;color:var(--teal);font-weight:500}.lab-scene-head b.exposure{color:var(--orange)}.lab-scene.emergency .lab-scene-head b{color:var(--red)}.lab-scene svg{width:100%;height:auto;display:block}.lab-svg-caption{font:10px var(--mono);fill:var(--tone-61798c);letter-spacing:1px}.lab-svg-label{font:11px var(--sans);fill:var(--tone-a6bac9);letter-spacing:1px}.lab-svg-value{font:13px var(--mono);fill:var(--tone-e0eff5)}.lab-equipment>rect{fill:var(--tone-152530);stroke:var(--tone-35505f);stroke-width:1.5}.lab-discharge{stroke:#425565;stroke-width:5}.lab-discharge.on{stroke:#ffb477;filter:drop-shadow(0 0 6px #ff8844)}.lab-beam{fill:none;stroke:#563c32;stroke-width:2}.lab-beam.on{stroke:#ff9b5e;stroke-width:3}.lab-beam-glow{fill:none;stroke:#ff772c;stroke-width:10;opacity:0}.lab-beam-glow.on{opacity:.55}.lab-water{fill:none;stroke:#2a4856;stroke-width:4;stroke-dasharray:7 5}.lab-water.flowing{stroke:#2ad4c4;animation:lab-flow 1s linear infinite}.lab-shutter{transform-origin:535px 228px;transition:transform .08s linear}.lab-carriage{transition:transform .3s linear}.lab-fan{transform-origin:100px 392px}.lab-fan.spinning{animation:lab-spin 2s linear infinite}.lab-spot{filter:drop-shadow(0 0 12px #ff8844)}.lab-legend{display:flex;flex-wrap:wrap;align-items:center;gap:18px;padding:14px 22px;border-top:1px solid var(--border-soft);color:var(--muted);font-size:11px}.lab-legend span{display:flex;align-items:center;gap:7px}.lab-legend i{width:14px;height:3px;border-radius:3px}.lab-legend .beam{background:#ff9b5e}.lab-legend .water{background:var(--teal)}.lab-legend .fiber{background:#d7eaf0}.lab-legend small{margin-left:auto;font-size:10px}.lab-console{grid-column:2;grid-row:1 / span 2;padding:24px;border:1px solid var(--border);border-radius:16px;background:var(--surface)}.lab-console h2{font-size:22px;margin:8px 0 22px}.lab-console>label{display:block;margin-bottom:8px;font-size:12px;color:var(--muted)}.lab-console select{width:100%;padding:11px;background:var(--bg-2);border:1px solid var(--border);border-radius:8px}.lab-recipe{display:grid;grid-template-columns:1fr 1fr;gap:18px 10px;padding:22px 0;margin-bottom:4px}.lab-recipe span{display:block;color:var(--muted);font-size:11px;margin-bottom:6px}.lab-recipe b{font:18px var(--mono)}.lab-recipe small{font-size:10px;color:var(--muted)}.lab-action{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;min-height:42px;margin-top:9px}.lab-action>svg:last-child:not(:first-child){margin-left:auto}.lab-help{color:var(--muted);font-size:11px;line-height:1.6;margin:10px 0 18px}.lab-faults{border-top:1px solid var(--border);margin-top:22px;padding-top:8px}.lab-faults h3{font-size:13px;color:var(--orange);margin-bottom:8px}.lab-faults p{font-size:11px;color:var(--muted);line-height:1.5}.lab-faults button{font-size:11px;margin:3px 4px 3px 0;padding:7px 9px}.lab-guided{display:flex;align-items:center;justify-content:space-between;color:var(--teal);margin-top:23px;font-size:11px}.lab-run{grid-column:1;border:1px solid var(--border);background:var(--surface);padding:24px;border-radius:16px;min-width:0}.lab-run-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.lab-run h2{font-size:19px;margin:8px 0 18px}.lab-pulse-count{color:var(--text);font:32px var(--mono);white-space:nowrap}.lab-pulse-count span{color:var(--muted);font-size:12px}.lab-progress{height:4px;background:var(--border);border-radius:3px;overflow:hidden}.lab-progress>div{height:100%;background:var(--teal);transition:width .2s}.lab-grating{display:flex;align-items:center;justify-content:space-around;height:82px;margin:10px 0;position:relative}.lab-grating-fiber{position:absolute;left:0;right:0;top:40px;height:2px;background:#46677a}.lab-grating>i{position:relative;width:3px;height:20px;background:#2a3c49;border-radius:2px}.lab-grating>i.done{background:#ffad71;box-shadow:0 0 9px #ff995744}.lab-grating.trial>i.done{background:var(--blue);box-shadow:none}.lab-run-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;font:10px var(--mono);color:var(--muted);margin-bottom:18px}.lab-result{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:12px 0 20px;font-size:12px}.lab-result b{color:var(--teal)}.lab-result a{color:var(--teal);display:flex;gap:6px;align-items:center;margin-left:auto}.lab-run .aviso-ctrl{font-size:12px;margin-bottom:0}.lab-note{display:flex;align-items:center;gap:8px;font-size:11px;line-height:1.6;color:var(--muted);padding:18px 2px}@keyframes lab-flow{to{stroke-dashoffset:-24}}@keyframes lab-spin{to{transform:rotate(360deg)}}@media(max-width:1150px){.lab-grid{grid-template-columns:1fr}.lab-console{grid-column:1;grid-row:auto}.lab-run{grid-row:2}.lab-heading{align-items:flex-start;flex-direction:column}}@media(max-width:600px){.lab-run,.lab-console{padding:18px}.lab-run-head{align-items:flex-start;flex-direction:column}.lab-legend small{margin-left:0}.lab-svg-label{font-size:13px}.lab-note{align-items:flex-start}}@media(prefers-reduced-motion:reduce){.lab-page *,.lab-page *:before,.lab-page *:after{animation:none!important;transition:none!important}}.acciones-fila{display:flex;gap:6px;flex-wrap:wrap}.acciones-fila .ghost{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;font-size:13px}.switch{width:38px;height:20px;background-color:var(--border, #333);border-radius:12px;padding:2px;transition:background-color .2s ease;display:flex;align-items:center;box-sizing:border-box}.switch.active{background-color:var(--cyan, #00BCD4)}.switch-thumb{width:16px;height:16px;background-color:#fff;border-radius:50%;transition:transform .2s ease;transform:translate(0)}.switch.active .switch-thumb{transform:translate(18px)}.theme-toggle{flex-shrink:0;min-height:38px}.theme-toggle:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.theme-toggle.solo-icono{margin-left:auto;padding:8px;min-width:38px;justify-content:center}.sidebar-prefs{display:flex;gap:6px;margin-bottom:10px}.sidebar-prefs>.theme-toggle{flex:1;min-width:0}.sidebar-prefs>.theme-toggle svg{flex-shrink:0}.sidebar-prefs>div:empty{display:none}.sidebar.compact .sidebar-prefs{flex-direction:column}.sidebar.compact .theme-toggle,.sidebar.compact .vista-btn{justify-content:center;padding-inline:0;min-width:0;width:100%}.sidebar.compact .theme-toggle span{display:none}:root[data-theme=light]{--manual-text: var(--text)}.emergency-dialog{color:var(--text);border-color:var(--red);max-height:calc(100dvh - 32px);overflow-y:auto}.emergency-dialog::backdrop{background:#000000a6}.emergency-dialog .modal-actions{flex-wrap:wrap}.emergency-dialog p.emergency-feedback{color:var(--red)}.emergency-details{flex-shrink:0;border:1px solid var(--red);background:var(--red-dim);color:var(--red);border-radius:8px;padding:8px 10px;cursor:pointer}.emergency-details:focus-visible{outline:2px solid var(--red);outline-offset:3px}.main{--scada-gap: clamp(6px, 1.4dvh, 14px);--scada-padding: 16px}.app{--header-height: clamp(76px, 12dvh, 96px);--header-outer-height: calc(var(--header-height) + 19px)}.topbar{flex:none;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--scada-gap);padding:10px var(--scada-padding) 8px}.status-card,.estop-card{height:var(--header-height);min-height:0;min-width:0;padding:8px 12px;gap:10px;flex-wrap:nowrap}.status-card{grid-column:span 2}.estop-card{grid-column:3}.status-card>div:first-child{min-width:0}.status-card h2{font-size:12px;white-space:nowrap}.status-value{font-size:clamp(18px,3dvh,26px);white-space:nowrap}.status-ico{width:40px;height:40px}.estop-label{font-size:clamp(18.4px,2.875dvh,25.3px);white-space:nowrap}.estop-card{padding-block:6px}.estop-btn{width:57.5px;height:57.5px;flex:none}.estop-btn svg{width:25.3px;height:25.3px}@media(max-width:1100px){.status-ico{display:none}.status-card h2{font-size:10px}}@media(max-width:900px){.app{--header-height: 94px}}@media(max-width:600px){.main{--scada-gap: 6px;--scada-padding: 6px}.app{--header-height: 132px;--header-outer-height: 145px}.topbar{padding:6px var(--scada-padding)}.status-card,.estop-card{padding:6px}.status-card{flex-direction:column;align-items:flex-start;justify-content:center;gap:6px}.estop-card{flex-direction:column;justify-content:center}.estop-label{font-size:13.8px}}.status-heading{display:flex;align-items:center;gap:8px}.mobile-menu-button{display:grid;place-items:center;flex:none;width:36px;height:36px;padding:0;border:1px solid var(--border);border-radius:8px;color:var(--text);background:var(--surface-2);cursor:pointer}.mobile-menu-button:focus-visible{outline:2px solid var(--green);outline-offset:2px}@media(max-width:900px){.sidebar-backdrop{position:fixed;inset:var(--header-outer-height) 0 0;z-index:1001;background:#00000073}.app .sidebar.mobile-open{display:flex;position:fixed;top:var(--header-outer-height);left:0;z-index:1002;width:min(300px,85vw);height:calc(100dvh - var(--header-outer-height));padding:12px;overflow-y:auto;overscroll-behavior:contain;box-shadow:var(--shadow)}.sidebar.mobile-open .nav{flex:1 0 auto}.sidebar.mobile-open .sidebar-foot{flex:none}.status-heading>div{min-width:0}}@media(max-width:400px){.status-heading{gap:5px}.status-card h2{font-size:8px;letter-spacing:.05em}.status-value{font-size:16px}.mobile-menu-button{width:32px;height:32px}}.editor-proc textarea,.cond-editor textarea,.valid-editor textarea{width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:8px 10px;font:inherit;color:inherit;resize:vertical}.editor-proc textarea.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.editor-proc select,.editor-proc .valid-editor-fila input{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:7px 9px;color:inherit;min-width:0}.editor-sub{margin:18px 0 8px;font-size:12px;letter-spacing:.08em;color:var(--muted)}.editor-proc h5{margin:14px 0 6px;font-size:12px;color:var(--muted)}.editor-ayuda{margin:0 0 8px;color:var(--dim);font-size:12px}.campo-error{color:var(--red);font-size:12px}.paso-editor{border:1px solid var(--border);border-radius:12px;margin-bottom:8px;background:var(--surface-2)}.paso-editor.abierto{border-color:#2ad4c473}.paso-editor-head{display:flex;align-items:center;gap:6px;padding:6px 8px}.paso-editor-titulo{flex:1;display:flex;align-items:center;gap:10px;min-width:0;background:transparent;border:0;color:inherit;text-align:left;cursor:pointer;padding:4px}.paso-editor-titulo small{display:block;color:var(--dim);font-size:11px}.paso-editor-body{padding:4px 12px 14px;border-top:1px solid var(--border-soft)}.valid-editor{display:grid;gap:6px;padding:8px 0;border-bottom:1px solid var(--border-soft)}.valid-editor-fila{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:6px}.valid-editor-texto{flex:1 1 220px}.cond-editor{display:grid;gap:4px}.cond-fila{display:flex;gap:6px;flex-wrap:wrap}.cond-fila select:first-child{flex:1 1 260px}.cond-fila input{width:110px}.cond-desc{color:var(--dim);font-size:12px}.link-btn{background:none;border:0;padding:0;color:var(--teal);font-size:12px;cursor:pointer;justify-self:start}.editor-avanzado{margin-top:14px;border-top:1px dashed var(--border);padding-top:10px}.editor-avanzado summary{cursor:pointer;color:var(--muted);font-size:13px}.icon-btn:disabled{opacity:.4;cursor:not-allowed}.proc-vista{margin:8px 0 0;padding-left:0;list-style:none;display:grid;gap:12px}.proc-vista small{color:var(--dim)}.proc-vista ul{margin:6px 0 0;padding-left:18px;color:var(--tone-c9d6e0);font-size:13px}.proc-vista ul li{margin:4px 0}.proc-vista em{color:var(--dim);font-style:normal;font-size:12px}.proc-vista-detalle{color:var(--dim);font-size:12px;white-space:pre-line}.proc-vista-salidas{margin:6px 0 0;color:var(--teal);font-size:12px}.interruptor{display:inline-flex;align-items:center;gap:8px}.interruptor-luz{width:9px;height:9px;border-radius:50%;background:var(--dim);flex-shrink:0}.interruptor.on .interruptor-luz{background:var(--green);box-shadow:0 0 6px var(--green)}.interruptor-editor{border:1px dashed var(--border);border-radius:10px;padding:8px 10px;margin-bottom:8px;display:grid;gap:4px}.interruptor-lado{width:64px;color:var(--muted);font-size:12px}.mobile-bar{display:none}@media(max-width:900px),(max-height:500px){.topbar{padding-top:max(env(safe-area-inset-top),0px)}.mobile-bar{display:flex;grid-column:1 / -1;align-items:center;gap:12px;min-height:52px;margin-inline:calc(-1 * var(--scada-padding));padding-inline:var(--scada-padding);border-bottom:1px solid var(--border-soft)}.mobile-bar-menu{width:40px;height:40px;cursor:pointer}.mobile-bar-menu:focus-visible{outline:2px solid var(--green);outline-offset:3px}.mobile-bar-title{margin:0;min-width:0;font-size:19px;font-weight:700;letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app .sidebar.mobile-open .sidebar-header{display:none}}@media(max-width:600px){.app{--header-height: 90px}.status-card h2{font-size:11px;letter-spacing:.1em}.status-value{font-size:22px}.estop-label{font-size:15px}.estop-btn{width:44px;height:44px}.estop-btn svg{width:20px;height:20px}.mobile-bar{min-height:48px}.page{padding-bottom:calc(16px + env(safe-area-inset-bottom))}}@media(max-height:500px)and (min-width:901px){.app{grid-template-columns:1fr}.sidebar{display:none}.sidebar-backdrop{position:fixed;inset:var(--header-outer-height) 0 0;z-index:1001;background:#00000073}.app .sidebar.mobile-open{display:flex;position:fixed;top:var(--header-outer-height);left:0;z-index:1002;width:min(300px,85vw);height:calc(100dvh - var(--header-outer-height));padding:12px;overflow-y:auto;overscroll-behavior:contain;box-shadow:var(--shadow)}.sidebar.mobile-open .nav{flex:1 0 auto}.sidebar.mobile-open .sidebar-foot{flex:none}}@media(max-height:500px)and (min-width:601px){.main{--scada-gap: 8px;--scada-padding: max(10px, env(safe-area-inset-left))}.app{--header-height: 60px}.topbar{grid-template-columns:auto minmax(0,1fr) minmax(0,.85fr);align-items:center;padding:6px var(--scada-padding)}.mobile-bar{grid-column:1;min-height:0;margin:0;padding:0;border:0}.mobile-bar-title{max-width:28vw;font-size:17px}.status-card{grid-column:2}.estop-card{grid-column:3}.status-card h2{font-size:10px}.status-value{font-size:19px}.estop-label{font-size:15px}.estop-btn{width:44px;height:44px}.estop-btn svg{width:20px;height:20px}.app .sidebar.mobile-open{padding-block:8px}.sidebar.mobile-open .nav-link{padding-block:7px}}@media(max-width:600px),(max-height:500px){.estop-label{display:none}.estop-card{justify-content:center;padding-inline:10px}.topbar{grid-template-columns:minmax(0,1fr) 25vw}.status-card{grid-column:1}.estop-card{grid-column:2;width:auto}.estop-btn{width:52px;height:52px}.estop-btn svg{width:22px;height:22px}}@media(max-height:500px)and (min-width:601px){.topbar{grid-template-columns:auto minmax(0,1fr) 25vw}.status-card{grid-column:2}.estop-card{grid-column:3}.estop-btn{width:44px;height:44px}}:root[data-theme=light] .subsys.info{border-color:var(--blue-line);box-shadow:inset 4px 0 0 var(--blue-line)}:root[data-theme=light] .subsys.warn{border-color:var(--yellow-line);box-shadow:inset 4px 0 0 var(--yellow-line)}:root[data-theme=light] .subsys.ok{border-color:var(--green-line);box-shadow:inset 4px 0 0 var(--green-line)}.paso{display:flex;flex-direction:column;padding:0;min-height:0}.paso-cabecera{position:relative;z-index:6;padding:10px;border-bottom:1px solid var(--border-soft)}.paso-selector{width:100%;display:flex;flex-direction:column;gap:8px;text-align:left;border-radius:10px;border:1px solid var(--border);background:var(--surface-2);padding:12px 16px;cursor:pointer;min-width:0;color:var(--text)}.paso-selector:hover{background:var(--surface-3)}.paso-selector:focus-visible{outline:2px solid var(--teal);outline-offset:2px}.paso-selector.abierta{border-color:var(--teal-line)}.paso-selector-linea{display:flex;align-items:center;gap:10px;width:100%}.paso-selector-orden{flex:1;min-width:0;font-size:11px;letter-spacing:.1em;color:var(--teal);font-weight:700}.paso-selector-ver{font-size:12px;color:var(--muted);white-space:nowrap}.paso-selector-linea svg{flex:none;color:var(--muted);transition:transform .15s ease}.paso-selector.abierta .paso-selector-linea svg{transform:rotate(180deg)}.paso-titulo{font-size:26px;font-weight:700;line-height:1.2;letter-spacing:-.005em}.paso-fases{display:flex;gap:10px;width:100%}.paso-fase{display:flex;flex-direction:column;gap:5px;min-width:0}.paso-segmentos{display:flex;gap:3px}.paso-segmentos i{flex:1;height:6px;border-radius:3px;background:var(--tone-2a3846)}.paso-segmentos i.done{background:var(--green-line)}.paso-segmentos i.active{background:var(--teal-line)}.paso-fase-nombre{font-size:11px;font-weight:600;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paso-fase.done .paso-fase-nombre{color:var(--green)}.paso-fase.active .paso-fase-nombre{color:var(--teal)}.paso-lista{position:absolute;left:10px;right:10px;top:calc(100% + 6px);max-height:min(70dvh,560px);overflow-y:auto;background:var(--tone-15202a);border:2px solid var(--border);border-radius:12px;box-shadow:var(--shadow);padding:14px;z-index:5}.paso-lista-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px}.paso-lista-head h3{margin:0;font-size:11px;letter-spacing:.1em;color:var(--muted)}.paso-lista-head h3 small{color:var(--dim)}.paso-lista-head>span{font-size:12px;color:var(--dim)}.paso-lista-fases{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}.paso-lista-fase{font-size:11px;letter-spacing:.08em;font-weight:700;color:var(--dim);margin:0 0 4px 4px}.paso-lista-fase.done{color:var(--green)}.paso-lista-fase.active{color:var(--teal)}.paso-lista .step-item{margin-bottom:3px;padding:8px 10px}.paso-lista .step-titulo{flex:1;min-width:0}.paso-lista .step-item.done .step-num{border-color:var(--green-line);color:var(--green);background:var(--green-dim)}.paso-lista .step-item .check{color:var(--green);flex:none}.paso-lista .step-item .lock{margin-left:0;flex:none}.paso-cuerpo{flex:1;min-height:0;overflow:auto;padding:16px 18px}.paso-cuerpo>h2{margin:0 0 6px;font-size:22px}.paso-cuerpo>p{margin:0 0 14px;color:var(--muted)}.paso-cuerpo>.paso-subtitulo{margin:0 0 16px;color:var(--tone-c9d6e0);font-size:15px;line-height:1.5;text-wrap:pretty}.paso-cuerpo .acciones-paso{margin:0 0 16px}.paso-pie{display:grid;gap:8px;padding:12px 18px 16px;border-top:1px solid var(--border-soft)}.paso-pie .cta{margin-top:0;display:flex;align-items:center;gap:12px;text-align:left;padding:10px 16px;min-width:0}.cta-texto{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.cta-titulo{font-size:15px;font-weight:700}.cta-sub{font-size:12.5px;font-weight:500;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paso-pie .cta svg{flex:none}.ensayo-lateral{display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;min-height:0;min-width:0}.ensayo-programa,.ensayo-telemetria{padding:16px 18px;min-height:0;overflow:auto;display:flex;flex-direction:column}.programa-nombre{margin:0 0 6px;font-size:20px;font-weight:700}.ensayo-programa .proc-del-programa{margin:0 0 12px}.programa-opciones{display:grid;gap:6px;margin-bottom:12px}.programa-opciones button{text-align:left}.programa-opciones button.on{border-color:var(--teal-line)}.kv.kv-filas{gap:0;margin:0;border-top:1px solid var(--border-soft)}.kv.kv-filas div{font-size:14px;padding:8px 0;border-bottom:1px solid var(--border-soft)}.ensayo-canales{flex:1;min-height:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:8px}.ensayo-canales .tc-card{cursor:default;border-width:2px;padding:10px 12px;gap:6px;justify-content:space-between;min-height:0;container-type:inline-size}.ensayo-canales .tc-card:hover{background:var(--surface)}.ensayo-canales .tc-card .tc-heading{flex-wrap:wrap;align-items:flex-start;gap:5px 8px}.ensayo-canales .tc-card .tc-icon{display:none}.ensayo-canales .tc-card .tc-heading h3{flex:1 1 100%;font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--text);line-height:1.2;white-space:normal;overflow:visible}.ensayo-canales .tc-card .tc-badge{font-size:11px;padding:2px 8px;white-space:nowrap}.ensayo-canales .tc-card .tc-value{font-size:min(26px,15cqi);white-space:nowrap}.ensayo-canales .tc-card .tc-value small{font-size:.45em}.ensayo-canales .tc-card .tc-progress{margin:0;height:6px;flex:none}.ensayo-canales .tc-card .tc-foot{font-size:11px}.ensayo-canales .tc-card .tc-foot>span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width:1101px)and (min-height:640px){.app-ensayo{height:100dvh;min-height:0;grid-template-rows:minmax(0,1fr);overflow:hidden}.app-ensayo .main{min-height:0}.app-ensayo .sidebar{height:100%;min-height:0}.app-ensayo .page{flex:1;min-height:0;display:flex;flex-direction:column;padding:8px var(--scada-padding) 12px}.app-ensayo .ensayo-grid{flex:1;min-height:0}}@media(max-width:1100px),(max-height:639px){.ensayo-grid{grid-template-columns:1fr}.paso-cuerpo{overflow:visible}.ensayo-lateral{grid-template-rows:auto auto}.ensayo-canales{grid-auto-rows:auto}}@media(max-width:600px){.paso-titulo{font-size:21px}.paso-selector-ver,.paso-fase-nombre{display:none}.paso-lista-fases{grid-template-columns:1fr}.paso-lista-head{flex-direction:column;align-items:flex-start;gap:4px}.ensayo-canales{grid-template-columns:repeat(2,minmax(0,1fr))}}
