/*
 * The shadcn-style look, as a proposal. Layered over app.css so it can be
 * judged on its own and removed with one line in base.html.
 *
 * What it takes from shadcn/ui: neutral surfaces, 1px borders, soft radii,
 * small shadows, 36px controls, visible focus rings, sentence-case badges and
 * table headings, tabs as a segmented control.
 *
 * What it keeps from Seed Legal: the brand blue as the primary colour, and
 * Newsreader for page titles. Familjen Grotesk stays the interface face.
 * Both are the fonts seedlegalassist.com uses, so this stays on brand.
 *
 * If it is adopted, fold it into app.css rather than leaving two layers.
 */

/* ---------- tokens ---------- */
:root{
  --paper:#FAFAFA;          /* page */
  --surface:#FFFFFF;        /* cards */
  --paper-sunk:#F4F4F5;     /* muted fills, hovers */
  --ink:#09090B;
  --ink-2:#3F3F46;
  --ink-3:#71717A;          /* muted foreground */
  --rule:#E4E4E7;           /* borders */
  --rule-soft:#F1F1F3;
  --blue:#0F52C8;           /* Seed Legal brand, the primary */
  --blue-hover:#0C46AD;
  --blue-wash:#EEF3FC;
  --good:#15803D;  --good-wash:#F0FDF4;  --good-line:#BBF7D0;
  --warn:#A16207;  --warn-wash:#FEFCE8;  --warn-line:#FDE68A;
  --crit:#DC2626;  --crit-wash:#FEF2F2;  --crit-line:#FECACA;
  --radius:10px;
  --radius-sm:6px;
  --shadow-xs:0 1px 2px 0 rgb(9 9 11 / .05);
  --ring:0 0 0 3px rgb(15 82 200 / .25);
}
body{background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased}

/* ---------- header ---------- */
.topbar{background:var(--surface);border-bottom-color:var(--rule)}
.slot{border:1px dashed var(--rule);border-radius:var(--radius-sm);background:var(--paper-sunk);color:var(--ink-3);letter-spacing:.06em}
.pop{border-color:var(--rule);border-radius:var(--radius)}
.contextbar{background:var(--surface);border-bottom-color:var(--rule)}
.stamp{color:var(--ink-3);background:var(--paper-sunk);border:1px solid var(--rule);border-radius:var(--radius-sm)}
.stamp b{color:var(--ink);font-weight:500}

/* ---------- page heading ---------- */
.sec-head h2{letter-spacing:-.015em}
.hr{background:var(--rule)}

/* ---------- cards ---------- */
.panel{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow-xs);padding:24px}
.panel-head h3{font-family:var(--ui);font-size:16px;font-weight:600;letter-spacing:-.01em}
.panel-head > span,.panel-head p{color:var(--ink-3);font-size:13.5px}
.panel-head .count{background:var(--paper-sunk);color:var(--ink-2);font-weight:500;border-radius:var(--radius-sm)}

/* ---------- buttons ---------- */
.btn{
  min-height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:14px;font-weight:500;
  justify-content:center;box-shadow:var(--shadow-xs);
  transition:background .15s,border-color .15s,color .15s,box-shadow .15s;
}
.btn:hover{background:var(--blue-hover);border-color:var(--blue-hover)}
.btn.ghost{background:var(--surface);color:var(--ink);border-color:var(--rule)}
.btn.ghost:hover{background:var(--paper-sunk);color:var(--ink);border-color:var(--rule)}
.btn.danger{background:var(--surface);color:var(--crit);border-color:var(--crit-line)}
.btn.danger:hover{background:var(--crit-wash);border-color:var(--crit-line)}
.btn.small{min-height:32px;padding:0 12px;font-size:13px}
.btn:focus-visible,.quicklinks a:focus-visible{outline:none;box-shadow:var(--ring)}

