/* CLACK — a task board that sounds like a train station */

@font-face{
  font-family:'Oswald';
  src:url('assets/oswald.ttf') format('truetype');
  font-weight:200 700;
  font-display:swap;
}
@font-face{
  font-family:'IBM Plex Mono';
  src:url('assets/ibm-plex-mono.ttf') format('truetype');
  font-weight:100 700;
  font-display:swap;
}
@font-face{
  font-family:'Literata';
  src:url('assets/literata.ttf') format('truetype');
  font-weight:200 900;
  font-display:swap;
}

:root{
  --bg:#0c0f14;
  --bg-lift:#11161e;
  --panel:#141922;
  --tile-hi:#252d39;
  --tile-lo:#171d26;
  --line:rgba(255,255,255,.08);
  --amber:#ffc76b;
  --amber-deep:#e0a94f;
  --text:#e9edf4;
  --mut:#8b93a2;
  --faint:#7a8494;
  --green:#8fe3b0;
  --red:#ff8f7a;
  --done:#76839a;
  --paper:#f3ead9;
  --paper-2:#ece1cc;
  --ink:#241f18;
  --ink-mut:#6f6350;
  --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --disp:'Oswald','Arial Narrow',sans-serif;
  --serif:'Literata',Georgia,serif;
  --focus:#ffc76b;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  min-height:100vh;
  color:var(--text);
  font:400 16px/1.55 var(--mono);
  background:
    radial-gradient(1100px 520px at 50% -8%, #17202c 0%, rgba(23,32,44,0) 62%),
    var(--bg);
}
@media (prefers-reduced-motion: no-preference){
  body{animation:fadein .5s ease-out}
  @keyframes fadein{from{opacity:0}to{opacity:1}}
}

:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:2px}
::selection{background:var(--amber);color:#1a1206}

/* ---------- split-flap tiles ---------- */
.flap{
  display:inline-flex;
  gap:2px;
  perspective:160px;
}
.flap .ch{
  position:relative;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:var(--cw,17px);
  height:var(--chh,25px);
  flex:0 0 auto;
  background:linear-gradient(180deg,var(--tile-hi) 0%,#1b212b 49%,#10151c 51%,var(--tile-lo) 100%);
  color:var(--amber);
  font:600 var(--cf,13px)/1 var(--mono);
  border-radius:3px;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),0 1px 2px rgba(0,0,0,.55);
  overflow:hidden;
}
.flap .ch::after{
  content:"";
  position:absolute;left:0;right:0;top:calc(50% - .5px);height:1px;
  background:rgba(0,0,0,.65);
}
.flap .ch::before{
  content:"";
  position:absolute;left:0;right:0;top:0;height:42%;
  background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,0));
  pointer-events:none;
}
@media (prefers-reduced-motion: no-preference){
  .flap .ch{transition:transform .11s ease-in;transform-origin:center}
  .flap .ch.out{transform:rotateX(-92deg)}
}

