/* ENGJYN foundation: shared by the app (public/) and the site (site/public/). Edit styles/engjyn.css, then npm run css. */
@font-face{font-family:"Engjyn Sans";src:url(/fonts/engjyn-sans-400.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2212}
@font-face{font-family:"Engjyn Sans";src:url(/fonts/engjyn-sans-600.woff2) format("woff2");font-weight:600 800;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2212}

/* tokens */
:root{
  --paper:#F2F3F0;--surface:#FFFFFF;--ink:#1A2230;--muted:#5A6371;--rule:#C8CCD1;
  --carbon:#2B45B5;--on-carbon:#FFFFFF;
  --docket:#F3E8A8;--docket-ink:#2A2A1E;--stamp:#2B45B5;--docket-live:#1F7A4D;
  --live:#1F7A4D;--warn:#A15C00;
  --display:"Big Shoulders Display","Arial Narrow",system-ui,sans-serif;
  --body:"Engjyn Sans","Atkinson Hyperlegible Next",system-ui,sans-serif;
  --r-paper:2px;--r-stamp:3px;--r-control:4px;--r-sheet:10px;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#10151D;--surface:#171D27;--ink:#E5E8EE;--muted:#98A1AF;--rule:#2A323E;
    --carbon:#8FA3FF;--on-carbon:#10151D;
    --docket:#E9DD9C;--docket-ink:#2A2A1E;--stamp:#2B45B5;--docket-live:#1F7A4D;
    --live:#5BC28E;--warn:#E0A050;
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --paper:#10151D;--surface:#171D27;--ink:#E5E8EE;--muted:#98A1AF;--rule:#2A323E;
  --carbon:#8FA3FF;--on-carbon:#10151D;
  --docket:#E9DD9C;--docket-ink:#2A2A1E;--stamp:#2B45B5;--docket-live:#1F7A4D;
  --live:#5BC28E;--warn:#E0A050;
  color-scheme:dark;
}

/* base */
*,*::before,*::after{box-sizing:border-box}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}
a{color:var(--carbon)}
[hidden]{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.display{font-family:var(--display);font-weight:800;letter-spacing:.01em}

/* focus */
:focus-visible{outline:3px solid var(--carbon);outline-offset:2px}
.docket :focus-visible{outline-color:var(--stamp)}

/* buttons: .btn primary, .secondary, .quiet, .danger; .large, default, .small */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;font:inherit;font-size:15px;font-weight:600;line-height:1.2;
  border:2px solid var(--carbon);border-radius:var(--r-control);background:var(--carbon);color:var(--on-carbon);white-space:nowrap;text-decoration:none;cursor:pointer}
.btn:hover{filter:brightness(1.08)}
.btn.secondary{background:transparent;color:var(--carbon)}
.btn.quiet{background:transparent;border-color:var(--rule);color:var(--ink)}
.btn.danger{background:transparent;border-color:var(--warn);color:var(--warn)}
.btn.secondary:hover,.btn.quiet:hover{filter:none;background:color-mix(in srgb,var(--carbon) 10%,transparent)}
.btn.danger:hover{filter:none;background:color-mix(in srgb,var(--warn) 10%,transparent)}
.btn.large{min-height:52px;padding:0 22px;font-size:16px}
.btn.small{min-height:32px;padding:0 12px;font-size:14px}
.btn:disabled,.btn[disabled]{opacity:.7;cursor:progress}

/* inputs */
.input{width:100%;min-height:42px;padding:9px 11px;font:inherit;color:var(--ink);background:var(--surface);border:2px solid var(--rule);border-radius:var(--r-control)}
textarea.input{min-height:96px;resize:vertical}
.input:focus-visible{outline:3px solid var(--carbon);outline-offset:2px;border-color:var(--carbon)}
.input[aria-invalid="true"]{border-color:var(--warn)}

/* status chips */
.chip{display:inline-flex;align-items:center;font-family:var(--display);font-weight:800;text-transform:uppercase;letter-spacing:.07em;font-size:13px;line-height:1;padding:4px 7px 3px;border:2px solid currentColor;border-radius:var(--r-stamp);color:var(--carbon);white-space:nowrap}
.chip[data-s="Scoping"],.chip[data-s="Queued"]{color:var(--muted)}
.chip[data-s="Needs your reply"]{color:var(--warn)}
.chip[data-s="Live"],.chip[data-s="Connected"]{color:var(--live)}

/* tickets: perforated top edge (6px holes on a 16px pitch, first centred 8px in), flat, as the email tickets.
   Docket stock (yellow) for jobs, receipt stock (white) for money. The mask shows whatever is behind. */
