:root{
  color-scheme:light;
  --page:#f9f9f7;--surface:#fcfcfb;--ink:#0b0b0b;--ink-2:#52514e;--muted:#898781;--grid:#e1e0d9;--border:rgba(11,11,11,.10);
  --s1:#2a78d6;--s1-soft:#cde2fb;--st5:#104281;
  --good:#0ca30c;--good-text:#006300;--good-soft:#dff3df;--bad:#d03b3b;--warn:#fab219;--warn-soft:#fff4d6;
  --radius:12px;--font:system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
  --col-company:96px;--col-ticket:200px;--head1:32px;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;background:var(--page);color:var(--ink);font:14px/1.45 var(--font)}
a{color:var(--s1)}
button,input,select,textarea{font:inherit;color:inherit}
.muted{color:var(--muted)}
.error{color:var(--bad);font-size:13px}
.help{font-size:12px;margin:0}
.row{display:flex;align-items:center}
.gap{gap:8px}
.spacer{flex:1}

/* top bar */
.top{display:flex;align-items:center;gap:18px;padding:10px 18px;background:var(--surface);border-bottom:1px solid var(--grid);position:sticky;top:0;z-index:20}
.brand{font-weight:700;font-size:16px;color:var(--ink);text-decoration:none}
.nav{display:flex;gap:2px}
.nav a{padding:6px 12px;border-radius:8px;color:var(--ink-2);text-decoration:none;font-weight:600}
.nav a:hover{background:#f0efec}
.nav a.on{background:var(--s1-soft);color:var(--st5)}

main{padding:14px 18px}
.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}
.toolbar label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2)}
.select,.input,textarea{border:1px solid var(--grid);background:#fff;border-radius:8px;padding:7px 10px}
.input.short{width:180px}
textarea{min-height:70px;resize:vertical;width:100%}
.btn{border:1px solid var(--grid);background:#fff;border-radius:8px;padding:7px 12px;cursor:pointer;font-weight:600;color:var(--ink);text-decoration:none;display:inline-block}
.btn:hover{background:#f4f4f1}
.btn.primary{background:var(--s1);border-color:var(--s1);color:#fff}
.btn.primary:hover{background:#256abf}
.btn.danger{color:var(--bad);border-color:rgba(208,59,59,.35)}
.btn.ghost{background:transparent}
.btn.small{padding:5px 9px;font-size:12px}
.btn[disabled]{opacity:.5;cursor:default}
.link{border:0;background:none;padding:0;color:var(--s1);cursor:pointer;font-weight:600;text-align:left}
.link:hover{text-decoration:underline}
.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;background:#f0efec;color:var(--ink-2);white-space:nowrap}
.badge.import{background:#e6f0fc;color:#1c5cab}
.badge.sync{background:#f3e8ff;color:#5b21b6}
.empty{padding:40px;text-align:center}
.count{font-size:12px;color:var(--muted);margin-left:auto}

/* grid */
.grid-wrap{overflow:auto;max-height:calc(100vh - 128px);border:1px solid var(--grid);border-radius:var(--radius);background:#fff}
table.grid{border-collapse:separate;border-spacing:0;font-size:13px;min-width:100%}
table.grid th,table.grid td{border-bottom:1px solid var(--grid);border-right:1px solid #eeede8;padding:0 8px;height:30px;white-space:nowrap;background:#fff}
table.grid thead th{position:sticky;top:0;z-index:2;font-weight:600;color:var(--ink-2);text-align:left;background:var(--surface)}
table.grid thead tr:first-child th{height:var(--head1);text-align:center;font-weight:700;color:var(--ink);letter-spacing:.04em}
table.grid thead tr:nth-child(2) th{top:var(--head1);font-size:12px}
table.grid thead tr:nth-child(2) th.num{text-align:right}
table.grid .sticky-c{position:sticky;left:0;z-index:3;min-width:var(--col-company);max-width:var(--col-company);font-weight:600}
table.grid .sticky-t{position:sticky;left:var(--col-company);z-index:3;min-width:var(--col-ticket);max-width:var(--col-ticket);overflow:hidden;text-overflow:ellipsis;border-right:2px solid var(--grid)}
table.grid thead .sticky-c,table.grid thead .sticky-t{z-index:4;background:var(--surface)}
table.grid td.num{text-align:right;font-variant-numeric:tabular-nums}
table.grid td.computed{color:var(--ink-2);background:#fbfbf9}
table.grid td.editable{cursor:text}
table.grid td.editable:hover{background:#f1f6fd}
table.grid td.editable:focus{outline:2px solid var(--s1);outline-offset:-2px}
table.grid td.editing{padding:0 2px;background:#fff}
table.grid td.saving{opacity:.55}
table.grid td.saved{background:var(--good-soft)!important;transition:background .2s}
table.grid td.failed{outline:2px solid var(--bad);outline-offset:-2px}
table.grid td.ends_soon{background:var(--warn-soft)}
table.grid td.status.expired,table.grid td.status.none{color:var(--muted)}
table.grid td.status.ends_soon{color:#8a5a00;font-weight:600}
table.grid td.status.active{color:var(--good-text)}
table.grid td.status.upcoming{color:var(--st5)}
table.grid td.ota-expired{color:var(--muted)}
table.grid tr.company-start td{border-top:2px solid var(--grid)}
table.grid tr.archived td{color:var(--muted)}
table.grid tr.archived .ticket .link{text-decoration:line-through;color:var(--muted)}
table.grid td.gap-col,table.grid th.gap-col{min-width:8px;max-width:8px;padding:0;background:var(--page);border-right:0}
.cell-input{width:100%;height:26px;border:1px solid var(--s1);border-radius:4px;padding:0 6px;font-size:13px;background:#fff}
td.num .cell-input{text-align:right}
.warn{color:#8a5a00;cursor:help;margin-left:4px}
.updated{font-size:11px;color:var(--muted)}

/* log */
table.log{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border:1px solid var(--grid)}
table.log th,table.log td{border-bottom:1px solid var(--grid);padding:7px 10px;text-align:left;vertical-align:top}
table.log th{background:var(--surface);font-size:12px;color:var(--ink-2);white-space:nowrap}
table.log td.when,table.log td.who,table.log td.act{white-space:nowrap}
table.log td.val{font-variant-numeric:tabular-nums;white-space:nowrap}
table.log .old{color:var(--muted);text-decoration:line-through;margin-right:6px}
table.log .new{font-weight:600}
table.log td.note{white-space:pre-line;max-width:320px;color:var(--ink-2)}
.pager{display:flex;align-items:center;gap:10px;margin-top:10px}

/* drawer / modal / login */
.drawer[hidden],.modal[hidden]{display:none}
.drawer{position:fixed;inset:0;background:rgba(11,11,11,.25);z-index:40;display:flex;justify-content:flex-end}
.drawer-panel{width:min(820px,96vw);background:var(--page);height:100%;overflow:auto;box-shadow:-12px 0 40px rgba(0,0,0,.18)}
.drawer-panel header,.modal-panel header{display:flex;align-items:center;justify-content:space-between;padding:14px 22px;border-bottom:1px solid var(--grid);background:var(--surface);position:sticky;top:0;z-index:1}
.drawer-panel h2,.modal-panel h2{margin:0;font-size:17px}
.drawer-body,.modal-body{padding:18px 22px;display:flex;flex-direction:column;gap:18px}
.modal{position:fixed;inset:0;background:rgba(11,11,11,.3);z-index:45;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow:auto}
.modal-panel{width:min(1040px,100%);background:var(--page);border-radius:14px;box-shadow:0 20px 60px rgba(0,0,0,.25);max-height:92vh;overflow:auto}
.modal-panel.narrow{width:min(460px,100%)}
.field label{display:block;font-size:12px;color:var(--ink-2);font-weight:600;margin-bottom:4px}
.field .input,.field .select{width:100%}
.login{display:flex;flex-direction:column;gap:12px}
.section h3{margin:0 0 8px;font-size:14px;display:flex;align-items:center;gap:8px}
.chip{display:inline-block;width:12px;height:12px;border-radius:3px;border:1px solid var(--border)}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fields .wide{grid-column:1/-1}
.checks{display:flex;gap:14px;flex-wrap:wrap}
.checks label{display:flex;gap:6px;align-items:center}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#0b0b0b;color:#fff;padding:10px 16px;border-radius:10px;font-size:13px;z-index:60;box-shadow:0 8px 24px rgba(0,0,0,.25);display:flex;gap:14px;align-items:center}
.toast[hidden]{display:none}
.toast-btn{border:0;background:transparent;color:#9fc6ff;font-weight:700;cursor:pointer;padding:0}
@media (max-width:720px){main{padding:10px}.top{gap:10px;padding:8px 12px}#who{display:none}}
