:root{color-scheme:dark;--bg: #0b0e13;--bg-soft: #0f141b;--panel: #131a23;--panel-2: #161e28;--card: #151c25;--card-hover: #1a2330;--line: #253140;--line-soft: #1d2632;--text: #e8eef6;--text-dim: #aab8c8;--muted: #7f8d9e;--accent: #5b9dff;--accent-strong: #2f74e0;--ok: #3ddc97;--ok-soft: rgba(61, 220, 151, .12);--denied: #ff6b6b;--denied-soft: rgba(255, 107, 107, .12);--error: #ffb020;--error-soft: rgba(255, 176, 32, .12);--unknown: #9aa8b8;--unknown-soft: rgba(154, 168, 184, .12);--radius: 14px;--radius-sm: 10px;--shadow: 0 14px 40px rgba(0, 0, 0, .38);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}*{box-sizing:border-box}html,body{margin:0;padding:0}body{min-height:100vh;background:radial-gradient(900px 500px at 12% -10%,rgba(60,120,220,.16),transparent 60%),radial-gradient(700px 420px at 100% 0%,rgba(45,200,150,.07),transparent 55%),var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased}button,input,select{font:inherit;color:inherit}a{color:var(--accent)}h1,h2,h3,p{margin:0}.app{min-height:100vh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:30;background:#0b0e13d6;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line-soft);padding-top:env(safe-area-inset-top)}.topbar-inner{max-width:1280px;margin:0 auto;padding:14px 24px 10px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:12px;min-width:0}.brand-mark{width:42px;height:42px;flex:none;border-radius:12px;display:grid;place-items:center;color:#d8e9ff;background:linear-gradient(150deg,#2f6fe0,#1b3f80);border:1px solid rgba(120,175,255,.35);box-shadow:0 6px 18px #235abe59}.brand-text h1{font-size:18px;font-weight:650;letter-spacing:.2px;white-space:nowrap}.brand-text p{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-meta{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:8px;padding:7px 11px;border-radius:999px;border:1px solid var(--line);background:var(--panel);font-size:12.5px;color:var(--text-dim);white-space:nowrap}.chip .dot{width:8px;height:8px;border-radius:50%;background:var(--unknown);box-shadow:0 0 0 3px var(--unknown-soft)}.chip.ok{color:#b7f5d9;border-color:#3ddc974d;background:var(--ok-soft)}.chip.ok .dot{background:var(--ok);box-shadow:0 0 0 3px #3ddc972e}.chip.bad{color:#ffc4c4;border-color:#ff6b6b52;background:var(--denied-soft)}.chip.bad .dot{background:var(--denied);box-shadow:0 0 0 3px #ff6b6b29}.chip.muted{color:var(--muted)}.chip.user{padding:4px 12px 4px 4px;color:var(--text)}.avatar{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:11.5px;font-weight:700;color:#0a1220;background:linear-gradient(145deg,#9cc5ff,#5b9dff)}.user-name{max-width:160px;overflow:hidden;text-overflow:ellipsis}.tabs{max-width:1280px;margin:0 auto;padding:0 24px 10px;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:10px;border:1px solid transparent;background:transparent;color:var(--text-dim);font-size:13.5px;font-weight:550;cursor:pointer;white-space:nowrap;transition:background .15s ease,color .15s ease,border-color .15s ease}.tab:hover{color:var(--text);background:#ffffff0a}.tab.active{color:#eaf3ff;background:#5b9dff24;border-color:#5b9dff47}.main{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:18px 24px 32px}.view{display:flex;flex-direction:column;gap:14px;animation:fade-in .2s ease}.view-meta{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;margin-top:-4px;padding-left:2px}.banner{width:calc(100% - 48px);max-width:1232px;margin:12px auto 0;display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:12px;border:1px solid rgba(255,107,107,.35);background:linear-gradient(90deg,#ff6b6b29,#ff6b6b14);color:#ffd4d4;font-size:13.5px}.banner>span{flex:1}.banner-close,.toast-close{display:grid;place-items:center;width:26px;height:26px;border:0;border-radius:8px;background:transparent;color:inherit;opacity:.75;cursor:pointer}.banner-close:hover,.toast-close:hover{opacity:1;background:#ffffff14}.inline-warning{display:flex;align-items:flex-start;gap:10px;padding:11px 14px;border-radius:12px;border:1px solid rgba(255,176,32,.32);background:var(--error-soft);color:#ffdca8;font-size:13px}.inline-warning svg{flex:none;margin-top:1px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.toolbar-right{margin-left:auto;display:flex;align-items:center;gap:10px}.toolbar-title{display:flex;align-items:center;gap:10px;color:var(--text-dim)}.toolbar-title strong{display:block;color:var(--text);font-size:14px}.toolbar-title span{display:block;color:var(--muted);font-size:12px}.search{position:relative;flex:1 1 300px;min-width:220px;display:flex;align-items:center}.search svg{position:absolute;left:12px;color:var(--muted);pointer-events:none}.search input{width:100%;padding:10px 12px 10px 38px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--panel);color:var(--text);outline:none;transition:border-color .15s ease,box-shadow .15s ease}.search input::placeholder{color:var(--muted)}.search input:focus{border-color:#5b9dff99;box-shadow:0 0 0 3px #5b9dff24}.toggle{display:inline-flex;align-items:center;gap:9px;font-size:13px;color:var(--text-dim);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.toggle input{position:absolute;opacity:0;pointer-events:none}.toggle-track{width:38px;height:22px;border-radius:999px;background:#232e3c;border:1px solid var(--line);padding:2px;transition:background .18s ease,border-color .18s ease}.toggle-thumb{display:block;width:16px;height:16px;border-radius:50%;background:#9aa8b8;transition:transform .18s ease,background .18s ease}.toggle input:checked+.toggle-track{background:#5b9dff52;border-color:#5b9dff99}.toggle input:checked+.toggle-track .toggle-thumb{transform:translate(16px);background:#dbeaff}.toggle input:focus-visible+.toggle-track{outline:2px solid var(--accent);outline-offset:2px}.counter{color:var(--muted);font-size:12.5px;white-space:nowrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 13px;border-radius:var(--radius-sm);border:1px solid var(--line);background:#1a2330;color:var(--text);font-size:13px;font-weight:550;cursor:pointer;white-space:nowrap;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .08s ease}.btn:hover:not(:disabled){background:#212c3b;border-color:#33445a}.btn:active:not(:disabled){transform:translateY(1px)}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:linear-gradient(180deg,#3c82ef,#2a66cf);border-color:#3f7fe0;color:#fff}.btn.primary:hover:not(:disabled){background:linear-gradient(180deg,#4a8cf5,#2f74e0)}.btn.success{background:#3ddc971a;border-color:#3ddc9752;color:#a9f2d2}.btn.success:hover:not(:disabled){background:#3ddc972e;border-color:#3ddc9780}.btn.sm{padding:7px 10px;font-size:12.5px}.btn.full{width:100%}.btn.grow{flex:1}.btn.icon-btn{width:38px;height:38px;padding:0;flex:none}.btn.subtle{background:transparent;border-color:transparent;color:var(--muted)}.btn.subtle:hover:not(:disabled){background:#ffffff0f;color:var(--text);border-color:transparent}.btn.dashed{border-style:dashed;background:transparent;color:var(--text-dim)}.btn.dashed:hover:not(:disabled){border-color:var(--accent);color:var(--accent);background:#5b9dff12}.badge{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:999px;font-size:11.5px;font-weight:650;letter-spacing:.2px;border:1px solid transparent;white-space:nowrap}.badge.ok{color:#8af0c2;background:var(--ok-soft);border-color:#3ddc9752}.badge.denied{color:#ffb0b0;background:var(--denied-soft);border-color:#ff6b6b57}.badge.unknown{color:#b6c2d0;background:var(--unknown-soft);border-color:#9aa8b847}.badge.error{color:#ffd391;background:var(--error-soft);border-color:#ffb02057}.host-tags{display:flex;flex-wrap:wrap;gap:6px}.tag{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:7px;font-size:11.5px;background:#ffffff0d;border:1px solid var(--line-soft);color:var(--text-dim)}.tag-manual{color:#ffc9a1;background:#ff96461a;border-color:#ff964640}.tag-schedule{color:#bcd2ff;background:#5b9dff1a;border-color:#5b9dff40}.host-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}.host-card{display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:var(--radius);border:1px solid var(--line-soft);background:linear-gradient(180deg,var(--card),#121922);box-shadow:0 4px 18px #0000002e;transition:border-color .16s ease,transform .16s ease,background .16s ease}.host-card:hover{border-color:#2d3b4d;transform:translateY(-1px);background:linear-gradient(180deg,var(--card-hover),#131b25)}.host-head{display:flex;align-items:center;gap:10px}.presence{width:34px;height:34px;flex:none;display:grid;place-items:center;border-radius:10px;border:1px solid var(--line);background:#101720;color:var(--muted)}.presence.online{color:var(--ok);border-color:#3ddc9747;background:var(--ok-soft)}.presence.offline{color:var(--muted)}.host-title{flex:1;min-width:0}.host-title h3{font-size:15px;font-weight:620;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.host-state{font-size:11.5px;color:var(--muted)}.host-state.online{color:#79e3b4}.host-state.offline{color:var(--muted)}.host-meta{display:grid;grid-template-columns:1fr 1fr;gap:9px 14px;margin:0;padding:11px 12px;border-radius:var(--radius-sm);background:#080c1280;border:1px solid var(--line-soft)}.host-meta dt{font-size:10px;letter-spacing:.7px;text-transform:uppercase;color:var(--muted);margin-bottom:1px}.host-meta dd{margin:0;font-size:12.5px;color:var(--text-dim);overflow-wrap:anywhere}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.host-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto}.host-actions>.btn{flex:1 1 0}.until-row{display:flex;align-items:stretch;gap:8px;width:100%}.until-row .time-input{flex:0 0 108px}.time-input{padding:7px 9px;border-radius:9px;border:1px solid var(--line);background:#0d131b;color:var(--text);font-size:12.5px;font-variant-numeric:tabular-nums;outline:none;min-width:0}.time-input::-webkit-calendar-picker-indicator{filter:invert(.75);cursor:pointer}.time-input:focus{border-color:#5b9dffa6;box-shadow:0 0 0 3px #5b9dff21}.time-input:disabled{opacity:.5}.schedule-head{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap;padding:16px;border-radius:var(--radius);border:1px solid var(--line-soft);background:var(--panel)}.field{display:flex;flex-direction:column;gap:6px;flex:1 1 320px;min-width:240px}.field-label{font-size:11px;letter-spacing:.7px;text-transform:uppercase;color:var(--muted)}.select{width:100%;padding:10px 34px 10px 12px;border-radius:var(--radius-sm);border:1px solid var(--line);background-color:#0d131b;color:var(--text);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%237f8d9e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;outline:none;cursor:pointer}.select:focus{border-color:#5b9dff99;box-shadow:0 0 0 3px #5b9dff24}.schedule-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dirty-flag{font-size:12px;color:var(--muted);transition:color .15s ease}.dirty-flag.visible{color:var(--error)}.hint{display:flex;gap:11px;padding:12px 14px;border-radius:12px;border:1px solid rgba(91,157,255,.26);background:#5b9dff14;color:#c6d9f5;font-size:13px}.hint svg{flex:none;margin-top:2px;color:var(--accent)}.hint em{font-style:normal;color:#eaf3ff;font-weight:600}.week{border-radius:var(--radius);border:1px solid var(--line-soft);background:var(--panel);overflow:hidden}.week-summary{display:flex;align-items:center;gap:14px;padding:12px 16px;background:#ffffff05;border-bottom:1px solid var(--line-soft);font-size:12.5px;color:var(--muted)}.warn-text{color:var(--error)}.week-row{display:grid;grid-template-columns:64px 1fr;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line-soft)}.week-row:last-child{border-bottom:0}.week-row:hover{background:#ffffff04}.week-day{display:flex;flex-direction:column;gap:2px;padding-top:4px}.week-day span{font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--text-dim)}.week-day small{font-size:11px;color:var(--muted)}.week-intervals{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.week-empty{font-size:12.5px;color:#63707f;padding:4px 2px}.interval{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;padding:5px 6px 5px 8px;border-radius:10px;border:1px solid var(--line);background:#0d131b}.interval.invalid{border-color:#ff6b6b8c;background:#ff6b6b0f}.interval .time-input{border:0;background:transparent;padding:3px 2px;font-size:12.5px}.interval .time-input:focus{box-shadow:none;background:#ffffff0d}.interval-dash{color:var(--muted);font-size:12px}.interval-error{flex-basis:100%;text-align:right;font-size:10.5px;color:#ff9d9d}.table-wrap{border-radius:var(--radius);border:1px solid var(--line-soft);background:var(--panel);overflow:hidden}.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;padding:11px 14px;font-size:10.5px;font-weight:650;letter-spacing:.8px;text-transform:uppercase;color:var(--muted);background:#ffffff06;border-bottom:1px solid var(--line-soft);white-space:nowrap}.table td{padding:11px 14px;border-bottom:1px solid var(--line-soft);color:var(--text-dim);vertical-align:top}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover{background:#ffffff05}.table .detail{max-width:340px;color:var(--muted);overflow-wrap:anywhere}.nowrap{white-space:nowrap}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:56px 20px;border-radius:var(--radius);border:1px dashed var(--line);background:#ffffff04;color:var(--muted);text-align:center}.empty-state p{font-size:14px}.spinner{display:inline-block;width:14px;height:14px;flex:none;border-radius:50%;border:2px solid rgba(255,255,255,.22);border-top-color:currentColor;animation:spin .7s linear infinite}.spinner.large{width:26px;height:26px;border-width:3px}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}.toast{position:fixed;right:20px;bottom:20px;z-index:60;display:flex;align-items:flex-start;gap:10px;max-width:min(440px,calc(100vw - 32px));padding:12px 12px 12px 14px;border-radius:12px;border:1px solid var(--line);border-left:3px solid var(--unknown);background:#182029;color:var(--text);box-shadow:var(--shadow);font-size:13.5px;animation:toast-in .22s ease}.toast.ok{border-left-color:var(--ok)}.toast.warn{border-left-color:var(--error)}.toast.err{border-left-color:var(--denied)}.toast-icon{display:grid;place-items:center;margin-top:1px;color:var(--muted)}.toast.ok .toast-icon{color:var(--ok)}.toast.warn .toast-icon{color:var(--error)}.toast.err .toast-icon{color:var(--denied)}.toast-text{flex:1;padding-top:1px}.toast-close{margin-top:-1px;color:var(--muted)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.footer{max-width:1280px;width:100%;margin:0 auto;padding:14px 24px calc(18px + env(safe-area-inset-bottom));display:flex;gap:16px;flex-wrap:wrap;justify-content:space-between;color:#64717f;font-size:11.5px;border-top:1px solid var(--line-soft)}@media (max-width: 760px){.topbar-inner{padding:12px 16px 8px;gap:10px}.tabs{padding:0 16px 8px;gap:4px}.tab{gap:6px;padding:8px 10px;font-size:13px}.brand-text p{display:none}.brand-mark{width:38px;height:38px}.main{padding:14px 16px 24px}.banner{width:calc(100% - 32px);margin-top:10px}.hide-sm{display:none}.host-grid{grid-template-columns:1fr}.toolbar-right{width:100%;justify-content:space-between}.schedule-head{align-items:stretch}.schedule-actions{justify-content:space-between}.schedule-actions .dirty-flag{flex:1 1 100%}.week-row{grid-template-columns:1fr;gap:8px;padding:12px}.week-day{flex-direction:row;align-items:baseline;gap:8px;padding-top:0}.table-wrap{overflow:visible;background:transparent;border:0}.table,.table tbody,.table tr,.table td{display:block;width:100%}.table thead{display:none}.table tr{margin-bottom:10px;border-radius:12px;border:1px solid var(--line-soft);background:var(--panel);overflow:hidden}.table td{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:8px 12px;border-bottom:1px solid var(--line-soft);text-align:right}.table td:last-child{border-bottom:0}.table td:before{content:attr(data-label);flex:none;font-size:10.5px;font-weight:650;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);text-align:left}.table .detail{max-width:none}.toast{left:16px;right:16px;bottom:calc(16px + env(safe-area-inset-bottom));max-width:none}.footer{padding:12px 16px calc(16px + env(safe-area-inset-bottom))}}@media (max-width: 420px){.user-name{display:none}.chip.user{padding:4px}.until-row .time-input{flex:0 0 104px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#060a12b8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:20px;z-index:60}.modal-card{width:min(480px,100%);background:var(--surface, #151b26);border:1px solid var(--border, #26303f);border-radius:14px;padding:22px;box-shadow:0 18px 50px #00000073}.modal-card h3{margin:0 0 10px;font-size:18px}.modal-card p{margin:0 0 18px;color:var(--text-muted, #9aa7b8);line-height:1.5}.modal-actions{display:flex;gap:10px;justify-content:flex-end}.rename-row{display:flex;align-items:center;gap:6px}.rename-input{min-width:0;flex:1;padding:4px 8px;font-size:14px;color:var(--text, #e8eef7);background:var(--surface-2, #0f1621);border:1px solid var(--border, #26303f);border-radius:6px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:6px;padding:0;color:var(--text-muted, #9aa7b8);background:transparent;border:1px solid transparent;border-radius:6px;cursor:pointer}.icon-btn:hover:not(:disabled){color:var(--text, #e8eef7);border-color:var(--border, #26303f)}.icon-btn:disabled{opacity:.45;cursor:default}.chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.chip{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;font-size:13px;color:var(--text-muted, #9aa7b8);background:var(--surface-2, #0f1621);border:1px solid var(--border, #26303f);border-radius:999px;cursor:pointer}.chip.active{color:var(--text, #e8eef7);border-color:var(--accent, #4c8dff);background:#4c8dff24}.chip-label{padding:0;color:inherit;background:none;border:none;cursor:pointer;font:inherit}.chip-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;color:inherit;background:none;border:none;border-radius:50%;cursor:pointer;opacity:.7}.chip-x:hover:not(:disabled){opacity:1;background:#ffffff1f}.member-add{display:inline-flex}.member-input{width:150px;padding:5px 10px;font-size:13px;color:var(--text, #e8eef7);background:var(--surface-2, #0f1621);border:1px dashed var(--border, #26303f);border-radius:999px}.member-input:focus{outline:none;border-style:solid;border-color:var(--accent, #4c8dff)}.group-tags{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 10px}.group-tag-wrap{display:inline-flex;align-items:center;background:var(--surface-2, #0f1621);border:1px solid var(--border, #26303f);border-radius:999px;overflow:hidden}.group-tag{padding:3px 9px;font-size:12px;color:var(--text-muted, #9aa7b8);background:none;border:none;cursor:pointer}.group-tag.active{color:var(--text, #e8eef7);background:#4c8dff29}.group-tag:disabled{opacity:.6;cursor:default}.badge.unknown-dev{color:#c8b48a;border-color:#c8b48a66;background:#c8b48a1f}.code-value{margin:6px 0 10px;font-size:38px;font-weight:600;letter-spacing:12px;text-align:center;color:#e8eef7;background:var(--surface-2, #0f1621);border:1px dashed var(--accent, #4c8dff);border-radius:12px;padding:14px 8px;-webkit-user-select:all;user-select:all}.hint-line{margin:0 0 16px;font-size:13px;color:var(--text-muted, #9aa7b8);text-align:center}