/* sizes */
.wordmark{--cw:30px;--chh:44px;--cf:22px;display:inline-flex;gap:3px}
.wordmark .ch{color:#111;font-weight:700;
  background:linear-gradient(180deg,#ffd68a 0%,var(--amber) 49%,#b98a35 51%,#8f6a26 100%);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.25),0 2px 4px rgba(0,0,0,.5)}
.wordmark .ch::after{background:rgba(60,38,6,.5)}
.clock{--cw:15px;--chh:22px;--cf:12px}
.status{--cw:16px;--chh:24px;--cf:12px}
.status .ch{font-weight:700}
.bigword{--cw:34px;--chh:50px;--cf:26px}

/* status colors */
.st-todo .ch{color:var(--amber)}
.st-in-progress .ch{color:var(--green)}
.st-blocked .ch{color:var(--red)}
.st-done .ch{color:var(--done)}

/* ---------- top bar ---------- */
.top{
  max-width:1220px;margin:0 auto;
  padding:26px 24px 0;
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;
}
.brand{display:flex;align-items:center;gap:14px}
.brand-sub{
  font:400 10px/1.5 var(--mono);
  letter-spacing:.28em;color:var(--mut);
  border-left:1px solid var(--line);padding-left:14px;
}
.top-right{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.clockwrap{display:flex;align-items:center;gap:10px}
.clock-label{font-size:10px;letter-spacing:.28em;color:var(--mut)}
.ghost-btn{
  font:600 11px/1 var(--mono);letter-spacing:.14em;
  color:var(--mut);background:none;
  border:1px solid var(--line);border-radius:4px;
  padding:9px 12px;cursor:pointer;
}
.ghost-btn:hover{color:var(--amber);border-color:var(--amber-deep)}
.ghost-btn[aria-pressed="true"]{color:var(--amber)}

/* ---------- hero ---------- */
.hero{max-width:1220px;margin:0 auto;padding:40px 24px 8px}
.hero h1{
  margin:0 0 14px;
  font:500 clamp(38px,5vw,62px)/1.04 var(--disp);
  letter-spacing:.01em;text-transform:uppercase;
  color:var(--text);
}
.hero h1 em{font-style:normal;color:var(--amber)}
.lede{
  margin:0;max-width:56ch;
  font:400 15.5px/1.6 var(--serif);
  color:var(--mut);
}
.lede strong{color:var(--amber);font-weight:600;letter-spacing:.04em;font-family:var(--mono);font-size:13.5px}

/* ---------- controls ---------- */
.controls{
  max-width:1220px;margin:0 auto;
  padding:30px 24px 14px;
  display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;
}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{
  display:inline-flex;align-items:center;gap:0;
  font:600 11px/1 var(--mono);letter-spacing:.12em;
  background:var(--panel);color:var(--mut);
  border:1px solid var(--line);border-radius:4px;
  padding:0;cursor:pointer;overflow:hidden;
}
.chip .lb{padding:9px 10px}
.chip .n{
  padding:9px 10px;color:var(--amber);
  background:rgba(0,0,0,.35);border-left:1px solid var(--line);
  font-weight:700;
}
.chip:hover{border-color:var(--amber-deep);color:var(--text)}
.chip[aria-pressed="true"]{border-color:var(--amber);color:var(--text)}
.chip[aria-pressed="true"] .lb{color:var(--amber)}
.fields{display:flex;gap:14px;flex-wrap:wrap}
.field{display:flex;flex-direction:column;gap:6px}
.field label{
  font:600 10px/1 var(--mono);letter-spacing:.24em;color:var(--mut);
}
.field input,.field select{
  font:500 13.5px/1 var(--mono);
  color:var(--text);background:var(--panel);
  border:1px solid var(--line);border-radius:4px;
  padding:10px 12px;min-width:220px;
}
.field select{
  min-width:200px;appearance:none;-webkit-appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,var(--amber) 50%),linear-gradient(135deg,var(--amber) 50%,transparent 50%);
  background-position:calc(100% - 16px) 55%,calc(100% - 11px) 55%;
  background-size:5px 5px;background-repeat:no-repeat;
  padding-right:32px;
}
.field input::placeholder{color:#5d6572}
.field input:focus,.field select:focus{border-color:var(--amber-deep);outline:none}
.field input:focus-visible,.field select:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

/* ---------- board ---------- */
.board{max-width:1220px;margin:0 auto;padding:0 24px 24px}
.bhead{
  display:grid;
  grid-template-columns:5.4rem minmax(0,1fr) 11.5rem 9.5rem 4rem 3.2rem;
  gap:18px;
  padding:14px 16px 10px;
  border-bottom:1px solid var(--line);
  font:600 10px/1 var(--mono);letter-spacing:.24em;color:var(--faint);
}
.rows{list-style:none;margin:0;padding:0}
.rows li{border-bottom:1px solid var(--line)}
.rowbtn{
  display:grid;
  grid-template-columns:5.4rem minmax(0,1fr) 11.5rem 9.5rem 4rem 3.2rem;
  grid-template-areas:"time dest status crew msg go";
  gap:18px;align-items:center;
  width:100%;text-align:left;
  background:none;border:0;cursor:pointer;
  padding:16px;color:inherit;font:inherit;
}
.rowbtn:hover{background:var(--bg-lift)}
.rowbtn:hover .rtitle{color:#fff}
.rowbtn:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.cell-time{grid-area:time;font:500 13px/1.4 var(--mono);color:var(--amber);letter-spacing:.04em}
.cell-time small{display:block;font-size:9.5px;letter-spacing:.2em;color:var(--faint);font-weight:600}
.cell-dest{grid-area:dest;min-width:0}
.rtitle{
  display:block;font:500 18px/1.3 var(--disp);letter-spacing:.015em;
  color:var(--text);text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.rmeta{display:block;margin-top:3px;font:400 11px/1.4 var(--mono);letter-spacing:.14em;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rmeta b{color:#aab3c2;font-weight:500}
.cell-status{grid-area:status}
.cell-crew{grid-area:crew;font:400 12.5px/1.3 var(--mono);color:var(--mut);letter-spacing:.06em}
.cell-msg{grid-area:msg;font:400 11.5px/1 var(--mono);color:var(--faint);letter-spacing:.14em}
.cell-msg b{color:var(--mut);font-weight:600}
.cell-go{grid-area:go;font:700 14px/1 var(--mono);color:var(--amber-deep);text-align:right}
.rowbtn:hover .cell-go{color:var(--amber)}
li[data-status="done"] .rtitle{color:var(--done);text-decoration:line-through;text-decoration-thickness:1px}
li[data-status="done"] .cell-time{color:var(--done)}
li[data-status="done"] .rowbtn:hover .rtitle{color:#8b96a8}
@media (prefers-reduced-motion: no-preference){
  li.pulse .rowbtn{animation:pulse .9s ease-out}
  @keyframes pulse{0%{background:rgba(255,199,107,.16)}100%{background:transparent}}
}

/* ---------- empty state ---------- */
.empty{padding:64px 24px 72px;text-align:center}
.bigword{margin-bottom:22px}
.empty-copy{
  max-width:46ch;margin:0 auto 26px;
  font:400 15px/1.65 var(--serif);color:var(--mut);
}
.solid-btn{
  font:700 12px/1 var(--mono);letter-spacing:.18em;
  color:#1a1206;background:var(--amber);
  border:0;border-radius:4px;padding:13px 20px;cursor:pointer;
}
.solid-btn:hover{background:#ffd68a}

/* ---------- footer ---------- */
.foot{
  max-width:1220px;margin:0 auto;
  padding:26px 24px 40px;
  border-top:1px solid var(--line);
  font:400 10.5px/1.6 var(--mono);letter-spacing:.22em;color:var(--faint);
}

/* ---------- toast ---------- */
#toast{
  position:fixed;left:50%;bottom:26px;z-index:60;
  transform:translate(-50%,16px);
  background:var(--panel);color:var(--amber);
  border:1px solid var(--amber-deep);border-radius:4px;
  box-shadow:0 8px 30px rgba(0,0,0,.55);
  font:600 12.5px/1.4 var(--mono);letter-spacing:.06em;
  padding:12px 18px;max-width:min(88vw,560px);
  opacity:0;pointer-events:none;
  transition:opacity .22s ease,transform .22s ease;
}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast .dim{color:var(--mut);font-weight:400}

/* ---------- detail: the manifest ticket ---------- */
#scrim{
  position:fixed;inset:0;z-index:40;
  background:rgba(5,7,10,.72);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
}
#detail{
  position:fixed;z-index:50;
  left:50%;top:50%;
  transform:translate(-50%,-50%);
  width:min(680px,calc(100vw - 32px));
  max-height:calc(100vh - 48px);
  overflow:auto;
  background:
    linear-gradient(180deg,var(--paper) 0%,var(--paper-2) 100%);
  color:var(--ink);
  border-radius:8px;
  box-shadow:0 30px 80px rgba(0,0,0,.6),0 2px 0 rgba(255,255,255,.25) inset;
}
#detail::before{ /* punched holes on the left edge */
  content:"";position:absolute;top:0;bottom:0;left:-11px;width:22px;
  background:
    radial-gradient(circle 9px at 11px 22%,#05070a 98%,transparent),
    radial-gradient(circle 9px at 11px 50%,#05070a 98%,transparent),
    radial-gradient(circle 9px at 11px 78%,#05070a 98%,transparent);
  pointer-events:none;
}
.t-head{
  display:flex;align-items:center;gap:14px;
  padding:16px 22px 13px;
  border-bottom:2px dashed rgba(36,31,24,.3);
  font:600 10.5px/1 var(--mono);letter-spacing:.26em;color:var(--ink-mut);
}
.t-head .tid{color:var(--ink);background:rgba(36,31,24,.08);padding:5px 8px;border-radius:3px;letter-spacing:.14em}
.t-close{
  margin-left:auto;
  font:700 11px/1 var(--mono);letter-spacing:.14em;
  color:var(--ink);background:none;cursor:pointer;
  border:1.5px solid rgba(36,31,24,.55);border-radius:4px;
  padding:9px 13px;
}
.t-close:hover{background:var(--ink);color:var(--paper)}
.t-bodywrap{position:relative;padding:26px 30px 30px}
#d-title{
  margin:0 0 4px;max-width:78%;
  font:600 clamp(24px,3.4vw,32px)/1.12 var(--disp);
  letter-spacing:.01em;text-transform:uppercase;color:var(--ink);
}
.t-depline{font:500 11px/1.6 var(--mono);letter-spacing:.2em;color:var(--ink-mut);margin:0 0 20px;max-width:72%}

.stamp{
  position:absolute;top:20px;right:26px;
  transform:rotate(-7deg);
  font:700 13px/1 var(--mono);letter-spacing:.22em;
  padding:10px 14px;text-align:center;
  border:3px solid currentColor;border-radius:6px;
  box-shadow:inset 0 0 0 1.5px currentColor;
  opacity:.9;
  mix-blend-mode:multiply;
}
.stamp small{display:block;font-size:8px;letter-spacing:.3em;font-weight:600;margin-top:5px;opacity:.75}
.st-todo-paper{color:#8a6d1f}
.st-in-progress-paper{color:#1f7a4d}
.st-blocked-paper{color:#b33a2b}
.st-done-paper{color:#6a6f78}
@media (prefers-reduced-motion: no-preference){
  .stamp.restamp{animation:stampin .32s cubic-bezier(.2,1.4,.4,1)}
  @keyframes stampin{0%{transform:rotate(-7deg) scale(1.7);opacity:0}100%{transform:rotate(-7deg) scale(1);opacity:.9}}
}

.t-status{
  display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;
  padding:16px 18px;margin:0 0 22px;
  background:rgba(36,31,24,.055);
  border:1.5px solid rgba(36,31,24,.35);
  border-radius:6px;
}
.t-status .fld{display:flex;flex-direction:column;gap:7px}
.t-status label{font:700 10px/1 var(--mono);letter-spacing:.24em;color:var(--ink-mut)}
#status-select{
  font:600 13px/1 var(--mono);letter-spacing:.06em;
  color:var(--ink);background:var(--paper);
  border:1.5px solid rgba(36,31,24,.55);border-radius:4px;
  padding:10px 34px 10px 12px;
  appearance:none;-webkit-appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);
  background-position:calc(100% - 15px) 55%,calc(100% - 10px) 55%;
  background-size:5px 5px;background-repeat:no-repeat;
}
.t-status .hint{font:400 10.5px/1.5 var(--mono);letter-spacing:.06em;color:var(--ink-mut);max-width:26ch}

.t-meta{
  display:grid;grid-template-columns:1fr 1fr;
  gap:0;border-top:1.5px solid rgba(36,31,24,.3);
  margin:0 0 24px;
}
.t-meta > div{
  padding:11px 2px 10px;
  border-bottom:1px solid rgba(36,31,24,.16);
  font:500 12px/1.4 var(--mono);letter-spacing:.05em;color:var(--ink);
}
.t-meta dt{font-size:9px;letter-spacing:.26em;font-weight:700;color:var(--ink-mut);margin-bottom:4px}
.t-meta dd{margin:0}
.t-meta .p-high{color:#b33a2b;font-weight:700}
.t-meta .p-medium{color:#8a6d1f;font-weight:700}
.t-meta .p-low{color:var(--ink-mut);font-weight:500}
.tag{
  display:inline-block;margin:2px 6px 2px 0;
  padding:4px 8px;border:1px solid rgba(36,31,24,.4);border-radius:99px;
  font-size:10px;letter-spacing:.14em;font-weight:600;
}
.t-prose{max-width:58ch}
.t-prose p{margin:0 0 14px;font:400 16px/1.62 var(--serif);color:#33291d}
.t-prose p:last-child{margin-bottom:0}
.t-prose .exp{
  border-left:3px solid rgba(36,31,24,.4);
  padding-left:14px;color:var(--ink-mut);
}

/* ---------- responsive ---------- */
@media (max-width:1060px){
  .bhead,.rowbtn{
    grid-template-columns:4.6rem minmax(0,1fr) 10.5rem 7.5rem 3.4rem 2.6rem;
    gap:12px;
  }
  .status{--cw:14px;--chh:22px;--cf:10.5px}
}
@media (max-width:820px){
  .bhead{display:none}
  .rowbtn{
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:
      "dest  time"
      "status meta";
    row-gap:10px;
  }
  .cell-time{grid-area:time;text-align:right}
  .cell-time small{display:none}
  .rtitle{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .rmeta{grid-area:meta;margin-top:0}
  .rmeta br{display:none}
  .cell-status{grid-area:status;justify-self:start}
  .cell-crew,.cell-msg,.cell-go{display:none}
  .hero{padding-top:30px}
  .controls{padding-top:22px}
  .fields{width:100%}
  .field{flex:1 1 220px}
  .field input,.field select{width:100%;min-width:0}
  .empty{padding:44px 16px 56px}
  .bigword{--cw:24px;--chh:36px;--cf:18px}
  #detail{width:calc(100vw - 16px);max-height:calc(100vh - 24px)}
  .t-bodywrap{padding:22px 20px 26px}
  #d-title{max-width:100%}
  .stamp{position:static;display:inline-block;margin:0 0 18px;transform:rotate(-3deg)}
  .stamp.restamp{animation:none}
  .t-meta{grid-template-columns:1fr}
  .t-head{padding:14px 18px 12px}
}
@media (max-width:480px){
  .top{padding:20px 16px 0}
  .hero,.controls,.board,.foot{padding-left:16px;padding-right:16px}
  .wordmark{--cw:24px;--chh:36px;--cf:18px}
  .brand-sub{display:none}
  .clock-label{display:none}
  .top-right{width:100%;justify-content:space-between}
  .clock{--cw:13px;--chh:20px;--cf:11px}
  .hero h1{font-size:34px}
  .field input,.field select{font-size:16px}
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
