
@font-face{font-family:Geist;font-weight:400 600;src:url(/fonts/geist-latin.woff2)format("woff2")}
@font-face{font-family:"Geist Mono";font-weight:400 500;src:url(/fonts/geist-mono-latin.woff2)format("woff2")}
:root{
  --frame:#181818; --page:#141413; --card:#1C1C1A; --raised:#21201E;
  --ink:#F0EEE6; --muted:#8A867C; --faint:#5F5C55;
  --accent:#F9A825; --send:#0883FD; --send-fg:#FFFFFF; /* ace-dark.json send */ --brand-top:#E19872; --brand-bottom:#C97B54; /* the app icon's clay, tools/mac/ace-1024.png */ --info:#8EA7C7; --success:#87B099; --danger:#C59895;
  --tint:rgba(240,238,230,.07); --tint2:rgba(240,238,230,.12);
  /* a surface holds surfaces 4 in (--pad), and they stand 2 apart (--gap): the page, the main card, a column. Content inside a card insets 8 (controls) or 16 (text). */
  --pad:4px; --inset:8px; --text:16px; --gap:2px; /* text sits 16 in: the inset plus a button's own padding, so it lines up with button labels */
  --control:28px; --bar:calc(var(--control) + 2 * var(--inset)); /* a bar fits one control and its inset above and below */
  --r:14px; --r-in:6px; /* --r minus --inset, so inner corners run parallel */
  /* motion.rs Spring::TINT (critical, omega 36), settled in 256 ms */
  --tint-ease:linear(0.000 0%,0.079 5%,0.236 10%,0.403 15%,0.551 20%,0.671 25%,0.764 30%,0.833 35%,0.883 40%,0.919 45%,0.944 50%,0.962 55%,0.974 60%,0.983 65%,0.988 70%,0.992 75%,0.995 80%,0.997 85%,0.998 90%,0.998 95%,1 100%);
  --tint-t:256ms;
}
*{box-sizing:border-box;margin:0}
html,body{height:100%;background:var(--frame);color:var(--ink);font:400 14px/1.4 Geist,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
.num{font-variant-numeric:tabular-nums}
.mono{font-family:"Geist Mono",monospace}

.view{display:none;height:100%}
.view.on{display:flex}
/* 2 px everywhere: the window's edges, rail to panel, panel to panel */
.win{gap:var(--pad);padding:var(--pad)}
.rail{width:var(--control);flex:none;display:flex;flex-direction:column;align-items:center;gap:var(--gap);padding:0}
.rail a{width:var(--control);height:var(--control);display:grid;place-items:center;border-radius:var(--r-in);color:var(--muted)}
.rail a:hover{color:var(--ink)}
.rail a.on{color:var(--ink);background:var(--tint2)}
.rail .sp{flex:1}
.rail .home{position:relative}
.rail .home svg{width:18px}
/* on hover the letter fades to the app icon's clay */
.rail .home::before{content:"";position:absolute;left:calc((var(--control) - 18px) / 2);top:calc(var(--g) - var(--pad));width:18px;height:calc(18px * 82 / 120);background:linear-gradient(var(--brand-top),var(--brand-bottom));-webkit-mask:url(/brand/ace-mark.svg) center/contain no-repeat;mask:url(/brand/ace-mark.svg) center/contain no-repeat;opacity:0;transition:opacity var(--tint-t) var(--tint-ease)}
.rail .home:hover::before,.rail .home:focus-visible::before{opacity:1}
@media (prefers-reduced-motion:reduce){.rail .home::before{transition:none}}
/* the mark has as much space above it as below it, down to the first icon's drawing, which starts 6.7 inside its
   square ((control - 17) / 2 for the icon, 1.2 for the stroke inside its box) */
.rail .home{--g:14px;padding-top:calc(var(--g) - var(--pad));height:calc(2 * var(--g) + 18px * 82 / 120 - 6.7px - var(--pad) - var(--gap));place-items:start center}
.ico{width:16px;height:16px;flex:none;display:block;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
.rail .ico{width:17px;height:17px}
.av{width:var(--control);height:var(--control);border-radius:50%;background:#3a3833;display:grid;place-items:center;font:500 12px/1 Geist}

/* One main card: the bar and the content inside it, inset 6; the cards inside stand 2 apart. */
.panel{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--gap);overflow:hidden;background:var(--page);border-radius:var(--r);padding:0 var(--pad) var(--pad)}
.top{flex:none}
.phead{height:var(--bar);flex:none;display:flex;align-items:center;gap:8px;padding:0 calc(var(--inset) - var(--pad))}
.phead > h1:first-child{padding-left:calc(var(--text) - var(--inset))}
.phead h1{font:500 14px/1 Geist;display:flex;align-items:center;gap:8px}
.back{width:var(--control);height:var(--control);display:grid;place-items:center;border-radius:var(--r-in);color:var(--muted)}
.back:hover{background:var(--tint);color:var(--ink)}
button.back{border:0;background:none;font:inherit;cursor:pointer}
button.back:disabled{color:var(--faint);opacity:.5;cursor:default;background:none}
.hnav{display:flex;gap:2px;flex:none}
.hnav + h1{padding-left:4px}
.crumbs{min-width:0;white-space:nowrap}
.crumbs a{color:var(--muted)}
.crumbs a:hover{color:var(--ink)}
.crumbs .sep{color:var(--faint)}
.crumbs .here{display:inline-flex;align-items:center;gap:8px;min-width:0;overflow:hidden;text-overflow:ellipsis}
.key{font:400 12px/1 "Geist Mono",monospace;color:var(--muted)}
.sp{flex:1}
.btn{white-space:nowrap;flex:none;height:var(--control);padding:0 var(--inset);border-radius:var(--r-in);display:inline-flex;align-items:center;gap:8px;color:var(--ink);background:var(--tint);font:500 14px/1 Geist;cursor:default}
.btn:hover{background:var(--tint2)}
.btn.ghost{background:none;color:var(--muted)}
.btn.ghost:hover{background:var(--tint);color:var(--ink)}
.btn.primary{background:var(--ink);color:var(--page)}
.scroll{flex:1;min-height:0;overflow:auto}

/* the visibility of a board: said once, on the board */
.vis{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 9px 0 7px;border-radius:7px;font:500 12px/1 Geist;color:var(--muted);background:var(--tint)}
.vis .ico{width:14px;height:14px}
.vis.public{color:var(--success);background:color-mix(in srgb,var(--success) 14%,transparent)}

/* status marks: Linear's shapes, theme colours */
.sm{width:16px;height:16px;flex:none}

/* ---------- boards list ---------- */
.boards{display:flex;flex-direction:column;gap:var(--gap)}
.bcard{background:var(--card);border-radius:var(--r-in);padding:var(--text);display:grid;grid-template-columns:1fr 280px;gap:16px 28px;transition:background-color .15s;cursor:pointer}
.bcard:hover{background:var(--raised)}
.btop{grid-column:1/-1;display:flex;align-items:center;gap:10px}
.btop h2{font:500 14px/1 Geist}
.btop .link{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:14px}
.btop .link:hover{color:var(--ink)}
.btop .link .ico{width:14px;height:14px}
.meter{display:flex;height:6px;border-radius:3px;overflow:hidden;gap:2px;margin-bottom:12px}
.meter i{display:block;height:100%}
.counts{display:flex;flex-wrap:wrap;gap:6px 18px;color:var(--muted);font-size:14px}
.counts span{display:inline-flex;align-items:center;gap:6px}
.counts b{color:var(--ink);font-weight:500}
.recent{margin-top:14px;display:flex;flex-direction:column}
.recent a{height:32px;display:flex;align-items:center;gap:10px;padding:0 8px;margin:0 -8px;border-radius:7px}
.recent a:hover{background:var(--tint)}
.recent .key{width:62px;flex:none}
.recent .t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.recent .ago{color:var(--faint);font-size:12px}
.side{display:flex;flex-direction:column;gap:2px;align-self:start}
.fact{display:flex;justify-content:space-between;align-items:center;height:30px;font-size:14px;color:var(--muted);gap:12px}
.fact b{font-weight:500;color:var(--ink);display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.fact b .ico{width:14px;height:14px;color:var(--muted)}
.week{display:flex;gap:2px;margin-bottom:10px}
.week div{flex:1;background:var(--page);border-radius:4px;padding:10px 12px}
.week .v{font:500 14px/1 Geist;font-variant-numeric:tabular-nums}
.week .l{font-size:12px;color:var(--muted);margin-top:6px}

/* ---------- board page ---------- */
.sub{display:flex;align-items:center;gap:16px;padding:0 0 10px calc(var(--text) - var(--pad));margin-top:-2px;color:var(--muted);font-size:14px}
.sub b{color:var(--ink);font-weight:500}
.seg{display:inline-flex;height:var(--control);padding:2px;gap:2px;background:var(--tint);border-radius:var(--r-in)}
.seg a{height:calc(var(--control) - 4px);padding:0 10px;display:inline-flex;align-items:center;gap:6px;border-radius:4px;color:var(--muted);font:500 14px/1 Geist}
.seg a.on{background:var(--tint2);color:var(--ink)}
.cols{flex:1;min-height:0;display:flex;gap:var(--gap);overflow-x:auto}
.col{flex:1 1 0;min-width:200px;display:flex;flex-direction:column;min-height:0;background:var(--card);border-radius:var(--r-in)}
.colh{height:var(--bar);flex:none;display:flex;align-items:center;gap:8px;padding:0 var(--inset) 0 var(--text);font-weight:500}
.colh .n{font:400 12px/1 "Geist Mono";color:var(--muted)}
.colh .add{margin-left:auto;width:var(--control);height:var(--control);display:grid;place-items:center;border-radius:var(--r-in);color:var(--muted)}
.colh .add:hover{background:var(--tint);color:var(--ink)}
.cards{flex:1;overflow:auto;padding:0 var(--pad) var(--pad);display:flex;flex-direction:column;gap:var(--gap)}
.card{background:var(--page);border-radius:4px;padding:10px calc(var(--text) - var(--pad));display:flex;flex-direction:column;gap:8px;transition:background-color .15s}
.card:hover{background:#171716}
.card .t{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4}
.card .f{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}
.card .f .ago{margin-left:auto;color:var(--faint)}
.pri{display:inline-flex;align-items:flex-end;gap:1.5px;height:12px}
.pri i{width:3px;border-radius:1px;background:var(--faint)}
.pri i:nth-child(1){height:5px}.pri i:nth-child(2){height:8px}.pri i:nth-child(3){height:11px}
.pri.p1 i:nth-child(1),.pri.p2 i:nth-child(-n+2),.pri.p3 i{background:var(--muted)}
.urgent{width:14px;height:14px;border-radius:3px;background:var(--accent);color:var(--page);font:700 10px/14px Geist;text-align:center}
.votes{display:inline-flex;align-items:center;gap:3px}
.votes .ico{width:13px;height:13px}
.more{height:32px;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:12px}
.empty{color:var(--faint);font-size:14px;padding:4px calc(var(--text) - var(--inset)) 10px}

/* the share strip of a public board */
.share{display:flex;align-items:center;gap:12px;padding:0 0 var(--inset) calc(var(--text) - var(--pad));margin-top:-4px;font-size:14px;color:var(--muted)}
.share .url{color:var(--ink);font-family:"Geist Mono";font-size:12px}
.share .ico{width:15px;height:15px}

.switch{position:fixed;bottom:12px;left:50%;transform:translateX(-50%);display:flex;gap:2px;padding:3px;background:#000;border-radius:9px;z-index:9;font-size:12px}
.switch a{color:var(--muted);padding:6px 11px;border-radius:6px}
.switch a.on{background:var(--raised);color:var(--ink)}

/* scrollbars float over content, as in the desktop app: they take no width */
*{scrollbar-width:none}
::-webkit-scrollbar{display:none}
