:root{--bg: #f4f5f7;--surface: #fff;--text: #1d2330;--muted: #667085;--border: #d9dde5;--primary: #1f7a3d;--ok: #1f7a3d;--warn: #b7791f;--err: #c0392b;color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--bg: #14171d;--surface: #1c2028;--text: #e6e9ef;--muted: #9aa3b2;--border: #2d3340;--primary: #3fae66;--ok: #3fae66;--warn: #e0a83e;--err: #ef6b5b}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.shell{display:flex;flex-direction:column;height:100%}.shell__header{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:var(--surface);border-bottom:1px solid var(--border)}.shell__campus{color:var(--muted);font-size:13px}.shell__main{flex:1;overflow:auto;padding:32px 40px}.shell__status{padding:6px 20px;border-top:1px solid var(--border);background:var(--surface);font-size:12px}.home{max-width:720px}.home h1{margin:0 0 4px;font-size:24px}.muted{color:var(--muted)}.facts{margin:28px 0;background:var(--surface);border:1px solid var(--border);border-radius:6px}.facts>div{display:flex;gap:16px;padding:12px 16px;border-bottom:1px solid var(--border)}.facts>div:last-child{border-bottom:0}.facts dt{width:160px;flex-shrink:0;color:var(--muted)}.facts dd{margin:0}.status{display:inline-flex;align-items:center;gap:6px;font-weight:500}.status__dot{width:8px;height:8px;border-radius:50%;background:currentColor}.status--checking{color:var(--warn)}.status--connected{color:var(--ok)}.status--unavailable{color:var(--err)}.btn{padding:7px 14px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer}.btn:hover:not(:disabled){border-color:var(--primary)}.btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.btn:disabled{opacity:.5;cursor:default}.shell__user{display:flex;align-items:center;gap:12px}.badge{padding:2px 8px;border-radius:10px;background:var(--primary);color:#fff;font-size:11px;font-weight:600}h2{font-size:16px;margin:28px 0 12px}.card{max-width:420px;margin:24px auto;padding:28px;background:var(--surface);border:1px solid var(--border);border-radius:8px}.card h1{margin:0 0 4px;font-size:22px}.form{display:flex;flex-direction:column;gap:14px;margin-top:18px}.form label{display:flex;flex-direction:column;gap:4px;font-weight:500}.form small{font-weight:400}.form input{padding:8px 10px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font:inherit}.form input:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.btn--primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn--primary:hover:not(:disabled){filter:brightness(1.08)}.alert{margin:14px 0 0;padding:9px 12px;border-radius:5px;border:1px solid}.alert--err{color:var(--err);border-color:var(--err)}.alert--warn{color:var(--warn);border-color:var(--warn)}@media(max-width:640px){.shell__header{flex-wrap:wrap;gap:8px;padding:10px 14px}.shell__main{padding:20px 14px}.shell__status{padding:6px 14px}.facts>div{flex-direction:column;gap:2px}.facts dt{width:auto}.card{margin:12px auto;padding:20px}}:root{--on-primary: #fff;--danger: var(--err);--ok-bg: rgba(31, 122, 61, .12);--off-bg: rgba(102, 112, 133, .16);--warn-bg: rgba(183, 121, 31, .16)}@media(prefers-color-scheme:dark){:root{--ok-bg: rgba(63, 174, 102, .16);--off-bg: rgba(154, 163, 178, .16);--warn-bg: rgba(224, 168, 62, .18)}}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.admin{display:grid;grid-template-columns:200px minmax(0,1fr);gap:32px;max-width:1200px;margin:0 auto;align-items:start}.admin__nav{position:sticky;top:0;display:flex;flex-direction:column;gap:4px}.admin__link{padding:9px 12px;border-radius:5px;color:var(--text);text-decoration:none;font-weight:500}.admin__link:hover{background:var(--surface)}.admin__link:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.admin__link[aria-current=page]{background:var(--primary);color:var(--on-primary)}.admin__content{min-width:0}.admin__content h2{margin-top:32px}.page-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page-header h1{margin:0 0 4px;font-size:24px}.page-header p{margin:0}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}.stat{padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:8px}.stat__label{color:var(--muted);font-size:13px}.stat__value{font-size:32px;font-weight:600;line-height:1.2}.stat__detail{font-size:13px}.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--border);border-radius:8px}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}.table th{color:var(--muted);font-weight:500;font-size:13px;white-space:nowrap}.table tbody tr:last-child td{border-bottom:0}.table__actions{display:flex;gap:8px;flex-wrap:wrap}.pill{display:inline-block;padding:2px 9px;border-radius:10px;font-size:12px;font-weight:600}.pill--ok{background:var(--ok-bg);color:var(--ok)}.pill--off{background:var(--off-bg);color:var(--muted)}.pill--warn{background:var(--warn-bg);color:var(--warn)}.btn--small{padding:4px 10px;font-size:13px}.btn--danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn--danger:hover:not(:disabled){filter:brightness(1.08)}.btn--danger-outline{color:var(--danger)}.btn--danger-outline:hover:not(:disabled){border-color:var(--danger)}.toolbar{display:flex;align-items:flex-end;gap:16px;margin-bottom:16px;flex-wrap:wrap}.toolbar__field{display:flex;flex-direction:column;gap:4px;font-weight:500;min-width:240px}.toolbar__note{margin:0}.form select,.form textarea,.toolbar select{padding:8px 10px;border:1px solid var(--border);border-radius:5px;background:var(--bg);color:var(--text);font:inherit}.form select:focus-visible,.toolbar select:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.form input:disabled{opacity:.7}.field-error{color:var(--err)}.alert__text{margin:0 0 8px}.empty{padding:28px 16px;text-align:center;background:var(--surface);border:1px dashed var(--border);border-radius:8px}.empty p{margin:6px 0 0}.modal-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:16px;background:#0a0d148c}.modal{width:100%;max-width:460px;max-height:100%;overflow:auto;padding:22px;background:var(--surface);border:1px solid var(--border);border-radius:8px}.modal:focus{outline:none}.modal__title{margin:0;font-size:18px}.modal__text,.modal__text p{margin:0}.modal__actions{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}.toasts{position:fixed;right:16px;bottom:16px;z-index:60;display:flex;flex-direction:column;gap:8px;max-width:min(380px,calc(100vw - 32px))}.toast{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid;border-radius:6px;background:var(--surface);box-shadow:0 4px 14px #0000002e}.toast--success{border-color:var(--ok)}.toast--error{border-color:var(--err);color:var(--err)}.toast__close{border:0;background:none;color:inherit;font-size:18px;line-height:1;cursor:pointer}@media(max-width:900px){.admin{grid-template-columns:minmax(0,1fr);gap:16px}.admin__nav{position:static;flex-direction:row;overflow-x:auto;padding-bottom:4px;border-bottom:1px solid var(--border)}.admin__link{white-space:nowrap}}@media(max-width:720px){.table-wrap{border:0;background:none;overflow:visible}.table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.table,.table tbody,.table tr,.table td{display:block;width:100%}.table tr{margin-bottom:12px;background:var(--surface);border:1px solid var(--border);border-radius:8px}.table td{display:flex;justify-content:space-between;gap:12px;padding:8px 12px;text-align:right}.table td:before{content:attr(data-label);color:var(--muted);font-weight:500;text-align:left;flex-shrink:0}.table__actions{justify-content:flex-end}.table__actions:before{display:none}.toolbar__field{min-width:0;width:100%}.modal{padding:18px}.modal__actions{flex-direction:column-reverse}.modal__actions .btn{width:100%}}
