.circa-logo{vertical-align:middle;letter-spacing:-.03em;color:currentColor;align-items:center;margin:0;font-weight:600;line-height:1;display:inline-flex}.circa-logo svg{flex-shrink:0;width:1em;height:1em}.agent-chat{background:var(--white);border-right:1px solid var(--gray-200);flex-direction:column;min-width:0;height:100%;display:flex;overflow:hidden}.chat-header{border-bottom:1px solid var(--gray-200);flex-shrink:0;justify-content:space-between;align-items:center;height:48px;padding:0 14px;display:flex}.chat-header-left{align-items:center;gap:9px;display:flex}.chat-ai-badge{background:var(--black);width:24px;height:24px;color:var(--white);letter-spacing:.06em;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;font-size:9px;font-weight:700;display:inline-flex}.chat-title{color:var(--black);letter-spacing:.01em;font-size:13px;font-weight:600}.chat-header-right{align-items:center;gap:6px;display:flex}.chat-close-btn{width:28px;height:28px;color:var(--gray-500);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;transition:color .15s,background .15s;display:inline-flex}.chat-close-btn:hover{color:var(--black);background:var(--gray-50)}.lang-selector{position:relative}.lang-btn{border:1px solid var(--gray-200);color:var(--gray-600);cursor:pointer;background:0 0;border-radius:0;align-items:center;gap:5px;padding:4px 8px;font-size:11px;font-weight:500;transition:border-color .15s,color .15s;display:inline-flex}.lang-btn:hover{border-color:var(--gray-400);color:var(--black)}.lang-btn svg{font-size:13px}.lang-btn-label{font-size:11px}.lang-menu{z-index:50;background:var(--white);border:1px solid var(--gray-200);box-shadow:var(--shadow-lift);flex-direction:column;min-width:130px;display:flex;position:absolute;top:calc(100% + 4px);right:0}.lang-option{color:var(--gray-600);text-align:left;cursor:pointer;background:0 0;border:none;padding:8px 14px;font-size:12px;font-weight:500;transition:background .12s,color .12s}.lang-option:hover{background:var(--gray-50);color:var(--black)}.lang-option.active{color:var(--brown);background:var(--brown-subtle)}.chat-messages{flex-direction:column;flex:1;gap:14px;min-height:0;padding:16px 14px;display:flex;overflow-y:auto}.chat-msg{align-items:flex-start;gap:9px;display:flex}.chat-msg--user{flex-direction:row-reverse}.chat-msg-avatar{background:var(--black);width:22px;height:22px;color:var(--white);letter-spacing:.06em;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin-top:2px;font-size:8px;font-weight:700;display:inline-flex}.chat-msg-bubble-wrap{flex-direction:column;gap:6px;max-width:calc(100% - 36px);display:flex}.chat-msg--user .chat-msg-bubble-wrap{align-items:flex-end}.chat-msg-bubble{color:var(--black);background:var(--gray-50);border:1px solid var(--gray-100);word-break:break-word;white-space:pre-wrap;border-radius:0;padding:9px 12px;font-size:13px;line-height:1.6}.chat-msg-bubble--user{background:var(--black);color:var(--white);border-color:var(--black)}.chat-schedule-card{background:var(--white);border:1px solid var(--gray-200);border-left:3px solid var(--brown);width:100%;padding:0;font-size:13px}.chat-schedule-confirm{color:var(--black);padding:9px 12px 0;font-size:13px;line-height:1.55}.chat-schedule-body{border-top:1px solid var(--gray-100);align-items:center;gap:10px;margin-top:8px;padding:9px 10px 9px 12px;display:flex}.chat-schedule-info{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.chat-schedule-name{color:var(--black);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.chat-schedule-trigger{font-size:11px;font-family:var(--font-mono);color:var(--gray-600);align-items:center;gap:5px;display:flex}.chat-schedule-trigger svg{flex-shrink:0;font-size:11px}.chat-schedule-action{color:var(--gray-500);font-size:11px}.chat-schedule-card .toggle-switch{cursor:pointer;flex-shrink:0;width:34px;height:18px;display:inline-block;position:relative}.chat-schedule-card .toggle-switch input{opacity:0;width:0;height:0}.chat-schedule-card .toggle-slider{background:var(--gray-200);border-radius:100px;transition:background .2s;position:absolute;inset:0}.chat-schedule-card .toggle-slider:before{content:"";background:var(--white);border-radius:50%;width:14px;height:14px;transition:transform .2s;position:absolute;top:2px;left:2px}.chat-schedule-card .toggle-switch input:checked+.toggle-slider{background:var(--black)}.chat-schedule-card .toggle-switch input:checked+.toggle-slider:before{transform:translate(16px)}.chat-typing{align-items:center;gap:5px;padding:10px 14px;display:flex}.chat-typing span{background:var(--gray-300);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite chat-bounce}.chat-typing span:nth-child(2){animation-delay:.18s}.chat-typing span:nth-child(3){animation-delay:.36s}@keyframes chat-bounce{0%,80%,to{opacity:.5;transform:translateY(0)}40%{opacity:1;transform:translateY(-5px)}}.chat-suggestions{flex-direction:column;flex-shrink:0;gap:6px;padding:0 14px 12px;display:flex}.chat-suggestion{background:var(--white);border:1px solid var(--gray-100);border-left:2px solid var(--brown-border);color:var(--gray-600);text-align:left;cursor:pointer;border-radius:0;align-items:center;gap:9px;padding:8px 12px;font-size:12px;font-weight:500;transition:border-color .15s,color .15s,background .15s;display:flex}.chat-suggestion:hover{border-color:var(--brown);border-left-color:var(--brown);color:var(--black);background:var(--brown-subtle)}.chat-suggestion svg{color:var(--brown);flex-shrink:0;font-size:14px}.chat-msg-bubble{position:relative}.chat-tts-btn{border:1px solid var(--gray-200);width:24px;height:24px;color:var(--gray-400);cursor:pointer;background:0 0;border-radius:0;justify-content:center;align-items:center;margin-top:6px;font-size:13px;transition:border-color .15s,color .15s;display:inline-flex}.chat-tts-btn:hover{border-color:var(--gray-400);color:var(--black)}.chat-tts-btn.playing{border-color:var(--brown);color:var(--brown)}.chat-tts-spinner{border:1.5px solid var(--gray-200);border-top-color:var(--gray-500);border-radius:50%;width:12px;height:12px;animation:.6s linear infinite spin;display:inline-block}.chat-input-area{border-top:1px solid var(--gray-100);background:var(--white);flex-shrink:0;align-items:flex-end;gap:6px;padding:10px 14px 12px;display:flex}.chat-input{background:var(--gray-50);border:1px solid var(--gray-200);color:var(--black);resize:none;min-height:36px;max-height:120px;font-size:13px;line-height:1.5;font-family:var(--font-sans);border-radius:0;flex:1;padding:8px 10px;transition:border-color .15s,background .15s;overflow-y:auto}.chat-input:focus{border-color:var(--black);background:var(--white);outline:none}.chat-input::placeholder{color:var(--gray-400)}.chat-input:disabled{opacity:.55}.chat-mic-btn{width:36px;height:36px;color:var(--gray-500);border:1px solid var(--gray-200);cursor:pointer;background:0 0;border-radius:0;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;transition:border-color .15s,color .15s,background .15s;display:inline-flex}.chat-mic-btn:hover:not(:disabled){border-color:var(--gray-400);color:var(--black)}.chat-mic-btn.recording{border-color:var(--red);color:var(--red);background:#b91c1c0d;animation:1.2s ease-in-out infinite mic-pulse}.chat-mic-btn:disabled{opacity:.45;cursor:not-allowed}@keyframes mic-pulse{0%,to{box-shadow:0 0 #b91c1c4d}50%{box-shadow:0 0 0 4px #b91c1c00}}.chat-send-btn{background:var(--black);width:36px;height:36px;color:var(--white);cursor:pointer;border:none;border-radius:0;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;transition:background .15s;display:inline-flex}.chat-send-btn:hover:not(:disabled){background:#1a1815}.chat-send-btn:disabled{opacity:.35;cursor:not-allowed}.app-shell{grid-template-columns:minmax(12.5rem,13.75rem) 1fr;max-width:100%;height:100dvh;display:grid;overflow:hidden}.app-shell.chat-open{grid-template-columns:minmax(12.5rem,13.75rem) 300px 1fr}.chat-panel{border-right:1px solid var(--gray-200);height:100dvh;animation:slideInChat .22s var(--ease-out) both;overflow:hidden}.sidebar{--sidebar-item-pad-x:18px;--sidebar-rail-width:2px;--sidebar-icon-width:1.15rem;--sidebar-item-gap:12px;background:var(--white);border-right:1px solid var(--gray-200);z-index:10;flex-direction:column;min-width:0;padding:0;display:flex}.sidebar-brand{height:48px;padding:0 var(--sidebar-item-pad-x);border-bottom:1px solid var(--gray-200);justify-content:flex-start;align-items:center;display:flex}.sidebar-wordmark{color:var(--black);align-items:center;margin-left:0;font-size:21px;line-height:1;display:inline-flex}.sidebar-tagline{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);font-size:10px;font-weight:500}.sidebar-nav{flex-direction:column;flex:1;gap:0;min-height:0;padding:0;display:flex;overflow-y:auto}.sidebar-item{align-items:center;gap:var(--sidebar-item-gap);padding:15px var(--sidebar-item-pad-x);border-left:var(--sidebar-rail-width) solid transparent;border-top:1px solid var(--gray-100);color:var(--gray-600);transition:color .18s var(--ease-out), background .18s var(--ease-out), border-color .18s var(--ease-out);border-radius:0;flex-direction:row;text-decoration:none;display:flex;position:relative}.sidebar-nav .sidebar-item:first-child{border-top:none}.sidebar-item:hover{color:var(--black);background:#faf8f3}.sidebar-item.active{color:var(--brown);background:var(--brown-subtle);border-left-color:var(--brown);font-weight:600}.sidebar-item.active:hover{color:var(--brown);background:var(--brown-subtle)}.sidebar-icon{width:var(--sidebar-icon-width);text-align:center;color:var(--gray-600);flex-shrink:0;justify-content:center;align-items:center;font-size:17px;line-height:1;transition:color .18s;display:inline-flex}.sidebar-icon svg{width:1em;height:1em}.sidebar-item:hover .sidebar-icon{color:var(--black)}.sidebar-item.active .sidebar-icon{color:var(--brown)}.sidebar-label{letter-spacing:.01em;font-size:13px;font-weight:600;line-height:1.3}.sidebar-ai-toggle-area{border-top:1px solid var(--gray-200);margin-top:auto}.sidebar-ai-btn{cursor:pointer;background:0 0;border:none;justify-content:flex-start;width:100%}.sidebar-ai-badge{background:var(--black);color:var(--white);letter-spacing:.06em;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;padding:2px 6px;font-size:9px;font-weight:700;display:inline-flex}.sidebar-ai-btn.active .sidebar-ai-badge{background:var(--brown)}@keyframes slideInChat{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}.sidebar-footer{padding:12px var(--sidebar-item-pad-x) 14px calc(var(--sidebar-item-pad-x) + var(--sidebar-rail-width));border-top:1px solid var(--gray-200);margin-top:auto}.sidebar-live{border:1px solid var(--gray-200);background:var(--white);align-items:center;gap:8px;padding:6px 10px;display:inline-flex}.sidebar-live-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.sidebar-live.online .sidebar-live-dot{background:var(--green);animation:2.5s infinite glow-pulse}.sidebar-live.offline .sidebar-live-dot{background:var(--gray-200)}.sidebar-live-label{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);font-size:10px;font-weight:600}.sidebar-live.online .sidebar-live-label{color:var(--green)}.sidebar-live.offline .sidebar-live-label{color:var(--gray-400)}.top-bar{border-bottom:1px solid var(--gray-100);background:var(--white);z-index:5;justify-content:space-between;align-items:center;height:48px;padding:0 20px;display:flex;position:sticky;top:0}.top-bar-title{letter-spacing:.14em;text-transform:uppercase;color:var(--gray-400);font-size:12px;font-weight:600}.top-bar-right{align-items:center;gap:12px;display:flex}.conn-pill{letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--gray-100);border-left:2px solid var(--gray-100);background:var(--white);border-radius:0;align-items:center;gap:6px;padding:4px 11px;font-size:11px;font-weight:600;display:flex}.conn-pill.online{color:var(--green);border-left-color:#2d7a4f73}.conn-pill.offline{color:var(--gray-400)}.conn-pill .dot{background:currentColor;border-radius:50%;width:6px;height:6px}.conn-pill.online .dot{animation:2.5s infinite glow-pulse}.main-content{min-width:0;overflow:hidden auto}.page-content{background:var(--white);min-height:calc(100vh - 48px);padding:0}.page-content:has(.dashboard){background:var(--white);flex-direction:column;min-height:calc(100vh - 48px);padding:0;display:flex}.page-content:has(.dashboard)>.dashboard{flex:1;min-height:0}@media (width<=720px){.app-shell,.app-shell.chat-open{grid-template-rows:auto 1fr;grid-template-columns:1fr;height:auto;min-height:100dvh}.chat-panel{display:none}.sidebar{border-right:none;border-bottom:1px solid var(--gray-200);flex-direction:row;align-items:center;overflow-x:auto}.sidebar-brand{border-bottom:none;border-right:1px solid var(--gray-200);flex-shrink:0;padding:12px 14px}.sidebar-tagline{display:none}.sidebar-nav{flex-direction:row;flex:1;gap:0;padding:8px 12px;overflow-x:auto}.sidebar-item{border-top:none;border-bottom:2px solid #0000;border-left:none;flex-direction:column;flex-shrink:0;gap:4px;padding:10px 12px 12px}.sidebar-nav .sidebar-item:last-child{border-bottom-color:#0000}.sidebar-item.active{color:var(--brown);background:var(--brown-subtle);border-bottom-color:var(--brown)}.sidebar-footer{display:none}.sidebar-label{letter-spacing:.06em;text-transform:uppercase;text-align:center;max-width:4.5rem;font-size:9px;line-height:1.2}}.landing{--landing-inline-pad:clamp(18px, 4vw, 44px);background:var(--white);flex-direction:column;width:100%;max-width:100%;height:100dvh;display:flex;position:relative;overflow:hidden}.landing-sim-banner{top:76px;right:max(var(--landing-inline-pad), env(safe-area-inset-right));z-index:30;letter-spacing:.12em;text-transform:uppercase;color:var(--white);background:var(--black);border:1px solid var(--gray-700);padding:6px 10px;font-size:10px;position:absolute;box-shadow:0 6px 14px #00000040}.landing-header{top:0;left:max(var(--landing-inline-pad), env(safe-area-inset-left));right:max(var(--landing-inline-pad), env(safe-area-inset-right));z-index:20;box-sizing:border-box;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;max-width:100%;padding:18px 0;display:flex;position:absolute}.landing-brand{align-items:center;display:flex}.landing-logo-name{color:var(--black);font-size:24px}.landing-nav{min-width:0}.landing-time{color:var(--gray-400);letter-spacing:.04em;white-space:normal;text-align:right;font-size:11px}.ascii-field{z-index:1;box-sizing:border-box;contain:strict;max-width:100%;padding:0;line-height:18px;position:absolute;inset:0;overflow:hidden}.ascii-row{white-space:nowrap;display:block}.ascii-char{width:11px;font-family:var(--font-mono);color:var(--gray-200);-webkit-user-select:none;user-select:none;font-size:11px;transition:color .8s;display:inline-block}.landing-fade{background:linear-gradient(to bottom, transparent 0%, #fff9 30%, #ffffffeb 60%, var(--white) 100%);z-index:2;pointer-events:none;height:65%;position:absolute;bottom:0;left:0;right:0}.landing-content{top:0;bottom:0;left:max(var(--landing-inline-pad), env(safe-area-inset-left));right:max(var(--landing-inline-pad), env(safe-area-inset-right));z-index:10;pointer-events:none;box-sizing:border-box;max-width:100%;padding:0;position:absolute}.landing-content>*{pointer-events:auto}.landing-headline-block{box-sizing:border-box;width:min(680px,100%);max-width:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.landing-headline{letter-spacing:-.05em;color:var(--black);overflow-wrap:break-word;flex-direction:column;font-size:clamp(42px,min(7vw,12dvh),88px);font-weight:700;line-height:.97;display:flex}.landing-headline-line{display:block}.landing-headline-accent{color:var(--brown)}.landing-info-row{left:0;right:0;bottom:max(28px, env(safe-area-inset-bottom));box-sizing:border-box;grid-template-columns:minmax(0,1fr) minmax(0,min(14rem,42vw));align-items:end;gap:clamp(16px,4vw,28px);width:100%;max-width:100%;display:grid;position:absolute}.landing-info-left{min-width:0}.landing-meta{letter-spacing:.1em;color:var(--gray-400);text-transform:uppercase;overflow-wrap:break-word;max-width:100%;margin-bottom:8px;font-size:10px}.landing-desc{color:var(--gray-600);overflow-wrap:break-word;max-width:100%;font-size:14px;line-height:1.65}.landing-info-links{text-align:right;flex-direction:column;align-items:stretch;gap:4px;min-width:0;display:flex}.landing-link-btn{width:100%;max-width:100%;font-size:14px;font-family:var(--font-sans);color:var(--gray-600);cursor:pointer;letter-spacing:.01em;white-space:normal;overflow-wrap:anywhere;word-break:break-word;text-align:right;box-sizing:border-box;background:0 0;border:none;padding:5px 0;line-height:1.4;text-decoration:none;transition:color .18s;display:block}.landing-link-btn:hover{color:var(--black)}.landing-link-btn.active{color:var(--black);font-size:15px;font-weight:600}.landing-link-btn.active:hover{color:var(--brown)}@media (width<=700px){.landing-sim-banner{padding:5px 8px;font-size:9px;top:72px}.landing-info-row{grid-template-columns:1fr}.landing-info-links,.landing-link-btn{text-align:left}.landing-headline{font-size:clamp(36px,min(11vw,10dvh),60px)}}.field-3d-view{background:#fff;width:100%;height:100%;min-height:180px;position:relative;overflow:hidden}.field-3d-view>canvas{display:block;width:100%!important;height:100%!important}.field-3d-hud{pointer-events:none;z-index:3;flex-direction:column;gap:5px;display:flex;position:absolute;bottom:14px;left:14px}.field-3d-hud-tag{letter-spacing:.16em;text-transform:uppercase;color:#9c6b12b3;font-size:9px;font-weight:700;line-height:1}.field-3d-hud-counts{flex-direction:column;gap:3px;display:flex}.field-3d-hud-item{color:#0f0e0c8c;letter-spacing:.02em;align-items:center;gap:6px;font-size:10px;font-weight:600;line-height:1;display:flex}.field-3d-hud-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.field-3d-hud-dot--station{background:#c4972a;box-shadow:0 0 5px #c4972a8c}.field-3d-hud-dot--node{background:#2d9e5f;box-shadow:0 0 5px #2d9e5f80}.field-3d-empty{pointer-events:none;z-index:2;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.field-3d-empty p{letter-spacing:.06em;color:#0f0e0c47;margin:0;font-size:11px;font-weight:500}.stats-panel{flex-direction:column;gap:0;display:flex}.stats-section,.stats-section:first-child{margin-top:0}.stats-section+.stats-section{margin-top:12px}.stats-section-title{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);margin-bottom:0;padding:14px 20px 10px;font-size:12px;font-weight:600}.stats-card-list{flex-direction:column;gap:12px;padding:0 20px 12px;display:flex}.stats-card{background:var(--white);border:1px solid var(--gray-200);text-align:left;border-radius:8px;flex-direction:column;margin:0;padding:16px;transition:all .2s;display:flex;box-shadow:0 1px 3px #0000000a}.stats-card--selectable{cursor:pointer;appearance:none;font:inherit;color:inherit;width:100%}.stats-card--selectable:hover{border-color:var(--gray-300);box-shadow:0 4px 12px #0000000f}.stats-card--selected{border-color:var(--brown);box-shadow:0 0 0 1px var(--brown)}.stats-card--selectable:focus-visible{outline:2px solid var(--brown);outline-offset:2px}.stats-card--offline{opacity:.8;background-color:var(--gray-50)}.stats-card-inner{flex-direction:column;gap:12px;width:100%;display:flex}.stats-card-head{justify-content:space-between;align-items:flex-start;gap:4px;display:flex}.stats-card-title-wrap{align-items:flex-start;gap:8px;display:flex}.stats-card-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px;margin-top:3px}.stats-card-title-text{flex-direction:column;gap:2px;display:flex}.stats-card-title{color:var(--black);font-size:14px;font-weight:600}.stats-card-id{color:var(--gray-400);font-size:11px}.stats-card-status{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-radius:4px;padding:4px 6px;font-size:10px;font-weight:600}.stats-card-status.online{color:#16a34a;background:#4ade8026}.stats-card-status.offline{background:var(--gray-100);color:var(--gray-500)}.stats-card-grid{border-top:1px solid var(--gray-100);flex-direction:column;gap:8px;margin-top:4px;padding-top:12px;display:flex}.stats-card-row{justify-content:space-between;align-items:center;display:flex}.stats-card-label{color:var(--gray-500);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.stats-card-value{color:var(--black);font-size:13px;font-weight:600}.stats-empty{text-align:left;color:var(--gray-500);border-top:none;margin-top:0;padding:24px 20px;font-size:13px}.stats-empty p:first-child{color:var(--gray-600);font-weight:500}.stats-empty p:last-child{letter-spacing:.02em;margin-top:6px;font-size:12px}.dashboard{background:#fff;flex-direction:column;width:100%;height:calc(100vh - 48px);min-height:0;display:flex}.dashboard-stat-bar{border-bottom:1px solid var(--gray-100);background:#fff;flex-shrink:0;padding:0}.dashboard-stat-bar-inner{flex-wrap:nowrap;align-items:stretch;min-height:5.5rem;display:flex}.dashboard-stat-item{border-left:1px solid var(--gray-100);background:#fff;border-radius:0;flex-direction:column;flex:1 1 0;justify-content:space-between;gap:10px;min-width:0;padding:14px 16px 16px;display:flex}.dashboard-stat-item:first-child{border-left:none}.dashboard-stat-item-top{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.dashboard-stat-label{letter-spacing:.12em;text-transform:uppercase;color:#0f0e0c;font-size:11px;font-weight:700;line-height:1.2}.dashboard-stat-idx{letter-spacing:.04em;color:var(--gray-400);flex-shrink:0;font-size:11px;font-weight:500}.dashboard-stat-value{letter-spacing:-.04em;color:#0f0e0c;font-size:clamp(1.35rem,2.4vw,1.85rem);font-weight:700;line-height:1}.dashboard-stat-value--time{font-size:clamp(1rem,1.8vw,1.35rem);font-weight:600}.dashboard-stat-item--warn .dashboard-stat-value{color:#4a4640}.dashboard-stat-item--alert .dashboard-stat-value{color:#0f0e0c;font-weight:800}.dashboard-stat-item--invert{background:#0f0e0c;border-left:1px solid #0f0e0c;flex:1.15 1 0}.dashboard-stat-item--invert .dashboard-stat-label{color:#ffffffeb}.dashboard-stat-item--invert .dashboard-stat-idx{color:#ffffff73}.dashboard-stat-item--invert .dashboard-stat-value,.dashboard-stat-item--invert.dashboard-stat-item--warn .dashboard-stat-value,.dashboard-stat-item--invert.dashboard-stat-item--alert .dashboard-stat-value{color:#fff}.dashboard-stat-item--time{flex:none;min-width:6.5rem;max-width:8rem}.dashboard-body{border-top:none;flex:1;gap:0;min-height:0;display:flex}.dashboard-3d-wrap{background:#fff;flex-direction:column;flex:0 0 70%;min-width:0;min-height:0;display:flex}.dashboard-3d-label-bar{border-bottom:1px solid var(--gray-100);box-sizing:border-box;background:#fff;flex-shrink:0;justify-content:space-between;align-items:center;min-height:48px;padding:14px 20px;display:flex}.dashboard-3d-kicker{letter-spacing:.16em;text-transform:uppercase;color:#9c6b12bf;font-size:11px;font-weight:700}.dashboard-3d-hint{letter-spacing:.06em;color:var(--gray-400);font-size:11px;font-weight:500}.dashboard-3d-canvas{flex:1;min-height:0;position:relative}.dashboard-info-panel{scrollbar-gutter:stable;border-left:1px solid var(--gray-100);background:#fff;flex:1;min-width:0;min-height:0;overflow:hidden auto}.dashboard-info-header{border-bottom:1px solid var(--gray-100);box-sizing:border-box;flex-shrink:0;justify-content:space-between;align-items:center;gap:10px;min-height:48px;padding:14px 20px;display:flex}.dashboard-info-kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--gray-400);font-size:11px;font-weight:700}.dashboard-info-hint{letter-spacing:.06em;color:var(--gray-400);font-size:11px;font-weight:500}.dashboard-inspector{flex-direction:column;gap:0;height:100%;display:flex}.dashboard-inspector-head{border-bottom:1px solid var(--gray-100);box-sizing:border-box;justify-content:space-between;align-items:flex-start;gap:12px;min-height:48px;padding:14px 20px;display:flex}.dashboard-inspector-type{letter-spacing:.14em;text-transform:uppercase;margin-bottom:6px;font-size:11px;font-weight:700;display:inline-block}.dashboard-inspector-type--station{color:#9c6b12d9}.dashboard-inspector-type--node{color:#1d6a94d9}.dashboard-inspector-name{letter-spacing:-.02em;color:var(--black);margin:0 0 4px;font-size:18px;font-weight:700;line-height:1.2}.dashboard-inspector-id{color:var(--gray-400);word-break:break-all;margin:0;font-size:11px}.dashboard-inspector-close{width:28px;height:28px;color:var(--gray-400);border:1px solid var(--gray-100);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:20px;line-height:1;display:flex}.dashboard-inspector-close:hover{color:var(--black);border-color:var(--gray-300)}.dashboard-inspector-status{border-bottom:1px solid var(--gray-100);align-items:center;gap:8px;padding:12px 20px;display:flex}.dashboard-inspector-status-label{color:var(--black);font-size:11px;font-weight:600}.dashboard-inspector-section{border-bottom:1px solid var(--gray-100);flex-direction:column;gap:10px;padding:14px 20px;display:flex}.dashboard-inspector-section-title{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);margin:0 0 2px;font-size:11px;font-weight:700}.dashboard-inspector-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.dashboard-inspector-row-label{letter-spacing:.04em;color:var(--gray-400);flex-shrink:0;font-size:12px;font-weight:600}.dashboard-inspector-row-value{color:var(--black);font-size:12px;font-weight:600}.dashboard-inspector-bar-wrap{flex:1;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.dashboard-inspector-bar{background:var(--gray-100);flex:1;max-width:120px;height:4px}.dashboard-inspector-bar-fill{height:100%;transition:width .4s}.dashboard-inspector-bar-value{text-align:right;min-width:40px;font-size:11px;font-weight:600}@media (width<=1100px){.dashboard-stat-bar-inner{flex-wrap:wrap}.dashboard-stat-item:not(.dashboard-stat-item--invert):not(.dashboard-stat-item--time){border-top:1px solid var(--gray-100);flex:42%;min-width:9rem}.dashboard-stat-item:not(.dashboard-stat-item--invert):not(.dashboard-stat-item--time):nth-child(odd){border-left:none}.dashboard-stat-item--invert{border-left:none;border-top:1px solid var(--gray-100);flex:100%}.dashboard-stat-item--time{border-left:none;border-top:1px solid var(--gray-100);flex:100%;min-width:0;max-width:none}}@media (width<=820px){.dashboard-body{flex-direction:column}.dashboard-3d-wrap{border-right:none;border-bottom:1px solid var(--gray-100);flex:none;min-height:260px;max-height:45vh}.dashboard-info-panel{border-left:none;border-top:1px solid var(--gray-100);flex:1;min-height:0}}.field-shape-editor{flex-direction:column;padding:0;display:flex;overflow:hidden}.field-shape-editor-head{border-bottom:1px solid var(--gray-100);padding:14px 18px 12px}.field-shape-kicker{letter-spacing:.14em;text-transform:uppercase;color:var(--gray-500);margin:0 0 6px;font-size:12px;font-weight:600}.field-shape-title{letter-spacing:-.02em;color:var(--black);margin:0 0 8px;font-size:17px;font-weight:700}.field-shape-desc{color:var(--gray-600);max-width:42rem;margin:0;font-size:13px;line-height:1.45}.field-shape-body{grid-template-columns:1fr minmax(220px,280px);align-items:stretch;gap:0;min-height:320px;display:grid}@media (width<=820px){.field-shape-body{grid-template-columns:1fr;min-height:0}}.field-shape-canvas-wrap{border-right:1px solid var(--gray-100);background:#fff;min-height:320px;position:relative}@media (width<=820px){.field-shape-canvas-wrap{border-right:none;border-bottom:1px solid var(--gray-100);min-height:280px}}.field-shape-canvas-gl{width:100%;height:100%;min-height:320px;display:block}.field-shape-canvas-overlay{z-index:2;pointer-events:none;max-width:min(22rem,100%);position:absolute;bottom:12px;left:12px;right:12px}.field-shape-steps-shell{pointer-events:auto;border:1px solid var(--gray-100);-webkit-backdrop-filter:none;box-shadow:none;background:#fffffff2;border-radius:0;overflow:hidden}.field-shape-steps-shell--minimized{max-width:fit-content}.field-shape-steps-bar{justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;display:flex}.field-shape-steps-bar-label{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-600);font-size:11px;font-weight:600}.field-shape-steps-toggle{flex-shrink:0;padding:4px 8px;font-size:11px}.field-shape-steps{color:var(--gray-800);border-top:1px solid var(--gray-100);margin:0;padding:10px 12px 12px;font-size:12px;line-height:1.55;list-style:inside decimal}.field-shape-steps li{margin:0 0 4px}.field-shape-steps li:last-child{margin-bottom:0}.field-shape-side-intro{padding-bottom:2px}.field-shape-side-tip{color:var(--gray-600);margin:0;font-size:12px;line-height:1.45}.field-shape-measurements{border:1px solid var(--gray-100);background:var(--white);border-radius:0;overflow:hidden}.field-shape-measurements-summary{cursor:pointer;letter-spacing:.1em;text-transform:uppercase;color:var(--gray-600);border-bottom:1px solid var(--gray-50);-webkit-user-select:none;user-select:none;padding:10px 12px;font-size:12px;font-weight:600;list-style:none}.field-shape-measurements-summary::-webkit-details-marker{display:none}.field-shape-measurements[open] .field-shape-measurements-summary{color:var(--black)}.field-shape-measurements .field-shape-edges{border:none;border-radius:0}.field-shape-side{background:var(--white);flex-direction:column;gap:16px;padding:14px 16px;display:flex}.field-shape-edges{border:1px solid var(--gray-100);border-radius:0;flex-direction:column;gap:0;margin:0;padding:0;list-style:none;display:flex;overflow:hidden}.field-shape-edges li{border-bottom:1px solid var(--gray-50);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;font-size:12px;display:flex}.field-shape-edges li:last-child{border-bottom:none}.field-shape-controls{flex-direction:column;gap:10px;display:flex}.field-shape-edge-label{color:var(--gray-600);min-width:2.25rem;font-weight:500}.field-shape-edge-val{color:var(--black);text-align:right;flex:1;font-weight:600}.field-shape-edge-length-hint{color:var(--gray-500);margin:0 0 10px;padding:0 12px;font-size:11px;line-height:1.45}.field-shape-edge-length-wrap{flex:1;justify-content:flex-end;align-items:center;gap:6px;min-width:0;display:flex}.field-shape-edge-length-input{width:4.85rem;padding:4px 8px;font-size:12px}.field-shape-edge-length-unit{color:var(--gray-600);flex-shrink:0;font-size:11px}.field-shape-edge-add{flex-shrink:0;padding:4px 8px;font-size:11px}.field-shape-verts{border:1px solid var(--gray-100);border-radius:0;flex-direction:column;gap:0;max-height:10rem;margin:0;padding:0;list-style:none;display:flex;overflow:hidden auto}.field-shape-verts li{border-bottom:1px solid var(--gray-50);justify-content:space-between;align-items:center;gap:8px;padding:8px 10px;font-size:11px;display:flex}.field-shape-verts li:last-child{border-bottom:none}.field-shape-vert-coord{color:var(--gray-700);text-overflow:ellipsis;min-width:0;overflow:hidden}.field-shape-vert-remove{flex-shrink:0;padding:3px 8px;font-size:11px}.field-shape-reset-label{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-500);margin-bottom:10px;font-size:12px;font-weight:600;display:block}.field-shape-reset-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.field-shape-reset-field{min-width:5rem;color:var(--gray-600);flex-direction:column;flex:1;gap:4px;font-size:11px;display:flex}.field-shape-reset-field .input{width:100%}.field-shape-reset-btn{white-space:nowrap;flex-shrink:0}.field-shape-hint{color:var(--gray-500);margin:12px 0 0;font-size:12px;line-height:1.5}.field-canvas-container{touch-action:none;background:#fff;width:100%;position:relative;overflow:hidden}.field-canvas-container--preview{aspect-ratio:1;min-height:200px;max-height:min(360px,52vh)}.field-canvas-container--modal-picker.field-canvas-container--preview{aspect-ratio:auto;height:230px;min-height:220px;max-height:260px}.field-canvas-container--placing .field-canvas-gl{cursor:crosshair}.field-canvas-container--full{flex:auto;height:100%;min-height:320px}.field-canvas-gl{width:100%;height:100%;display:block}.field-inspector{z-index:4;border:1px solid var(--gray-100);border-left:3px solid var(--brown);pointer-events:auto;background:#fffffff5;width:min(15rem,100% - 20px);padding:12px 14px 14px;position:absolute;top:10px;right:10px;box-shadow:0 2px 12px #0f0e0c0f}.field-canvas-container--preview .field-inspector{width:min(13rem,100% - 16px);padding:10px 12px 12px;font-size:12px}.field-inspector-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.field-inspector-cluster{letter-spacing:.08em;color:var(--gray-400);font-size:9px;font-weight:600}.field-inspector-close{color:var(--gray-400);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:18px;line-height:1}.field-inspector-close:hover{color:var(--black)}.field-inspector-name{color:var(--black);margin:0 0 4px;font-size:14px;font-weight:600}.field-inspector-id{color:var(--gray-400);word-break:break-all;margin:0 0 10px;font-size:9px}.field-inspector-dl{flex-direction:column;gap:8px;margin:0;display:flex}.field-inspector-dl>div{border-top:1px solid var(--gray-100);justify-content:space-between;gap:10px;padding-top:6px;display:flex}.field-inspector-dl>div:first-of-type{border-top:none;padding-top:0}.field-inspector-dl dt{letter-spacing:.06em;text-transform:uppercase;color:var(--gray-400);font-size:9px;font-weight:600}.field-inspector-dl dd{color:var(--black);margin:0;font-size:11px}.configure-page{flex-direction:column;gap:0;display:flex}.configure-tabs{border-bottom:1px solid var(--gray-100);flex-shrink:0;gap:0;margin-bottom:0;padding-bottom:0;display:flex;position:relative}.configure-tab-btn{background:var(--white);border:none;border-right:1px solid var(--gray-100);color:var(--gray-600);text-transform:uppercase;cursor:pointer;letter-spacing:.11em;border-bottom:2px solid #0000;border-radius:0;align-items:center;gap:7px;padding:10px 14px;font-size:11px;font-weight:700;transition:color .18s,background .18s,border-color .18s;display:flex}.configure-tab-btn:hover{color:var(--black);background:#faf9f5}.configure-tab-btn.active{color:var(--black);background:var(--white);border-bottom-color:var(--black)}.configure-tab-btn.active .configure-tab-icon{color:var(--black)}.configure-tab-icon{color:var(--gray-400);justify-content:center;align-items:center;font-size:12px;display:inline-flex}.configure-tab-icon svg{width:1em;height:1em}.configure-tab-indicator{display:none}.configure-tab-body{flex:1}.configure-tab-body>.configure-devices-body{border-top:none}.configure-devices-body{background:var(--white);border-radius:0;height:calc(100vh - 96px);min-height:400px;display:flex;overflow:hidden}.configure-devices-map{border-right:1px solid var(--gray-100);background:#f6f4ef;flex-direction:column;flex:1;min-height:360px;display:flex;overflow:hidden}.configure-devices-map>.field-canvas-container{flex:1;width:100%;min-height:0}.configure-devices-side{background:var(--white);flex-direction:column;flex:0 0 300px;width:300px;min-width:240px;max-width:340px;display:flex;overflow:hidden}.configure-side-header{border-bottom:1px solid var(--gray-100);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.configure-side-kicker{letter-spacing:.14em;text-transform:uppercase;color:var(--gray-500);font-size:12px;font-weight:700}.configure-add-btn{align-items:center;gap:6px;padding:6px 12px;font-size:12px;display:inline-flex}.configure-cancel-btn{padding:5px 11px;font-size:12px}.configure-side-list{flex:1;padding:0;overflow-y:auto}.configure-empty-hint{color:var(--gray-500);text-align:center;padding:20px 16px;font-size:13px;line-height:1.5}.configure-device-row{border-bottom:1px solid var(--gray-100);border-left:2px solid #0000;justify-content:space-between;align-items:center;gap:10px;padding:10px 16px;transition:background .18s,border-color .18s;display:flex}.configure-device-row:hover{border-left-color:var(--brown);background:#faf9f5}.configure-device-row--node{background:#fbfaf7;padding-left:18px}.configure-device-info{flex-direction:column;gap:2px;min-width:0;display:flex}.configure-device-name{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:500;overflow:hidden}.configure-device-id{color:var(--gray-500);font-size:12px}.configure-delete-btn{background:var(--white);border:1px solid var(--gray-200);color:var(--gray-400);cursor:pointer;border-radius:0;flex-shrink:0;justify-content:center;align-items:center;padding:2px 6px;font-size:11px;transition:border-color .15s,color .15s,background .15s;display:inline-flex}.configure-delete-btn:hover{color:#e53e3e;background:#fff5f5;border-color:#e53e3e}.configure-add-form{flex-direction:column;flex:1;display:flex;overflow:hidden}.configure-add-form-body{flex-direction:column;flex:1;gap:0;padding:0;display:flex;overflow-y:auto}.configure-add-form-body>*{border-bottom:1px solid var(--gray-100);padding:12px 16px}.configure-add-form-body>:last-child{border-bottom:none}.configure-type-toggle{border-left:1px solid var(--gray-100);border-right:1px solid var(--gray-100);grid-template-columns:repeat(2,minmax(0,1fr));gap:0;display:grid}.configure-type-btn{border:none;border-right:1px solid var(--gray-100);cursor:pointer;text-align:left;background:var(--white);border-radius:0;flex-direction:column;flex:1;align-items:flex-start;gap:4px;padding:12px 16px;transition:background .18s,color .18s;display:flex}.configure-type-btn:last-child{border-right:none}.configure-type-btn:hover{background:#faf9f5}.configure-type-btn.selected{box-shadow:inset 0 -2px 0 var(--black);background:#f6f4ef}.configure-type-icon{justify-content:center;align-items:center;font-size:15px;display:inline-flex}.configure-type-icon svg{width:1em;height:1em}.configure-type-label{color:var(--black);font-size:12px;font-weight:600;line-height:1.2}.configure-pick-readout{flex-direction:column;gap:5px;display:flex}.configure-pick-values{border:1px solid var(--gray-200);background:#faf9f5;border-radius:0;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:8px 10px;font-size:12px;display:flex}.configure-pick-values.is-set{border-color:var(--black);background:var(--white)}.configure-pick-pending{color:var(--gray-500);font-size:12px}.configure-field-row{flex-direction:column;gap:4px;display:flex}.configure-add-actions{justify-content:flex-end;margin-top:0;display:flex}.configure-constraint-hint{color:#92400e;background:#fffbeb;border:1px solid #fcd34d;border-radius:0;align-items:flex-start;gap:8px;margin:4px 0 0;padding:7px 11px;font-size:11.5px;line-height:1.45;display:flex}.configure-position-error{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:0;align-items:flex-start;gap:8px;margin:0;padding:8px 12px;font-size:12px;line-height:1.45;display:flex}.configure-note{color:var(--gray-500);align-items:flex-start;gap:8px;margin:0;font-size:12px;line-height:1.5;display:flex}.configure-hint-icon,.configure-note-icon{flex-shrink:0;justify-content:center;align-items:center;margin-top:1px;display:inline-flex}.configure-hint-icon svg,.configure-note-icon svg{width:.95rem;height:.95rem}.configure-note code{font-family:var(--font-mono);font-size:10px}@media (width<=860px){.configure-devices-body{border-left:none;border-right:none;border-radius:0;flex-direction:column;height:auto;min-height:0}.configure-devices-map{border-right:none;border-bottom:1px solid var(--gray-100);flex:none;height:300px;min-height:300px}.configure-devices-map>.field-canvas-container{flex:none;height:300px;min-height:0}.configure-devices-side{flex:none;width:100%;max-width:none;max-height:420px}}.configure-optional{color:var(--gray-mid);margin-left:4px;font-size:11px;font-weight:400}.configure-field-hint{color:var(--gray-mid);margin:4px 0 0;font-size:12px;line-height:1.4}.control-page{flex-direction:column;gap:0;min-height:calc(100vh - 96px);display:flex}.control-tabs{border-bottom:1px solid var(--gray-100);flex-shrink:0;gap:0;margin-bottom:0;padding-bottom:0;display:flex;position:relative}.tab-btn{background:var(--white);border:none;border-right:1px solid var(--gray-100);color:var(--gray-600);text-transform:uppercase;cursor:pointer;letter-spacing:.11em;border-bottom:2px solid #0000;border-radius:0;align-items:center;gap:7px;padding:10px 14px;font-size:11px;font-weight:700;transition:color .18s,background .18s,border-color .18s;display:flex}.tab-btn:hover{color:var(--black);background:#faf9f5}.tab-btn.active{color:var(--black);background:var(--white);border-bottom-color:var(--black)}.tab-btn.active .tab-icon{color:var(--black)}.tab-icon{color:var(--gray-400);justify-content:center;align-items:center;font-size:12px;display:inline-flex}.tab-icon svg{width:1em;height:1em}.control-body{flex:1;overflow-y:auto}.ctrl-section-title{letter-spacing:-.02em;color:var(--black);font-size:17px;font-weight:700}.ctrl-section-sub{color:var(--gray-600);margin-top:4px;font-size:13px}.ctrl-empty{text-align:center;color:var(--gray-400);padding:24px 20px;font-size:13px}.scheduler .ctrl-empty{border-top:none}.ctrl-empty p:first-child{color:var(--gray-800);font-size:14px;font-weight:500}.ctrl-empty p:last-child{margin-top:4px}.scheduler{flex-direction:column;gap:0;display:flex}.scheduler-header{border-bottom:1px solid var(--gray-100);justify-content:space-between;align-items:flex-start;gap:12px;padding:16px 20px;display:flex}.schedule-list{flex-direction:column;gap:0;display:flex}.schedule-card{border-left:2px solid #0000;border-bottom:1px solid var(--gray-100);justify-content:space-between;align-items:center;gap:16px;padding:14px 20px;transition:border-color .15s,background .15s;display:flex}.schedule-card+.schedule-card{margin-top:-1px}.scheduler>.schedule-list>.schedule-card,.scheduler>.ctrl-empty,.scheduler>.schedule-form{border-left:none;border-right:none}.schedule-card:hover{border-left-color:var(--brown);background:#faf9f5}.schedule-card.disabled{opacity:.45}.schedule-card-left{align-items:center;gap:14px;display:flex}.schedule-name{color:var(--black);font-size:13px;font-weight:500}.schedule-trigger{color:var(--gray-500);font-size:12px;font-family:var(--font-mono);margin-top:2px}.schedule-action{color:var(--brown);margin-top:2px;font-size:12px}.schedule-trigger,.schedule-action{align-items:center;gap:6px;display:inline-flex}.schedule-delete{background:var(--white);border:1px solid var(--gray-200);color:var(--gray-400);cursor:pointer;border-radius:0;justify-content:center;align-items:center;padding:4px 8px;font-size:12px;transition:color .15s,background .15s;display:inline-flex}.schedule-delete:hover{color:var(--red);background:#fff5f5;border-color:#fecaca}.toggle-switch{cursor:pointer;width:34px;height:18px;display:inline-block;position:relative}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{background:var(--gray-200);border-radius:0;transition:background .2s;position:absolute;inset:0}.toggle-slider:before{content:"";background:var(--white);width:12px;height:12px;box-shadow:none;border-radius:0;transition:transform .2s;position:absolute;top:3px;left:3px}.toggle-switch input:checked+.toggle-slider{background:var(--black)}.toggle-switch input:checked+.toggle-slider:before{transform:translate(16px)}.schedule-form{border-top:none;flex-direction:column;gap:14px;padding:16px 20px;display:flex}.form-title{color:var(--black);margin-bottom:4px;font-size:15px;font-weight:600}.form-row{flex-direction:column;gap:6px;display:flex}.form-row-split{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;display:grid}.form-section-title{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-500);border-top:1px solid var(--gray-100);padding-top:8px;font-size:12px}.form-actions{border-top:1px solid var(--gray-100);justify-content:flex-end;gap:10px;padding-top:8px;display:flex}.turret-tab{flex-direction:column;gap:0;max-width:none;display:flex}.turret-tab>.ctrl-section-title{padding:16px 20px 0}.turret-tab>.ctrl-section-sub{border-bottom:1px solid var(--gray-100);margin-top:2px;padding:0 20px 14px}.turret-tab>.card,.turret-tab>.hw-panel{border-left:none;border-right:none;border-radius:0}.turret-tab>.card:first-of-type,.turret-tab>.hw-estop-bar{border-top:none}.turret-tab>.card+.card,.turret-tab>.hw-panel+.hw-panel,.turret-tab>.card+.hw-panel,.turret-tab>.hw-panel+.card{margin-top:-1px}.hw-connection{flex-direction:column;gap:10px;padding:16px 20px;display:flex}.hw-connection-row{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.hw-station-row{flex:1;min-width:200px}.hw-status-col{flex-direction:column;gap:4px;min-width:160px;display:flex}.hw-url{color:var(--gray-600);word-break:break-all;font-size:12px}.hw-ping-row{align-items:center;gap:8px;margin-top:2px;display:flex}.hw-badge{letter-spacing:.06em;text-transform:uppercase;border-radius:0;padding:3px 10px;font-size:11px;font-weight:600}.hw-badge--idle{background:var(--gray-100);color:var(--gray-400)}.hw-badge--ok{color:var(--green);background:#2d7a4f1a}.hw-badge--fail{color:var(--red);background:#b91c1c14}.hw-ping-btn{justify-content:center;align-items:center;padding:4px 10px;font-size:11px;display:inline-flex}.hw-select-hint{color:var(--gray-500);text-align:center;padding:8px 0;font-size:13px}.hw-auto-info{flex-direction:column;gap:2px;display:flex}.hw-auto-hint{color:var(--gray-500);margin-top:2px;font-size:11px}.hw-panel{flex-direction:column;gap:12px;padding:16px 20px;display:flex}.hw-panel-header{justify-content:space-between;align-items:center;display:flex}.hw-panel-title{letter-spacing:.02em;color:var(--black);font-size:13px;font-weight:600}.hw-panel-sub{color:var(--gray-500);margin-top:-6px;font-size:13px;line-height:1.4}.hw-empty-hint{color:var(--gray-500);text-align:center;padding:16px 0;font-size:13px;line-height:1.5}.node-readings-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;display:grid}.node-card{border:1px solid var(--gray-200);border-radius:0;flex-direction:column;gap:8px;padding:12px;transition:border-color .2s;display:flex}.node-card--wet{background:#ebf8ff;border-color:#3182ce}.node-card--dry{border-color:var(--gray-200)}.node-card-header{justify-content:space-between;align-items:center;gap:4px;display:flex}.node-card-id{white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.node-card-row{justify-content:space-between;align-items:center;display:flex}.node-soil-bar-wrap{background:var(--gray-100);border-radius:3px;height:6px;overflow:hidden}.node-soil-bar{background:#3182ce;border-radius:3px;height:100%;transition:width .4s}.node-soil-val{color:var(--black);font-size:20px;font-weight:700}.node-wet-badge{letter-spacing:.08em;border-radius:0;padding:3px 8px;font-size:11px;font-weight:700}.node-wet-badge.wet{color:#2b6cb0;background:#bee3f8}.node-wet-badge.dry{background:var(--gray-100);color:var(--gray-500)}.node-mac{color:var(--gray-400);font-size:11px}.hw-range-hint{color:var(--gray-500);font-size:12px;font-weight:400}.hw-btn-row{flex-wrap:wrap;gap:8px;display:flex}.hw-btn{align-items:center;gap:6px;padding:8px 16px;font-size:13px;font-weight:500;display:flex}.hw-btn--stop{border-color:var(--gray-300)!important}.hw-btn--full{justify-content:center;width:100%}.hw-pump-on{background:var(--brown,#7c4f2a)!important}.hw-jog-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.hw-jog-steps{flex:1;min-width:90px}.hw-jog-dir{width:80px}.hw-jog-btn{white-space:nowrap;align-self:flex-end}.hw-aim-grid{flex-direction:column;gap:10px;display:flex}.hw-aim-preview{background:var(--gray-50);border:1px solid var(--gray-100);border-radius:0;align-items:center;gap:16px;padding:8px 12px;display:flex}.hw-aim-coords{color:var(--black);font-size:14px;font-weight:600}.hw-aim-radius{color:var(--gray-500);font-size:12px}.hw-spray-row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.hw-spray-dur{flex:1;min-width:160px}.hw-spray-btn{white-space:nowrap;align-self:flex-end}.angle-wrap{align-items:center;gap:16px;display:flex}.angle-slider{-webkit-appearance:none;background:var(--gray-200);cursor:pointer;border-radius:100px;outline:none;flex:1;height:3px}.angle-slider::-webkit-slider-thumb{-webkit-appearance:none;background:var(--black);cursor:pointer;border-radius:50%;width:16px;height:16px;transition:transform .15s,box-shadow .15s}.angle-slider::-webkit-slider-thumb:active{transform:scale(1.2);box-shadow:0 0 0 4px #0f0e0c1a}.angle-display{min-width:48px}.angle-val{color:var(--black);font-size:20px;font-weight:700}.fire-btn{justify-content:center;width:100%;padding:14px;font-size:14px;font-weight:600}.fire-result{border-radius:var(--radius-sm);word-break:break-word;border-radius:0;align-items:center;gap:6px;margin-top:4px;padding:10px 14px;font-size:13px;display:inline-flex}.fire-result.success{color:var(--green);background:#2d7a4f12;border:1px solid #2d7a4f33}.fire-result.error{color:var(--red);background:#b91c1c12;border:1px solid #b91c1c33}.hw-estop-bar{background:#b91c1c0d;border:1px solid #b91c1c2e;border-radius:0;align-items:center;gap:14px;padding:14px 20px;display:flex}.hw-estop-btn{background:var(--red,#b91c1c);color:#fff;border:1px solid var(--red,#b91c1c);letter-spacing:.04em;cursor:pointer;white-space:nowrap;border-radius:0;align-items:center;gap:8px;padding:10px 20px;font-size:13px;font-weight:700;transition:opacity .15s,transform .1s;display:flex}.hw-estop-btn:hover:not(:disabled){opacity:.88;transform:scale(.99)}.hw-estop-btn:disabled{opacity:.5;cursor:not-allowed}.hw-estop-hint{color:var(--gray-500);font-size:12px}.hw-estop-spinner{border-color:#fff #ffffff4d #ffffff4d!important}.schedule-delete svg,.hw-btn svg,.hw-estop-btn svg,.hw-ping-btn svg,.fire-result svg{flex-shrink:0;width:1em;height:1em}.joystick-pad{background:var(--gray-50);border:2px solid var(--gray-200);cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:50%;flex-shrink:0;position:relative}.joystick-line{background:var(--gray-200);position:absolute}.joystick-h{height:1px;top:50%;left:10%;right:10%;transform:translateY(-50%)}.joystick-v{width:1px;top:10%;bottom:10%;left:50%;transform:translate(-50%)}.joystick-ring{border:1px dashed var(--gray-200);pointer-events:none;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.joystick-ring--inner{width:50%;height:50%}.joystick-handle{background:var(--black);pointer-events:none;border-radius:50%;width:28px;height:28px;transition:transform 40ms;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 8px #00000040}.joystick-pad:active .joystick-handle{box-shadow:0 0 0 6px #0f0e0c1f}.hw-aim-header{justify-content:space-between;align-items:center;display:flex}.hw-live-toggle{cursor:pointer;align-items:center;gap:6px;display:flex}.hw-live-toggle input{display:none}.hw-live-pill{letter-spacing:.06em;background:var(--gray-100);color:var(--gray-400);border:1px solid var(--gray-200);border-radius:0;padding:4px 12px;font-size:12px;font-weight:600;transition:background .15s,color .15s}.hw-live-pill.active{background:var(--black);color:var(--white);border-color:var(--black)}.hw-live-note{color:var(--green)!important}.hw-aim-body{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.hw-aim-readout{flex-direction:column;flex:1;gap:6px;min-width:120px;display:flex}.hw-readout-row{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.hw-readout-label{color:var(--gray-500);text-transform:uppercase;letter-spacing:.06em;font-size:12px}.hw-readout-val{color:var(--black);font-size:15px;font-weight:600}.hw-fire-row{align-items:flex-end;gap:12px;display:flex}.hw-fire-dur{flex:1}.hw-fire-btn{white-space:nowrap;align-self:flex-end;background:var(--brown,#7c4f2a)!important}.hw-speed-presets{gap:4px;margin-bottom:6px;display:flex}.hw-speed-preset{border:1px solid var(--gray-200);background:var(--white);color:var(--gray-600);cursor:pointer;border-radius:0;padding:5px 14px;font-size:12px;font-weight:500;transition:all .12s}.hw-speed-preset:hover{border-color:var(--gray-400);color:var(--black)}.hw-speed-preset.active{background:var(--black);color:var(--white);border-color:var(--black)}.hw-servo-presets{gap:8px;margin-bottom:12px;display:flex}.hw-servo-preset{border:1px solid var(--gray-200);background:var(--white);cursor:pointer;border-radius:0;flex-direction:column;flex:1;align-items:center;gap:2px;padding:8px 10px;transition:all .12s;display:flex}.hw-servo-preset:hover:not(:disabled){border-color:var(--gray-400);background:var(--gray-50)}.hw-servo-preset.active{background:var(--black);border-color:var(--black)}.hw-servo-preset-label{color:var(--gray-600);font-size:12px;font-weight:600}.hw-servo-preset.active .hw-servo-preset-label{color:var(--white)}.hw-servo-preset-deg{color:var(--black);font-size:13px;font-weight:700}.hw-servo-preset.active .hw-servo-preset-deg{color:var(--white)}.prediction-page{background:var(--white);flex-direction:column;min-height:calc(100vh - 48px);display:flex}.prediction-topbar{border-bottom:1px solid var(--gray-100);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:18px;padding:16px 20px;display:flex}.prediction-kicker{letter-spacing:.14em;text-transform:uppercase;color:#9c6b12d9;margin-bottom:6px;font-size:11px;font-weight:700;display:inline-block}.prediction-title{letter-spacing:-.03em;color:var(--black);margin:0;font-size:clamp(1.25rem,2vw,1.65rem);font-weight:700;line-height:1.15}.prediction-subtitle{max-width:42rem;color:var(--gray-600);margin:6px 0 0;font-size:13px;line-height:1.6}.prediction-data-status{color:var(--gray-500);margin:8px 0 0;font-size:11px;font-weight:600}.prediction-data-status.error{color:var(--red)}.prediction-cluster-field{flex-direction:column;gap:6px;min-width:min(22rem,100%);display:flex}.prediction-select-wrap{position:relative}.prediction-select-wrap:before{content:"";background:var(--gray-200);pointer-events:none;width:1px;height:1.2rem;position:absolute;top:50%;right:2.1rem;transform:translateY(-50%)}.prediction-select-wrap:after{content:"";border-right:2px solid var(--brown);border-bottom:2px solid var(--brown);pointer-events:none;width:.52rem;height:.52rem;position:absolute;top:50%;right:.92rem;transform:translateY(-62%)rotate(45deg)}.prediction-select-label{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);font-size:10px;font-weight:700}.prediction-cluster-select{appearance:none;border:1px solid var(--gray-200);background:var(--white);width:100%;min-width:15rem;color:var(--black);letter-spacing:.06em;text-transform:uppercase;transition:border-color .18s var(--ease-out), background .18s var(--ease-out);background-image:none;padding:10px 2.8rem 10px 12px;font-size:12px;font-weight:700}.prediction-cluster-select:hover{border-color:var(--gray-300)}.prediction-cluster-select:focus{border-color:var(--brown);background:#fffdfa}.prediction-content{flex:1;grid-template-columns:minmax(0,1fr) minmax(18rem,21.5rem);min-height:0;display:grid}.prediction-chart-panel{border-right:1px solid var(--gray-100);background:linear-gradient(180deg, #fffcf4 0%, var(--white) 20%);flex-direction:column;min-width:0;min-height:0;display:flex}.prediction-chart-head{border-bottom:1px solid var(--gray-100);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;min-height:48px;padding:12px 18px;display:flex}.prediction-chart-meta{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.prediction-chart-meta-item{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-500);border:1px solid var(--gray-200);background:var(--white);padding:4px 7px;font-size:10px;font-weight:700}.prediction-chart-controls{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:inline-flex}.prediction-node-toggles{flex-wrap:wrap;justify-content:flex-start;align-items:flex-start;gap:6px;width:100%;display:flex}.prediction-node-toggle-panel{border-top:1px dashed var(--gray-100);margin-top:12px;padding:8px 12px 12px}.prediction-node-toggle{white-space:nowrap;border:1px solid var(--gray-200);background:var(--white);width:auto;min-height:24px;color:var(--gray-600);letter-spacing:.03em;text-transform:uppercase;transition:border-color .18s var(--ease-out), background .18s var(--ease-out), color .18s var(--ease-out);flex:none;justify-content:flex-start;align-items:center;gap:5px;padding:4px 9px;font-size:9px;font-weight:700;display:inline-flex}.prediction-node-toggle:hover{border-color:var(--gray-300);color:var(--black)}.prediction-node-toggle.active{border-color:var(--brown-border);background:var(--brown-subtle);color:var(--brown)}.prediction-node-toggle.inactive{opacity:.55}.prediction-node-toggle-swatch{border-radius:50%;flex-shrink:0;width:7px;height:7px}.prediction-node-toggle-label{font-size:9px;line-height:1}.prediction-view-toggle{border:1px solid var(--gray-200);background:var(--white);align-items:center;display:inline-flex}.prediction-view-btn{border:none;border-right:1px solid var(--gray-200);color:var(--gray-600);letter-spacing:.1em;text-transform:uppercase;background:0 0;padding:8px 10px;font-size:10px;font-weight:700}.prediction-view-btn:last-child{border-right:none}.prediction-view-btn:hover{color:var(--black);background:#faf8f3}.prediction-view-btn.active{background:var(--brown-subtle);color:var(--brown)}.prediction-legend{flex-wrap:wrap;align-items:center;gap:14px;display:inline-flex}.prediction-legend-item{color:var(--gray-600);letter-spacing:.02em;align-items:center;gap:6px;font-size:11px;font-weight:600;display:inline-flex}.prediction-legend-line{border-top-style:solid;border-top-width:2px;width:22px;height:0}.prediction-legend-line.observed{border-top-color:var(--black)}.prediction-legend-line.predicted{border-top-color:var(--brown);border-top-style:dashed}.prediction-legend-line.actual{border-top-style:dotted;border-top-color:#2d7a4f}.prediction-chart-wrap{flex:1;min-height:0;padding:8px 12px 6px}.prediction-empty-state{border:1px solid var(--gray-100);background:var(--white);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;height:min(62vh,520px);min-height:320px;padding:20px;display:flex}.prediction-empty-state-title{color:var(--black);margin:0;font-size:14px;font-weight:700}.prediction-empty-state-body{color:var(--gray-500);max-width:34rem;margin:0;font-size:12px;line-height:1.5}.prediction-chart-canvas{cursor:crosshair;width:100%;height:min(62vh,520px);min-height:320px}.prediction-chart-hint{letter-spacing:.04em;color:var(--gray-500);margin:8px 0 0;font-size:11px;font-weight:600}.prediction-chart-timeline{flex-direction:column;gap:8px;height:min(62vh,520px);min-height:320px;display:flex}.prediction-chart-timeline-title{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);margin:2px 2px 0;font-size:11px;font-weight:700}.prediction-side-panel{background:var(--white);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden auto}.prediction-side-head{border-bottom:1px solid var(--gray-100);justify-content:space-between;align-items:center;gap:8px;min-height:48px;padding:12px 16px;display:flex}.prediction-side-kicker{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);font-size:11px;font-weight:700}.prediction-point-tag{letter-spacing:.1em;text-transform:uppercase;border:1px solid #0000;align-items:center;padding:4px 7px;font-size:10px;font-weight:700;display:inline-flex}.prediction-point-tag.observed{color:var(--black);background:#0f0e0c0f;border-color:#0f0e0c1a}.prediction-point-tag.predicted{background:var(--brown-subtle);color:var(--brown);border-color:var(--brown-border)}.prediction-side-main{border-bottom:1px solid var(--gray-100);padding:14px 16px}.prediction-side-time{color:var(--gray-500);margin:0;font-size:12px;font-weight:600}.prediction-side-vwc{letter-spacing:-.04em;color:var(--black);margin:10px 0 0;font-size:clamp(2rem,4.2vw,2.6rem);font-weight:700;line-height:1}.prediction-side-vwc-label{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-400);margin:7px 0 0;font-size:11px;font-weight:700}.prediction-side-delta{margin:12px 0 0;font-size:12px;font-weight:600}.prediction-side-delta.up{color:var(--brown)}.prediction-side-delta.down{color:var(--green)}.prediction-side-delta.neutral{color:var(--gray-500)}.prediction-side-section{border-bottom:1px solid var(--gray-100);padding:12px 16px 14px}.prediction-side-section--cards{border-bottom:none}.prediction-side-section-title{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);margin:0 0 10px;font-size:11px;font-weight:700}.prediction-side-row{justify-content:space-between;align-items:center;gap:12px;padding:7px 0;display:flex}.prediction-side-row-label{letter-spacing:.05em;text-transform:uppercase;color:var(--gray-500);font-size:11px;font-weight:600}.prediction-side-row-value{color:var(--black);text-align:right;font-size:12px;font-weight:600}.prediction-node-cards{flex-direction:column;gap:10px;display:flex}.prediction-node-card{border:1px solid var(--gray-100);background:var(--white);flex-direction:column;gap:8px;padding:10px;display:flex}.prediction-node-card.muted{opacity:.46}.prediction-node-card-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.prediction-node-card-title-wrap{align-items:center;gap:7px;display:inline-flex}.prediction-node-card-dot{border-radius:50%;flex-shrink:0;width:9px;height:9px}.prediction-node-card-title{letter-spacing:.08em;text-transform:uppercase;color:var(--black);font-size:11px;font-weight:700}.prediction-node-card-vwc{letter-spacing:-.03em;color:var(--black);margin:0;font-size:24px;font-weight:700;line-height:1}.prediction-node-card-percent{letter-spacing:-.03em;color:var(--black);text-align:left;margin:0;font-size:25px;font-weight:700;line-height:1}.prediction-node-card-percent-subtext{letter-spacing:.06em;text-transform:uppercase;color:var(--gray-500);margin:2px 0 0;font-size:10px;font-weight:600}.prediction-node-card-metric-label{letter-spacing:.1em;text-transform:uppercase;color:var(--gray-500);margin:0;font-size:10px;font-weight:700}.prediction-node-card-delta{letter-spacing:.04em;margin:0;font-size:11px;font-weight:700}.prediction-node-card-delta.up{color:var(--brown)}.prediction-node-card-delta.down{color:var(--green)}.prediction-node-card-grid{grid-template-columns:auto 1fr;align-items:center;gap:4px 10px;display:grid}.prediction-node-card-label{letter-spacing:.08em;text-transform:uppercase;color:var(--gray-500);font-size:10px;font-weight:700}.prediction-node-card-value{color:var(--black);text-align:right;font-size:11px;font-weight:600}.prediction-online{letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.prediction-online.online{color:var(--green)}.prediction-online.offline{color:var(--red)}.prediction-timeline-list{flex-direction:column;gap:0;display:flex}.prediction-timeline-list--chart{border:1px solid var(--gray-100);background:var(--white);flex:1;min-height:0;overflow-y:auto}.prediction-timeline-list--chart .prediction-timeline-row{border-bottom:1px solid var(--gray-100)}.prediction-timeline-list--chart .prediction-timeline-row:last-child{border-bottom:none}.prediction-timeline-row{background:var(--white);width:100%;color:var(--gray-600);text-align:left;border:1px solid #0000;border-left-width:2px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:8px 9px;display:grid}.prediction-timeline-row:hover{border-color:var(--gray-100);border-left-color:var(--gray-300);background:#faf9f6}.prediction-timeline-row.active{border-color:var(--brown-border);border-left-color:var(--brown);background:var(--brown-subtle)}.prediction-timeline-time{letter-spacing:.06em;text-transform:uppercase;color:var(--gray-500);text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:700;overflow:hidden}.prediction-timeline-kind{letter-spacing:.1em;text-transform:uppercase;border:1px solid #0000;padding:3px 6px;font-size:10px;font-weight:700}.prediction-timeline-kind.observed{color:var(--black);background:#0f0e0c0f;border-color:#0f0e0c1a}.prediction-timeline-kind.predicted{color:var(--brown);background:var(--brown-subtle);border-color:var(--brown-border)}.prediction-timeline-value{color:var(--black);font-size:11px;font-weight:700}@media (width<=1120px){.prediction-content{grid-template-columns:1fr}.prediction-chart-panel{border-right:none;border-bottom:1px solid var(--gray-100)}.prediction-chart-canvas,.prediction-chart-timeline{height:clamp(300px,52vh,480px)}}@media (width<=720px){.prediction-topbar{padding:14px 14px 12px}.prediction-chart-head{padding:10px 12px}.prediction-chart-wrap{padding:8px}.prediction-side-head,.prediction-side-main,.prediction-side-section{padding-left:12px;padding-right:12px}.prediction-cluster-field{min-width:100%}.prediction-cluster-select{min-width:0}.prediction-view-btn{padding:7px 8px}.prediction-node-toggle-panel{padding:8px 8px 10px}.prediction-node-toggles{gap:6px}}.irr-page{background:var(--white);grid-template-columns:1fr minmax(320px,360px);height:100%;display:grid;overflow:hidden}.irr-canvas{border-right:1px solid var(--gray-100);background:linear-gradient(135deg,#faf9f7 0%,#f0ede8 100%);width:100%;height:100%;position:relative;overflow:hidden}.irr-empty{height:100%;color:var(--gray-400);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:14px;display:flex}.irr-empty span{color:var(--gray-300);font-size:12px}.irr-panel{background:var(--white);flex-direction:column;height:100%;display:flex;overflow-y:auto}.irr-section{border-bottom:1px solid var(--gray-100);padding:16px}.irr-section.irr-section--tips{background:var(--gray-50);border-bottom:none;flex:1;margin-top:auto}.irr-heading{color:var(--black);letter-spacing:.01em;margin:0 0 14px;font-size:15px;font-weight:600}.irr-card{border:1px solid var(--gray-100);background:var(--white);border-radius:6px;margin-bottom:10px;padding:12px;font-size:13px}.irr-card.irr-card--error{background:#fff5f5;border-color:#fdd}.irr-card.irr-card--error p{color:#c2185b;margin:0 0 4px;font-size:13px}.irr-card-title{text-transform:uppercase;letter-spacing:.07em;color:var(--gray-400);margin-bottom:10px;font-size:11px;font-weight:700}.irr-row{border-bottom:1px solid var(--gray-50);justify-content:space-between;align-items:center;padding:6px 0;display:flex}.irr-row:last-child{border-bottom:none}.irr-label{text-transform:uppercase;letter-spacing:.05em;color:var(--gray-400);font-size:11px;font-weight:600}.irr-value{color:var(--black);font-size:13px;font-weight:500}.irr-value.irr-mono{font-family:var(--font-mono);color:var(--gray-600);font-size:11px}.irr-moisture-low{color:#e2a030;font-weight:600}.irr-moisture-med{color:#7ec88a;font-weight:600}.irr-moisture-high{color:#2db876;font-weight:600}.irr-hint{color:var(--gray-400);margin:0;padding:4px 0;font-size:12px}.irr-angles{grid-template-columns:1fr 1fr 1fr;gap:6px;margin-bottom:14px;display:grid}.irr-angle-item{background:var(--gray-50);border-radius:5px;flex-direction:column;align-items:center;gap:3px;padding:10px 6px;display:flex}.irr-angle-label{text-transform:uppercase;letter-spacing:.08em;color:var(--gray-400);font-size:10px;font-weight:700}.irr-angle-value{font-size:22px;font-weight:700;font-family:var(--font-mono);color:var(--brown);line-height:1}.irr-angle-sub{font-size:10px;font-family:var(--font-mono);color:var(--gray-400)}.irr-slider-wrap{background:var(--gray-50);border-radius:5px;margin-bottom:14px;padding:10px}.irr-slider{width:100%;margin:8px 0 4px}.irr-slider-range{color:var(--gray-400);font-size:10px;font-family:var(--font-mono);justify-content:space-between;display:flex}.irr-btn-fire{color:#fff;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;background:linear-gradient(135deg,#c4972a 0%,#a87c20 100%);border:none;border-radius:6px;justify-content:center;align-items:center;gap:8px;width:100%;margin-bottom:10px;padding:11px 16px;font-size:13px;font-weight:700;transition:background .15s,transform .1s,box-shadow .15s;display:flex}.irr-btn-fire:hover:not(:disabled){background:linear-gradient(135deg,#d4a73a 0%,#b88c30 100%);transform:translateY(-1px);box-shadow:0 4px 12px #c4972a59}.irr-btn-fire:active:not(:disabled){transform:translateY(0)}.irr-btn-fire:disabled{opacity:.45;cursor:not-allowed}.irr-spinner{border:2px solid #ffffff59;border-top-color:#fff;border-radius:50%;width:12px;height:12px;animation:.7s linear infinite irr-spin;display:inline-block}@keyframes irr-spin{to{transform:rotate(360deg)}}.irr-result{border-radius:5px;align-items:center;gap:8px;padding:9px 12px;font-size:12px;font-weight:500;animation:.25s irr-slide-in;display:flex}.irr-result.irr-result--ok{color:#2e7d32;background:#e8f5e9;border:1px solid #c8e6c9}.irr-result.irr-result--err{color:#c62828;background:#ffebee;border:1px solid #ffcdd2}.irr-result span:first-child{flex-shrink:0;font-size:14px}.irr-result-time{opacity:.65;font-size:10px;font-family:var(--font-mono);margin-left:auto}@keyframes irr-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.irr-history{flex-direction:column;gap:5px;max-height:130px;display:flex;overflow-y:auto}.irr-history-row{background:var(--gray-50);color:var(--gray-500);border-radius:4px;grid-template-columns:1fr 1fr 1fr 1fr;gap:4px;padding:7px 8px;font-size:11px;display:grid}.irr-mono{font-family:var(--font-mono)}.irr-h-pan{color:#c4972a;font-weight:600}.irr-h-tilt{color:#7ec88a;font-weight:600}.irr-h-dist{color:var(--gray-500)}.irr-h-dur{color:var(--gray-400)}.irr-tips-title{text-transform:uppercase;letter-spacing:.08em;color:var(--gray-400);margin-bottom:12px;font-size:11px;font-weight:700}.irr-tips{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.irr-tips li{color:var(--gray-500);padding-left:14px;font-size:12px;line-height:1.5;position:relative}.irr-tips li:before{content:"◆";color:var(--brown);font-size:7px;position:absolute;top:4px;left:0}.irr-card--mode{padding-bottom:14px}.irr-mode-toggle{grid-template-columns:1fr 1fr 1fr;gap:6px;display:grid}.irr-mode-btn{border:1.5px solid var(--gray-100);background:var(--white);color:var(--gray-500);cursor:pointer;text-align:center;white-space:nowrap;border-radius:6px;padding:9px 6px;font-size:11px;font-weight:600;transition:all .15s}.irr-mode-btn:hover:not(:disabled){border-color:var(--brown);color:var(--brown)}.irr-mode-btn.active{background:var(--brown);border-color:var(--brown);color:#fff}.irr-mode-btn:disabled{opacity:.4;cursor:not-allowed}.irr-arc-overlay{color:#fff;letter-spacing:.02em;pointer-events:none;z-index:10;background:#ff9800eb;border-radius:20px;align-items:center;gap:8px;padding:8px 18px;font-size:12px;font-weight:600;animation:.35s irr-arc-overlay-in;display:flex;position:absolute;top:12px;left:50%;transform:translate(-50%);box-shadow:0 3px 14px #ff980059}.irr-arc-overlay-icon{font-size:14px}@keyframes irr-arc-overlay-in{0%{opacity:0;transform:translate(-50%)translateY(-8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.irr-arc-prompt{text-align:center;flex-direction:column;align-items:center;gap:6px;padding:10px 4px;display:flex}.irr-arc-prompt p{color:var(--gray-500);margin:0;font-size:12px;line-height:1.5}.irr-arc-prompt-icon{margin-bottom:4px;font-size:28px;line-height:1}.irr-arc-val{color:#ff9800!important}.irr-btn-clear{background:var(--gray-50);border:1px solid var(--gray-200,#e0e0e0);width:100%;color:var(--gray-500);cursor:pointer;border-radius:5px;margin-top:6px;padding:8px 12px;font-size:12px;font-weight:600;transition:all .15s}.irr-btn-clear:hover{color:#c62828;background:#ffebee;border-color:#ef9a9a}.irr-sweep-fill--arc{background:linear-gradient(90deg,#ff9800,#e65100)}.irr-sweep-summary{grid-template-columns:1fr 1fr 1fr;gap:6px;margin:12px 0 4px;display:grid}.irr-sweep-stat{background:var(--gray-50);border-radius:5px;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;display:flex}.irr-sweep-val{font-size:16px;font-weight:700;font-family:var(--font-mono);color:#4fc3f7;line-height:1}.irr-sweep-lbl{text-transform:uppercase;letter-spacing:.06em;color:var(--gray-400);font-size:10px;font-weight:600}.irr-label-sub{color:var(--gray-400);text-transform:none;letter-spacing:0;margin-left:4px;font-weight:400}.irr-sweep-progress{align-items:center;gap:10px;margin-top:12px;display:flex}.irr-sweep-track{background:var(--gray-100);border-radius:3px;flex:1;height:6px;overflow:hidden}.irr-sweep-fill{background:linear-gradient(90deg,#4fc3f7,#0288d1);border-radius:3px;height:100%;transition:width .4s}.irr-sweep-counter{font-size:11px;font-family:var(--font-mono);color:var(--gray-500);white-space:nowrap;flex-shrink:0}.irr-btn-abort{color:#fff;letter-spacing:.05em;text-transform:uppercase;cursor:pointer;background:linear-gradient(135deg,#ef5350 0%,#c62828 100%);border:none;border-radius:6px;justify-content:center;align-items:center;gap:8px;width:100%;margin-bottom:10px;padding:11px 16px;font-size:13px;font-weight:700;transition:background .15s,transform .1s;animation:1.2s ease-in-out infinite irr-pulse-red;display:flex}.irr-btn-abort:hover{background:linear-gradient(135deg,#ff7043 0%,#d32f2f 100%);transform:translateY(-1px)}@keyframes irr-pulse-red{0%,to{box-shadow:0 0 #ef535066}50%{box-shadow:0 0 0 6px #ef535000}}.irr-h-mode{font-size:13px}@media (width<=768px){.irr-page{grid-template-rows:1fr auto;grid-template-columns:1fr}.irr-panel{border-top:1px solid var(--gray-100);max-height:45vh}}:root{--white:#fff;--off-white:#f8f7f4;--gray-50:#f2f0ec;--gray-100:#e8e4de;--gray-200:#d0cbc2;--gray-300:#b8b3ab;--gray-400:#9e9991;--gray-500:#827b73;--gray-600:#6b6560;--gray-800:#2e2b27;--black:#0f0e0c;--gray-mid:#827b73;--brown:#8b6914;--brown-light:#c4972a;--brown-dim:#5c4510;--brown-subtle:#8b691414;--brown-border:#8b691433;--green:#2d7a4f;--red:#b91c1c;--orange:#c2410c;--font-sans:"Onest", system-ui, sans-serif;--font-mono:"Space Mono", monospace;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--shadow-card:0 1px 3px #0f0e0c0f, 0 0 0 1px #0f0e0c0f;--shadow-lift:0 4px 24px #0f0e0c1a, 0 0 0 1px #0f0e0c0f;--shadow-brown:0 0 20px #8b691426;--ease-out:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--white);max-width:100%;height:100%;color:var(--black);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5}html{overflow-x:hidden}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input,textarea,select{color:inherit;background:0 0;border:none;outline:none;font-family:inherit}select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239e9991' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;padding-right:30px}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--gray-200);border-radius:100px}::-webkit-scrollbar-thumb:hover{background:var(--brown)}.mono{font-family:var(--font-mono)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.flex{display:flex}.flex-center{justify-content:center;align-items:center;display:flex}.flex-col{flex-direction:column;display:flex}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.card{background:var(--white);border:1px solid var(--gray-100);box-shadow:none;border-radius:0}.btn-primary{background:var(--black);color:var(--white);border:1px solid var(--black);letter-spacing:.01em;transition:background .18s var(--ease-out), color .18s var(--ease-out), border-color .18s var(--ease-out);border-radius:0;align-items:center;gap:7px;padding:9px 18px;font-size:13px;font-weight:600;display:inline-flex}.btn-primary:hover{background:#1a1815;border-color:#1a1815}.btn-primary:active{background:#0f0e0c;border-color:#0f0e0c}.btn-ghost{color:var(--gray-600);border:1px solid var(--gray-200);background:0 0;border-radius:0;align-items:center;gap:7px;padding:8px 16px;font-size:13px;font-weight:500;transition:border-color .18s,color .18s,background .18s;display:inline-flex}.btn-ghost:hover{border-color:var(--gray-800);color:var(--black);background:var(--gray-50)}.badge{letter-spacing:.06em;text-transform:uppercase;border-radius:100px;align-items:center;gap:5px;padding:3px 10px;font-size:11px;font-weight:500;display:inline-flex}.badge-online{color:var(--green);background:#2d7a4f14;border:1px solid #2d7a4f33}.badge-offline{color:var(--red);background:#b91c1c12;border:1px solid #b91c1c26}.badge-warn{color:var(--orange);background:#c2410c12;border:1px solid #c2410c26}.dot{border-radius:50%;flex-shrink:0;width:7px;height:7px;display:inline-block}.dot-green{background:var(--green)}.dot-red{background:var(--red)}.dot-brown{background:var(--brown)}.input{background:var(--white);border:1px solid var(--gray-200);width:100%;color:var(--black);border-radius:0;padding:9px 12px;font-size:13px;transition:border-color .18s,background .18s}.input:focus{border-color:var(--black);background:#fffdfa}.input::placeholder{color:var(--gray-400)}.label{color:var(--gray-600);letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;font-size:12px;font-weight:500;display:block}.section-title{letter-spacing:.12em;text-transform:uppercase;color:var(--gray-400);font-size:11px;font-weight:600}.divider{background:var(--gray-100);height:1px;margin:16px 0}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid var(--gray-100);border-top-color:var(--black);border-radius:50%;width:18px;height:18px;animation:.6s linear infinite spin}@keyframes glow-pulse{0%,to{opacity:1}50%{opacity:.35}}.glow-pulse{animation:2.2s ease-in-out infinite glow-pulse}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .35s var(--ease-out) both}
