@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root{
  --ink:#16211f; --paper:#f7f9f8; --card:#fff; --line:#dde5e2; --pine:#155e56; --pine-dark:#0e453f;
  --muted:#5c6b67; --accent-soft:#e3efec; --danger:#b3372f; --radius:10px; font-size:15px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--paper);color:var(--ink);line-height:1.45}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace}
header{background:var(--pine);color:#fff;padding:14px 22px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
header h1{font-size:1.15rem;font-weight:600}
header nav{margin-left:auto;display:flex;gap:16px;align-items:center;font-size:.88rem}
header a{color:#fff}
main{max-width:1000px;margin:0 auto;padding:26px 18px 60px}
h2{font-size:1.05rem;margin-bottom:10px;color:var(--pine-dark)}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:18px}
.hint{color:var(--muted);font-size:.85rem}
label{display:block;font-size:.78rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}
input[type=text],input[type=password],input[type=file],select{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;font:inherit;background:#fff}
input:focus,select:focus{outline:2px solid var(--pine);outline-offset:0;border-color:var(--pine)}
.field{margin-bottom:12px}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.row > .field{flex:1;min-width:160px}
.btn{background:var(--pine);color:#fff;border:none;border-radius:6px;padding:8px 14px;font:inherit;font-size:.88rem;font-weight:500;cursor:pointer}
.btn:hover{background:var(--pine-dark)}
.btn.secondary{background:var(--accent-soft);color:var(--pine-dark)}
.btn.secondary:hover{background:#d3e6e1}
.btn.danger{background:var(--danger)}
.btn.small{padding:4px 10px;font-size:.8rem}
.btn:disabled{opacity:.55;cursor:default}
table{width:100%;border-collapse:collapse;font-size:.88rem}
th{text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:6px 8px;border-bottom:1px solid var(--line)}
td{padding:8px;border-bottom:1px solid var(--line);vertical-align:middle}
.pill{display:inline-block;border-radius:999px;padding:1px 9px;font-size:.74rem;font-weight:600;background:var(--accent-soft);color:var(--pine-dark)}
.pill.viewer{background:#eef0f7;color:#3b4a75}
.pill.admin{background:#fff1d6;color:#7a5410}
.pill.off{background:#f3e2df;color:#8a2f25}
.msg{font-size:.85rem;margin-top:8px;min-height:1.2em}
.msg.bad{color:var(--danger)}
.msg.good{color:var(--pine)}
.sched-list a.sched{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--line);border-radius:8px;background:#fff;color:inherit;text-decoration:none;margin-bottom:10px}
.sched-list a.sched:hover{border-color:var(--pine);box-shadow:0 2px 8px rgba(21,94,86,.08)}
.sched-list .name{font-weight:600;font-size:1rem}
.empty{color:var(--muted);font-style:italic;padding:8px 0}
.login-wrap{max-width:380px;margin:9vh auto 0;padding:0 16px}
.login-wrap .card{padding:26px 26px 22px}
.login-wrap h1{font-size:1.25rem;color:var(--pine-dark);margin-bottom:4px}
.tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--line)}
.tabs button{background:none;border:none;padding:9px 14px;font:inherit;font-weight:500;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent}
.tabs button.active{color:var(--pine-dark);border-bottom-color:var(--pine)}
.pane{display:none}.pane.active{display:block}
dialog{border:none;border-radius:10px;padding:20px 22px;max-width:560px;width:calc(100% - 32px);box-shadow:0 18px 50px rgba(0,0,0,.25)}
dialog::backdrop{background:rgba(15,30,28,.45)}
.access-grid td select{width:auto;min-width:130px}
