:root,:root[data-theme=paper]{--bg: #f5f1ea;--bg-2: #efe9dc;--paper: #f5f1ea;--paper-2: #efe9dc;--ink: #1a1a1a;--ink-2: #3d3d3d;--ink-3: #6b6b6b;--ink-4: #9a9a9a;--bg-3: #efe9dc;--border: #e8e1d4;--border-strong: #c9c0ad;--forest: #2d4a3a;--rust: #c97b3c;--red: #b54834;--gold: #b8941f;--accent: var(--forest);--accent-on: #f5f1ea;--bg-hover: rgba(26, 26, 26, .04);--bg-active: rgba(26, 26, 26, .08)}:root[data-theme=dark]{--bg: #1a1a1a;--bg-2: #232323;--paper: #1a1a1a;--paper-2: #232323;--ink: #f5f1ea;--ink-2: #c9c0ad;--ink-3: #9a9a9a;--ink-4: #6b6b6b;--bg-3: #232323;--border: #2d2d2d;--border-strong: #3d3d3d;--forest: #6b8c7a;--rust: #e09a5f;--red: #d36651;--gold: #d4af4a;--accent: var(--forest);--accent-on: #f5f1ea;--bg-hover: rgba(245, 241, 234, .05);--bg-active: rgba(245, 241, 234, .09)}:root[data-density=comfortable]{--row-h: 36px;--pad-y: 10px;--pad-x: 14px}:root[data-density=compact]{--row-h: 28px;--pad-y: 6px;--pad-x: 10px}:root{--fs-xs: 11px;--fs-sm: 13px;--fs-md: 15px;--fs-lg: 24px;--fs-xl: 36px;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}html,body{margin:0;height:100%}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}input,textarea{font:inherit;color:inherit}a{color:inherit;text-decoration:none}.app{display:grid;grid-template-columns:220px 1fr;grid-template-rows:38px 1fr 24px;height:100vh;width:100vw;overflow:hidden}.topbar{grid-column:1 / -1;display:flex;align-items:center;gap:14px;padding:0 14px;border-bottom:1px solid var(--border);background:var(--paper);font-size:var(--fs-xs)}.wordmark{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:-.02em;color:var(--ink)}.wordmark-mark{width:14px;height:14px;background:var(--accent);position:relative}.wordmark-mark:after{content:"";position:absolute;inset:3px 3px 3px 6px;background:var(--paper)}.topbar-spacer{flex:1}.cmdk{display:flex;align-items:center;gap:8px;border:1px solid var(--border);padding:4px 10px 4px 8px;color:var(--ink-3);background:var(--paper-2);border-radius:2px;min-width:280px}.cmdk:hover{color:var(--ink-2);border-color:var(--border-strong)}.kbd{font-size:var(--fs-xs);border:1px solid var(--border);padding:1px 5px;border-radius:2px;background:var(--paper);color:var(--ink-3);line-height:1.2}.mono-tag{font-size:var(--fs-xs);color:var(--ink-3);padding:1px 5px;border:1px solid var(--border);border-radius:2px;background:var(--paper)}.running-timer{display:flex;align-items:center;gap:10px;padding:4px 12px 4px 10px;background:var(--forest);color:var(--paper);border-radius:2px;font-variant-numeric:tabular-nums}.running-timer .pulse{width:8px;height:8px;border-radius:50%;background:var(--rust);box-shadow:0 0 0 0 var(--rust);animation:pulse 1.6s infinite}@keyframes pulse{0%{box-shadow:0 0 #c97b3c99}70%{box-shadow:0 0 0 6px #c97b3c00}to{box-shadow:0 0 #c97b3c00}}.timer-stop{width:10px;height:10px;background:var(--paper);margin-left:4px}.user-chip{display:flex;align-items:center;gap:8px;padding:4px 8px;color:var(--ink-2);border-radius:2px}.user-chip:hover,.user-chip:focus-visible{background:var(--paper-2);color:var(--ink)}.user-chip:focus-visible{outline:1px solid var(--accent);outline-offset:2px}.avatar{width:20px;height:20px;border-radius:50%;background:var(--rust);color:var(--paper);display:grid;place-items:center;font-size:10px;font-weight:700}.sidebar{border-right:1px solid var(--border);background:var(--paper);padding:14px 0;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.side-section{padding:4px 14px;color:var(--ink-4);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;margin-top:12px}.side-section:first-child{margin-top:0}.nav-item{display:flex;align-items:center;gap:10px;padding:6px 14px;color:var(--ink-2);font-size:var(--fs-sm);cursor:pointer;border-left:2px solid transparent}.nav-item:hover{background:#1a1a1a0a;color:var(--ink)}.nav-item[aria-current=page]{background:var(--paper-2);color:var(--ink);border-left-color:var(--accent);font-weight:600}.nav-item .glyph{width:14px;color:var(--ink-3);text-align:center}.nav-item[aria-current=page] .glyph{color:var(--accent)}.nav-item .count{margin-left:auto;font-size:var(--fs-xs);color:var(--ink-4)}.pin-row{display:flex;align-items:center;gap:8px;padding:4px 14px 4px 18px;cursor:pointer;color:var(--ink-2)}.pin-row:hover{background:#1a1a1a0a}.pin-dot{width:8px;height:8px;border:1px solid var(--ink-3)}.pin-dot.solid{background:currentColor;border-color:currentColor}.content{overflow-y:auto;background:var(--paper);display:flex;flex-direction:column}.page-head{display:flex;align-items:flex-end;justify-content:space-between;padding:22px 28px 14px;gap:18px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--paper);z-index:2}.crumb{font-size:var(--fs-xs);color:var(--ink-3);letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px}.page-title{font-size:var(--fs-xl);letter-spacing:-.03em;font-weight:700;line-height:1;display:flex;align-items:baseline;gap:14px}.page-title .meta{font-size:var(--fs-xs);color:var(--ink-3);font-weight:400;letter-spacing:0}.btn{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;background:var(--paper);border:1px solid var(--border-strong);color:var(--ink);font-size:var(--fs-xs);border-radius:2px;cursor:pointer;transition:background .12s,color .12s}.btn:hover{background:var(--paper-2)}.btn.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn.primary:hover{background:var(--ink-2)}[data-theme=dark] .btn.primary{background:var(--ink);color:var(--paper)}.btn.ghost{border-color:transparent}.btn.ghost:hover{background:#1a1a1a0a}.filter-row{display:flex;align-items:center;gap:6px;padding:10px 28px;border-bottom:1px solid var(--border);font-size:var(--fs-xs);background:var(--paper)}.chip{padding:4px 10px;border:1px solid transparent;color:var(--ink-3);border-radius:2px;cursor:pointer}.chip:hover{color:var(--ink)}.chip[aria-pressed=true]{background:var(--paper-2);color:var(--ink);border-color:var(--border)}.filter-divider{width:1px;height:18px;background:var(--border);margin:0 4px}.search{margin-left:auto;display:flex;align-items:center;gap:8px;border:1px solid var(--border);padding:4px 10px;border-radius:2px;background:var(--paper-2);color:var(--ink-3);min-width:220px}.search input{background:transparent;border:0;outline:0;width:100%;color:var(--ink)}.input,.select,.textarea{width:100%;min-height:var(--row-h);border:1px solid var(--border);background:var(--bg-2);color:var(--ink);padding:6px 10px;border-radius:2px;outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--border-strong);background:var(--bg)}.input[readonly]{color:var(--ink-3);background:var(--bg-3)}.settings-page{padding:24px;display:grid;gap:24px;max-width:980px}.settings-section{border-bottom:1px solid var(--border);padding-bottom:20px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}.field{display:flex;flex-direction:column;gap:6px;font-size:var(--fs-sm);color:var(--ink-2)}.field>span{font-size:var(--fs-xs);color:var(--ink-3);text-transform:uppercase}.span-2{grid-column:span 2}.error{color:var(--red);font-size:var(--fs-xs)}@media(max-width:760px){.settings-page{padding:16px}.form-grid{grid-template-columns:1fr}.span-2{grid-column:span 1}}.palette-backdrop{position:fixed;inset:0;z-index:50;background:color-mix(in oklch,var(--ink) 22%,transparent);display:grid;place-items:start center;padding-top:12vh}.palette{width:min(620px,calc(100vw - 32px));border:1px solid var(--border-strong);background:var(--bg);box-shadow:0 18px 60px color-mix(in oklch,var(--ink) 18%,transparent)}.palette-search{display:flex;align-items:center;gap:10px;padding:12px;border-bottom:1px solid var(--border)}.palette-search input{flex:1;border:0;outline:0;background:transparent;color:var(--ink);font:inherit}.palette-list{max-height:360px;overflow:auto;padding:6px}.palette-row{width:100%;display:grid;grid-template-columns:72px 1fr;gap:10px;align-items:baseline;border:0;background:transparent;color:var(--ink);text-align:left;padding:9px 10px;cursor:pointer}.palette-row[aria-selected=true],.palette-row:hover{background:var(--bg-2)}.palette-type{color:var(--ink-4);font-size:var(--fs-xs);text-transform:uppercase}.palette-main{display:flex;flex-direction:column;gap:2px;min-width:0}.palette-main strong,.palette-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.palette-main small{color:var(--ink-3);font-size:var(--fs-xs)}.palette-empty{padding:20px 12px;color:var(--ink-3);font-size:var(--fs-sm)}.section-title{font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin:0 0 12px;display:flex;align-items:center;gap:10px}.section-title:after{content:"";flex:1;height:1px;background:var(--border)}.proj-glyph{width:18px;height:18px;background:var(--accent);flex-shrink:0;display:grid;place-items:center;color:var(--paper);font-size:10px;font-weight:700}.proj-glyph.alt-1{background:var(--rust)}.proj-glyph.alt-2{background:var(--ink)}.proj-glyph.alt-3{background:var(--gold)}.proj-glyph.alt-4{background:var(--red)}.icon-btn{width:24px;height:24px;display:grid;place-items:center;color:var(--ink-3);border-radius:2px}.icon-btn:hover{background:#1a1a1a0a;color:var(--ink)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);padding:2px 7px;border:1px solid var(--border-strong);border-radius:2px;color:var(--ink-2);letter-spacing:.02em;white-space:nowrap}.badge.dot:before{content:"";width:6px;height:6px;background:currentColor;border-radius:50%}.badge.active{color:var(--forest);border-color:color-mix(in oklch,var(--forest) 40%,var(--border))}.badge.archived{color:var(--ink-3)}.badge.over{color:var(--red);border-color:color-mix(in oklch,var(--red) 40%,var(--border))}.badge.warn{color:var(--rust);border-color:color-mix(in oklch,var(--rust) 40%,var(--border))}.badge.paid{color:var(--forest);border-color:color-mix(in oklch,var(--forest) 40%,var(--border))}.badge.sent{color:var(--gold);border-color:color-mix(in oklch,var(--gold) 40%,var(--border))}.badge.draft{color:var(--ink-3)}.badge.overdue{color:var(--red);border-color:color-mix(in oklch,var(--red) 40%,var(--border));background:color-mix(in oklch,var(--red) 8%,transparent)}.budget-cell{width:240px}.budget-bar{position:relative;height:6px;background:var(--bg-3);border-radius:1px;overflow:hidden}.budget-fill{position:absolute;left:0;top:0;bottom:0;background:var(--forest)}.budget-fill.warn{background:var(--rust)}.budget-fill.over{background:var(--red)}.budget-cell .label{display:flex;justify-content:space-between;font-size:var(--fs-xs);margin-bottom:4px;color:var(--ink-3)}.budget-cell .label .pct{color:var(--ink);font-weight:600}.budget-cell .label .pct.warn{color:var(--rust)}.budget-cell .label .pct.over{color:var(--red)}.ascii-dot{color:var(--ink-4);margin:0 6px}.dim{color:var(--ink-4)}.muted{color:var(--ink-3)}.statusbar{grid-column:1 / -1;display:flex;align-items:center;gap:14px;padding:0 14px;border-top:1px solid var(--border);background:var(--paper-2);font-size:var(--fs-xs);color:var(--ink-3)}.statusbar .sep{color:var(--border-strong)}.statusbar .dot{width:6px;height:6px;border-radius:50%;background:var(--forest);display:inline-block;margin-right:6px;box-shadow:0 0 0 2px color-mix(in oklch,var(--forest) 20%,transparent)}.statusbar .spacer{flex:1}.statusbar .link{color:var(--ink-2);cursor:pointer}.statusbar .link:hover{color:var(--ink)}.content::-webkit-scrollbar,.sidebar::-webkit-scrollbar,.invoice-doc-wrap::-webkit-scrollbar,.invoice-side::-webkit-scrollbar{width:10px;height:10px}.content::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb,.invoice-doc-wrap::-webkit-scrollbar-thumb,.invoice-side::-webkit-scrollbar-thumb{background:var(--border);border:2px solid var(--paper);border-radius:5px}.table-wrap{padding:0 0 32px}.table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.table thead th{text-align:left;font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:500;padding:10px 12px;border-bottom:1px solid var(--border);background:var(--paper);position:sticky;top:0}.table tbody td{padding:0 12px;height:var(--row-h);border-bottom:1px solid var(--border);vertical-align:middle;color:var(--ink-2)}.table tbody tr{cursor:pointer}.table tbody tr:hover td{background:var(--bg-hover);color:var(--ink)}.table tbody td.strong{color:var(--ink);font-weight:600}.table tbody td.num,.table thead th.num{text-align:right}.table .check{width:28px}.table .pad-l{padding-left:28px}.table .pad-r{padding-right:28px}.proj-cell{display:flex;align-items:center;gap:10px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-bottom:1px solid var(--border);background:var(--paper)}.stat{padding:18px 24px;border-right:1px solid var(--border);display:flex;flex-direction:column;gap:6px}.stat:last-child{border-right:0}.stat .label{font-size:var(--fs-xs);color:var(--ink-3);letter-spacing:.06em;text-transform:uppercase}.stat .val{font-size:var(--fs-xl);letter-spacing:-.02em;font-weight:600;font-variant-numeric:tabular-nums;line-height:1;display:flex;align-items:baseline;gap:6px}.stat .val .unit{font-size:var(--fs-sm);color:var(--ink-3);font-weight:400}.stat .delta{font-size:var(--fs-xs);color:var(--ink-3);display:flex;align-items:center;gap:6px}.delta.up{color:var(--forest)}.delta.down{color:var(--red)}.spark{height:16px;width:100%;display:block;opacity:.85}.spark path{fill:none;stroke:var(--forest);stroke-width:1.2}.spark .area{fill:color-mix(in oklch,var(--forest) 12%,transparent);stroke:none}.divider-row{display:flex;align-items:center;gap:10px;margin:14px 0 8px;color:var(--ink-3);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase}.divider-row:after{content:"";flex:1;height:1px;background:var(--border)}.detail-grid{display:grid;grid-template-columns:1fr 320px;gap:0;border-bottom:1px solid var(--border)}.detail-main{padding:24px 28px;min-width:0}.detail-side{border-left:1px solid var(--border);padding:24px;background:var(--paper-2)}.kv{display:grid;grid-template-columns:100px 1fr;gap:4px 10px;font-size:var(--fs-sm)}.kv dt{color:var(--ink-3);letter-spacing:.04em;text-transform:uppercase;font-size:var(--fs-xs);align-self:center}.kv dd{margin:0;color:var(--ink)}.burndown{height:140px;width:100%;border:1px solid var(--border);background:var(--paper);position:relative}.task-list{display:flex;flex-direction:column}.task-row{display:grid;grid-template-columns:18px 1fr 90px 90px 200px;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:var(--fs-sm)}.task-row:hover{background:var(--bg-hover)}.task-check{width:14px;height:14px;border:1px solid var(--border-strong);border-radius:2px;cursor:pointer;display:grid;place-items:center}.task-check.done{background:var(--forest);border-color:var(--forest);color:var(--accent-on);font-size:10px}.task-name{color:var(--ink)}.task-name.done{color:var(--ink-3);text-decoration:line-through}.task-num{text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-2)}.task-bar{position:relative;height:4px;background:var(--bg-3);border-radius:1px}.task-bar-fill{position:absolute;inset:0 auto 0 0;background:var(--forest)}.timer-stage{padding:32px 28px;display:grid;grid-template-columns:1fr 360px;gap:28px}.timer-hero{border:1px solid var(--border);background:var(--paper-2);padding:28px}.timer-display{font-size:96px;letter-spacing:-.04em;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink)}.timer-display .ms{color:var(--ink-3);font-size:56px}.timer-meta{display:flex;gap:18px;align-items:center;margin-top:14px;color:var(--ink-3);font-size:var(--fs-sm)}.entry-row{display:grid;grid-template-columns:12px 1fr 90px 80px 80px 40px;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border);font-size:var(--fs-sm)}.entry-row .bar-color{width:4px;height:24px;background:var(--accent)}.entry-row .desc{color:var(--ink)}.entry-row .desc .sub{color:var(--ink-3);font-size:var(--fs-xs);display:block;margin-top:2px}.entry-row .time{color:var(--ink-2);font-variant-numeric:tabular-nums;text-align:right}.entry-row .dur{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums;text-align:right}.entry-row .billable{color:var(--forest);text-align:right;font-variant-numeric:tabular-nums}.entry-row .billable.no{color:var(--ink-4)}.invoice-page{display:grid;grid-template-columns:1fr 320px;flex:1;min-height:0}.invoice-doc-wrap{padding:36px;background:var(--paper-2);overflow-y:auto}.invoice-doc{max-width:760px;margin:0 auto;background:var(--paper);border:1px solid var(--border);padding:56px;box-shadow:0 1px 0 var(--border),0 8px 24px #0000000a}.invoice-side{border-left:1px solid var(--border);padding:24px;background:var(--paper);overflow-y:auto}.invoice-h{font-size:28px;letter-spacing:-.03em;font-weight:700;margin:0}.invoice-line{display:grid;grid-template-columns:1fr 80px 80px 100px;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:var(--fs-sm);align-items:baseline}.invoice-line .num{text-align:right;font-variant-numeric:tabular-nums}.invoice-totals{display:grid;grid-template-columns:1fr 120px;gap:4px 12px;margin-top:18px;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.invoice-totals .label{text-align:right;color:var(--ink-3)}.invoice-totals .v{text-align:right}.invoice-totals .grand{font-weight:700;font-size:18px;color:var(--ink);padding-top:8px;border-top:1px solid var(--border)}.invoice-totals .grand-l{text-align:right;padding-top:8px;border-top:1px solid var(--border);font-weight:600;color:var(--ink)}.client-card{border:1px solid var(--border);padding:18px;background:var(--paper)}.client-card:hover{background:var(--paper-2)}.heat{display:grid;grid-template-columns:repeat(20,12px);gap:3px}.heat .sq{width:12px;height:12px;background:var(--bg-3);border-radius:1px}.heat .sq.l1{background:color-mix(in oklch,var(--forest) 25%,var(--bg-3))}.heat .sq.l2{background:color-mix(in oklch,var(--forest) 50%,var(--bg-3))}.heat .sq.l3{background:color-mix(in oklch,var(--forest) 75%,var(--bg-3))}.heat .sq.l4{background:var(--forest)}html,body{background:var(--paper);color:var(--ink);font-family:var(--font-mono);font-size:var(--fs-sm)}
