@import "tailwindcss"; /* * Theme tokens, font faces, type scale, spacing, eink overrides. * Single source-of-truth lives in _shared-app-kit/tokens.css. * Copy it into this app on scaffold; do not edit downstream — sync upstream. */ @import "./tokens.css"; /* * Tailwind v4 — wire token vars into Tailwind's color/font namespaces * so utilities like text-text, bg-bg-card, font-display work. */ @theme inline { --font-sans: var(--font-body); --font-display: var(--font-display); --font-mono: var(--font-mono); --color-bg: var(--bg); --color-bg-card: var(--bg-card); --color-bg-elevated: var(--bg-elevated); --color-border: var(--border); --color-border-strong: var(--border-strong); --color-text: var(--text); --color-text-muted: var(--text-muted); --color-text-faint: var(--text-faint); --color-text-accent: var(--text-accent); --color-text-on-accent: var(--text-on-accent); --color-accent: var(--accent); } html { color-scheme: light dark; -webkit-font-smoothing: antialiased; } body { margin: 0; padding: 0; } /* ─── Keyboard shortcut UI (palette, help, kbd) ────────────────────── */ .sc-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.45); display: flex; justify-content: center; align-items: flex-start; padding: 12vh var(--space-4) var(--space-4); z-index: 100; } .sc-palette, .sc-help, .sc-search { width: 100%; max-width: 560px; background: var(--bg-elevated); border: 1px solid var(--border-strong); border-radius: var(--radius-lg); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.25); overflow: hidden; } .sc-palette-input { width: 100%; padding: var(--space-4); background: transparent; color: var(--text); font-family: var(--font-body); font-size: var(--text-lg); border: 0; border-bottom: 1px solid var(--border); outline: none; } .sc-palette-input::placeholder { color: var(--text-muted); } .sc-palette-list { list-style: none; margin: 0; padding: var(--space-1); max-height: 50vh; overflow-y: auto; } .sc-palette-empty { padding: var(--space-4); color: var(--text-muted); text-align: center; font-size: var(--text-sm); } .sc-palette-item { width: 100%; display: grid; grid-template-columns: 110px 1fr auto; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-3); background: transparent; color: var(--text); text-align: left; border: 0; border-radius: var(--radius); font-family: var(--font-body); font-size: var(--text-base); cursor: pointer; } .sc-palette-item:hover, .sc-palette-item:focus-visible { background: var(--bg-hover); outline: none; } .sc-palette-group { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.08em; } .sc-palette-label { color: var(--text); } .sc-help-header { display: flex; justify-content: space-between; align-items: center; padding: var(--space-4) var(--space-5); border-bottom: 1px solid var(--border); } .sc-help-header h2 { margin: 0; font-family: var(--font-display); font-size: var(--text-xl); } .sc-help-close { background: transparent; border: 0; color: var(--text-muted); font-size: var(--text-2xl); line-height: 1; cursor: pointer; padding: 0 var(--space-2); } .sc-help section { padding: var(--space-3) var(--space-5); } .sc-help h3 { font-family: var(--font-mono); font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.1em; color: var(--text-muted); margin: 0 0 var(--space-2); } .sc-help ul { list-style: none; margin: 0; padding: 0; } .sc-help li { display: flex; justify-content: space-between; align-items: center; padding: var(--space-2) 0; border-bottom: 1px solid var(--border); } .sc-help li:last-child { border-bottom: 0; } .sc-search-hint { margin: 0; padding: var(--space-3) var(--space-4); color: var(--text-faint); font-size: var(--text-sm); } .sc-kbd, kbd.sc-kbd { font-family: var(--font-mono); font-size: var(--text-xs); padding: 2px var(--space-2); background: var(--bg-card); color: var(--text); border: 1px solid var(--border-strong); border-radius: var(--radius-sm); white-space: nowrap; } /* ─── Newspaper edition (/print) ───────────────────────────────────── */ .paper { max-width: 820px; margin: 0 auto; padding: var(--space-8) var(--space-6); background: #fff; color: #111; font-family: var(--font-body); } .paper-masthead { text-align: center; border-bottom: 3px double #111; padding-bottom: var(--space-3); margin-bottom: var(--space-4); } .paper-masthead h1 { font-family: var(--font-display); font-size: 52px; line-height: 1.02; margin: 0; letter-spacing: -0.01em; } .paper-dateline { display: flex; justify-content: space-between; font-family: var(--font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.12em; border-top: 1px solid #111; border-bottom: 1px solid #111; padding: 4px 0; margin-top: var(--space-2); } /* ── Weather hero ── full width: current block + today's day-part strip ── */ .paper-wx { border: 1.5px solid #111; display: flex; margin-bottom: var(--space-4); } .paper-wx-now { display: flex; align-items: center; gap: 16px; padding: 12px 18px; border-right: 1.5px solid #111; min-width: 300px; } .paper-wx-temp { font-family: var(--font-display); font-weight: 700; font-size: 56px; line-height: 0.86; } .paper-wx-loc { font-family: var(--font-mono); font-weight: 700; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: 2px; } .paper-wx-cond { font-family: var(--font-display); font-size: 19px; } .paper-wx-alert { font-family: var(--font-mono); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; border: 1.5px solid #111; border-bottom: none; padding: 4px 8px; background: #eee; } .paper-wx-hl { font-family: var(--font-mono); font-size: 10px; color: #555; margin-top: 4px; } .paper-wx-astro { font-family: var(--font-mono); font-size: 9px; color: #777; margin-top: 2px; } .paper-wx-strip { flex: 1; display: flex; } .paper-wx-seg { flex: 1; text-align: center; padding: 10px 4px; border-left: 1px solid #ddd; } .paper-wx-seg:first-child { border-left: none; } .paper-wx-seg-t { font-family: var(--font-mono); font-weight: 700; font-size: 9px; letter-spacing: 0.12em; text-transform: uppercase; color: #555; } .paper-wx-seg-g { font-size: 20px; line-height: 1.3; margin: 3px 0; } .paper-wx-seg-d { font-family: var(--font-display); font-weight: 700; font-size: 21px; line-height: 1; } .paper-wx-seg-p { font-family: var(--font-mono); font-size: 9px; color: #555; margin-top: 3px; } /* ── Personal sections ── classic two-column newspaper flow ── */ .paper-grid { column-count: 2; column-gap: 22px; } .paper-card { border: 1px solid #ddd; border-left: 4px solid #111; border-radius: 7px; padding: 9px 12px 10px; margin-bottom: 11px; break-inside: avoid; } /* Brief cards may be taller than a column; let them split across columns/pages (individual stories stay whole via .paper-story break-inside: avoid). */ .paper-card.paper-flow { break-inside: auto; } .paper-card > h2 { font-family: var(--font-display); font-weight: 700; font-size: 16px; display: flex; align-items: baseline; gap: 7px; border-bottom: 1.5px solid #111; padding-bottom: 4px; margin: 0 0 6px; break-after: avoid; } .paper-card > h2 .kick { margin-left: auto; font-family: var(--font-mono); font-weight: 500; font-size: 8px; letter-spacing: 0.13em; text-transform: uppercase; color: #777; } .paper-card h3 { font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; letter-spacing: 0.1em; margin: 6px 0 3px; color: #555; } .paper-item { margin-bottom: 4px; font-size: 12px; line-height: 1.4; break-inside: avoid; } .paper-item .src { color: #555; font-size: 10px; } .paper-empty { color: #777; font-style: italic; } .paper-item .yr { font-family: var(--font-mono); font-weight: 700; } .paper-todo.done { text-decoration: line-through; color: #777; } /* ── Screamer brief stories (inside a .paper-card, flowing in the columns) ── */ .paper-story { margin-bottom: 10px; break-inside: avoid; } .paper-story .t { font-weight: 700; font-size: 12.5px; line-height: 1.28; margin-bottom: 3px; } .paper-story .s { font-size: 11px; line-height: 1.4; color: #222; margin-bottom: 3px; } .paper-story .src { font-family: var(--font-mono); font-weight: 500; font-size: 8.5px; letter-spacing: 0.04em; text-transform: uppercase; color: #777; } @media print { nav, [role="status"], nextjs-portal { display: none !important; } html, body { background: #fff !important; } .paper { padding: 0; max-width: none; } @page { size: Letter; margin: 16mm 14mm; } }