.ticket,.docket,.slip,.composer-pop,.row .tab{border-radius:0;
  -webkit-mask:radial-gradient(circle 6px at 8px 0,transparent 98%,#000) 0 0/16px 100% repeat-x;
          mask:radial-gradient(circle 6px at 8px 0,transparent 98%,#000) 0 0/16px 100% repeat-x}
.ticket,.docket{position:relative;padding:30px 34px 34px;font-size:15px;line-height:1.45}
.docket{--ticket-rule:rgba(42,42,30,.32);background:var(--docket);color:var(--docket-ink)}
/* Receipt stock stays white with the light palette in both themes, like the docket stays yellow. */
.ticket.receipt{--paper:#F2F3F0;--surface:#FFFFFF;--ink:#1A2230;--muted:#5A6371;--rule:#C8CCD1;--carbon:#2B45B5;--on-carbon:#FFFFFF;--live:#1F7A4D;--warn:#A15C00;
  --ticket-rule:rgba(26,34,48,.22);background:#FFFFFF;color:var(--ink);color-scheme:light}
.rule{border:0;border-top:2px dashed var(--ticket-rule,var(--rule));margin:16px 0}
/* letters: account mail and cards (sign-in, links) */
.letter{background:var(--surface);color:var(--ink);border-radius:var(--r-paper);padding:34px 34px 36px}
.docket a{color:var(--stamp)}
.docket .btn{background:var(--stamp);border-color:var(--stamp);color:var(--docket)}
.docket .btn.secondary{background:transparent;color:var(--stamp)}
.docket .input{background:color-mix(in srgb,var(--docket) 40%,var(--surface));border-color:color-mix(in srgb,var(--docket-ink) 35%,transparent);color:var(--docket-ink)}
.docket .input:focus-visible{border-color:var(--stamp)}
.docket-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.docket-no{font-size:15px;font-weight:600;line-height:1.45;color:color-mix(in srgb,var(--docket-ink) 70%,transparent)}
.docket-no b{display:block;font-family:var(--display);font-weight:800;font-size:46px;line-height:.9;color:var(--stamp);letter-spacing:.01em}
.docket-title{font-family:var(--body);font-size:21px;line-height:1.25;font-weight:600;letter-spacing:normal;text-wrap:wrap;margin:10px 0 0;max-width:40ch}
.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;margin:16px 0 0;padding:8px 0;border-top:2px dashed var(--ticket-rule);border-bottom:2px dashed var(--ticket-rule)}
.fields div{padding:8px 12px 8px 0}
.docket .fields~*{margin-top:16px;margin-bottom:0}
.fields dt{font-size:12px;line-height:1.45;color:color-mix(in srgb,var(--docket-ink) 68%,transparent)}
.fields dd{margin:0;font-weight:600;line-height:1.45;overflow-wrap:anywhere}

/* stamps: one ring, as the email stamp */
.docket .chip{color:var(--stamp);font-size:19px;padding:6px 10px 5px;border-width:2.5px;letter-spacing:.08em;transform:rotate(-4deg)}
.docket .chip[data-s="Live"]{color:var(--docket-live)}
/* The big LIVE stamp takes the chip's place, top right, in space kept clear for it: the stamp is the status. */
.stamp-live{position:absolute;right:30px;top:36px;font-family:var(--display);font-weight:800;font-size:40px;line-height:1;letter-spacing:.08em;color:var(--docket-live);border:5px solid currentColor;padding:5px 14px 1px;border-radius:var(--r-stamp);transform:rotate(-9deg);pointer-events:none;opacity:0}
.thump .docket-top{min-height:84px}
.thump .docket-top .chip{opacity:0}
.thump .stamp-live{animation:thump .34s cubic-bezier(.3,1.6,.5,1) forwards}
@keyframes thump{0%{opacity:0;transform:rotate(-9deg) scale(2.3)}70%{opacity:1;transform:rotate(-9deg) scale(.95)}100%{opacity:.92;transform:rotate(-9deg) scale(1)}}
.thump{animation:jolt .34s ease-out}
@keyframes jolt{0%,60%{transform:none}75%{transform:translateY(3px) scale(.995)}100%{transform:none}}
@media (prefers-reduced-motion: reduce){.thump{animation:none}.thump .stamp-live{animation:none;opacity:.92}}

@media (max-width:760px){
  .ticket,.docket{padding:26px 22px 28px}
  .letter{padding:26px 22px 28px}
  .docket-no b{font-size:40px}
  .docket .chip{font-size:16px}
  .stamp-live{right:20px;top:32px}
}