/* ---------- form controls ---------- */
.input,select.input,input.input,textarea.input,.searchform input,.rangeform input{
  min-height:36px;border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--surface);
  box-shadow:var(--shadow-xs);font-size:14px;transition:border-color .15s,box-shadow .15s;
}
textarea.input{min-height:auto;padding-top:8px}
.input:focus,.searchform input:focus,.rangeform input:focus{outline:none;border-color:var(--blue);box-shadow:var(--ring)}
.field label{color:var(--ink-2);font-weight:500;font-size:13px}

/* ---------- badges ---------- */
.tag{
  text-transform:none;letter-spacing:0;font-size:12px;font-weight:500;
  border:1px solid var(--good-line);background:var(--good-wash);color:var(--good);
  border-radius:var(--radius-sm);padding:1px 8px;
}
.tag.arch{background:var(--paper-sunk);color:var(--ink-3);border-color:var(--rule)}

/* ---------- tables ---------- */
th{text-transform:none;letter-spacing:0;font-size:13px;font-weight:500;color:var(--ink-3);border-bottom:1px solid var(--rule)}
td{border-bottom:1px solid var(--rule-soft)}
tbody tr{transition:background .12s}
tbody tr:hover td{background:#FAFAFB}

/* ---------- alerts ---------- */
.msg{border:1px solid var(--good-line);border-radius:8px;background:var(--good-wash);color:var(--ink-2)}
.msg.warning{border-color:var(--warn-line);background:var(--warn-wash)}
.msg.error{border-color:var(--crit-line);background:var(--crit-wash)}

/* ---------- chips and filters ---------- */
.quicklinks a{border-radius:var(--radius-sm);border-color:var(--rule);background:var(--surface);color:var(--ink-2);box-shadow:var(--shadow-xs)}
.quicklinks a:hover{background:var(--paper-sunk);color:var(--ink);border-color:var(--rule)}
.quicklinks a.on{background:var(--ink);color:#fff;border-color:var(--ink)}

/* ---------- dashboard figures ---------- */
/* Separate cards with a gap, rather than one grid stitched with 1px lines,
   and no navy rule across the top of the row. */
.tiles,.worktiles{gap:12px;background:none;border:0;border-radius:0;overflow:visible}
.worktile + .worktile{border-left:1px solid var(--rule)}
.tile,.worktile{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow-xs)}

/* Card labels in sentence case, like everything else. */
.tile .lab,.worktile .lab,.subhead{text-transform:none;letter-spacing:0;font-size:13px;font-weight:500;color:var(--ink-3)}
.subhead{color:var(--ink-2)}

/* Figures neutral. Colour is kept for meaning only: money recovered. */
.tile .val,.worktile .val{font-family:var(--ui);font-weight:600;letter-spacing:-.025em;color:var(--ink)}
.worktile.good .val{color:var(--good)}

/* Escalation shown by a coloured dot, not a coloured edge. */
.rung,.rung.final_notice,.rung.demand{border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow-xs);background:var(--surface)}
.rung .t{display:inline-flex;align-items:center;gap:7px}
.rung .t::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--blue);flex:none}
.rung.final_notice .t::before{background:var(--warn)}
.rung.demand .t::before{background:var(--crit)}
.rung.empty{background:var(--surface)}
/* A zero-count rung carries the class "empty", which collides with the
   generic empty-state box and inherited its centred text. Keep all three
   rungs aligned the same way. */
.rung{text-align:left}
.ladder .lab{text-transform:none;letter-spacing:0;font-size:13px;font-weight:500;color:var(--ink-2)}
.rung.empty .n,.rung.empty .t{color:var(--ink-3)}

/* Date and role pills. */
.sec-head .period{background:var(--paper-sunk);color:var(--ink-2);border:1px solid var(--rule);border-radius:var(--radius-sm);font-weight:500;letter-spacing:0}
.sec-head .period.role{background:var(--warn-wash);color:var(--warn);border-color:var(--warn-line)}
.seedwork .sec-head h2{color:var(--ink)}

.demo-banner{background:var(--warn-wash);border-bottom:1px solid var(--warn-line);color:var(--ink-2)}

/* ---------- confirm dialog, matched to the rest ---------- */
dialog.confirm{border-radius:var(--radius);border-color:var(--rule)}
