| @import url('https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=JetBrains+Mono:wght@400;600;700&family=Inter:wght@400;500;600;700&display=swap'); |
|
|
| :root { |
| color-scheme: light; |
| --ink: #1a1a1a; |
| --ink-soft: #3a3632; |
| --muted: #8a8178; |
| --paper: #f5f0e8; |
| --paper-deep: #ebe4d8; |
| --surface: #faf7f2; |
| --line: #d4cbbf; |
| --line-faint: #e8e1d5; |
| --accent: #c4421a; |
| --accent-hover: #a8350f; |
| --accent-glow: rgba(196, 66, 26, 0.08); |
| --teal: #2a7a6e; |
| --teal-soft: rgba(42, 122, 110, 0.08); |
| --focus: #c4421a; |
| --shadow-sm: 0 1px 3px rgba(26, 26, 26, 0.06); |
| --shadow-md: 0 8px 24px rgba(26, 26, 26, 0.08); |
| --serif: 'DM Serif Display', Georgia, 'Times New Roman', serif; |
| --sans: 'Inter', ui-sans-serif, system-ui, sans-serif; |
| --mono: 'JetBrains Mono', 'Cascadia Code', 'Fira Code', monospace; |
| } |
|
|
| * { box-sizing: border-box; } |
| html { scroll-behavior: smooth; } |
|
|
| body { |
| margin: 0; |
| background: var(--paper); |
| color: var(--ink); |
| font-family: var(--sans); |
| line-height: 1.6; |
| -webkit-font-smoothing: antialiased; |
| } |
|
|
| button, input, select, output { font: inherit; } |
|
|
| button { |
| border: 1px solid var(--line); |
| background: var(--surface); |
| color: var(--ink); |
| cursor: pointer; |
| transition: border-color 0.15s, background 0.15s, color 0.15s; |
| } |
|
|
| button:hover { border-color: var(--accent); } |
|
|
| button:focus-visible, |
| a:focus-visible, |
| input:focus-visible, |
| select:focus-visible { |
| outline: 2px solid var(--focus); |
| outline-offset: 2px; |
| } |
|
|
| ::selection { |
| background: var(--accent); |
| color: #fff; |
| } |
|
|
| |
| .topbar { |
| position: sticky; |
| top: 0; |
| z-index: 20; |
| display: grid; |
| grid-template-columns: max-content 1fr max-content; |
| align-items: center; |
| gap: 24px; |
| min-height: 64px; |
| padding: 10px clamp(20px, 5vw, 56px); |
| border-bottom: 2px solid var(--ink); |
| background: var(--paper); |
| } |
|
|
| .brand { |
| display: inline-flex; |
| align-items: center; |
| gap: 12px; |
| color: var(--ink); |
| font-weight: 700; |
| text-decoration: none; |
| letter-spacing: -0.02em; |
| } |
|
|
| .brand-mark { |
| display: grid; |
| width: 34px; |
| height: 34px; |
| place-items: center; |
| background: var(--accent); |
| color: #fff; |
| font-family: var(--mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| letter-spacing: 0.05em; |
| } |
|
|
| .topnav { |
| display: flex; |
| justify-content: center; |
| gap: clamp(14px, 3vw, 32px); |
| } |
|
|
| .topnav a { |
| position: relative; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.75rem; |
| font-weight: 600; |
| text-decoration: none; |
| text-transform: uppercase; |
| letter-spacing: 0.1em; |
| transition: color 0.15s; |
| } |
|
|
| .topnav a::after { |
| content: ''; |
| position: absolute; |
| bottom: -4px; |
| left: 0; |
| width: 0; |
| height: 2px; |
| background: var(--accent); |
| transition: width 0.2s; |
| } |
|
|
| .topnav a:hover { color: var(--ink); } |
| .topnav a:hover::after { width: 100%; } |
|
|
| .reader-toggle { |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| min-width: 180px; |
| min-height: 40px; |
| gap: 10px; |
| border: 2px solid var(--ink); |
| padding: 0 18px; |
| font-family: var(--mono); |
| font-size: 0.78rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.04em; |
| } |
|
|
| .toggle-dot { |
| width: 10px; |
| height: 10px; |
| border-radius: 999px; |
| background: var(--muted); |
| transition: background 0.2s; |
| } |
|
|
| .reader-toggle[aria-pressed="true"] { |
| background: var(--ink); |
| color: var(--paper); |
| border-color: var(--ink); |
| } |
|
|
| .reader-toggle[aria-pressed="true"] .toggle-dot { |
| background: #5eea8d; |
| box-shadow: 0 0 8px rgba(94, 234, 141, 0.5); |
| } |
|
|
| |
| .article-shell { |
| display: grid; |
| grid-template-columns: minmax(0, 740px) minmax(280px, 360px); |
| gap: clamp(32px, 6vw, 80px); |
| width: min(1200px, calc(100% - 40px)); |
| margin: 56px auto 140px; |
| align-items: start; |
| } |
|
|
| .article { min-width: 0; } |
|
|
| .generator-shell { |
| display: grid; |
| grid-template-columns: minmax(280px, 420px) minmax(0, 680px); |
| gap: clamp(32px, 6vw, 72px); |
| width: min(1180px, calc(100% - 40px)); |
| margin: 56px auto 120px; |
| align-items: start; |
| } |
|
|
| .generator-controls { |
| position: sticky; |
| top: 88px; |
| } |
|
|
| .generator-form { |
| display: grid; |
| gap: 10px; |
| margin-top: 28px; |
| } |
|
|
| .generator-form label { |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.08em; |
| } |
|
|
| .generator-input-row { |
| display: grid; |
| grid-template-columns: 1fr max-content; |
| gap: 8px; |
| } |
|
|
| .generator-input-row input { |
| min-height: 44px; |
| border: 1px solid var(--line); |
| background: var(--surface); |
| color: var(--ink); |
| padding: 0 12px; |
| } |
|
|
| .generator-input-row button, |
| .route-action { |
| min-height: 44px; |
| border: 2px solid var(--ink); |
| padding: 0 16px; |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| } |
|
|
| .route-action { |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| color: var(--ink); |
| text-decoration: none; |
| background: var(--surface); |
| } |
|
|
| .generated-article { |
| min-width: 0; |
| } |
|
|
| .generated-sections { |
| display: grid; |
| gap: 8px; |
| } |
|
|
| |
| .kicker { |
| display: inline-block; |
| margin: 0 0 20px; |
| padding: 4px 12px; |
| background: var(--accent); |
| color: #fff; |
| font-family: var(--mono); |
| font-size: 0.7rem; |
| font-weight: 700; |
| letter-spacing: 0.1em; |
| text-transform: uppercase; |
| } |
|
|
| h1, h2 { line-height: 1.05; letter-spacing: -0.03em; } |
|
|
| h1 { |
| max-width: 13ch; |
| margin: 0; |
| font-family: var(--serif); |
| font-size: clamp(3.2rem, 9vw, 6.2rem); |
| font-weight: 400; |
| font-style: normal; |
| } |
|
|
| h2 { |
| position: relative; |
| margin: 80px 0 20px; |
| padding-left: 20px; |
| font-family: var(--serif); |
| font-size: clamp(1.8rem, 3.6vw, 2.8rem); |
| font-weight: 400; |
| } |
|
|
| h2::before { |
| content: ''; |
| position: absolute; |
| left: 0; |
| top: 6px; |
| bottom: 6px; |
| width: 4px; |
| background: var(--accent); |
| } |
|
|
| .dek { |
| max-width: 620px; |
| margin: 28px 0 40px; |
| color: var(--ink-soft); |
| font-size: clamp(1.15rem, 2.2vw, 1.4rem); |
| line-height: 1.55; |
| } |
|
|
| p, blockquote, figcaption { font-size: 1.02rem; } |
|
|
| blockquote { |
| position: relative; |
| margin: 40px 0; |
| padding: 24px 28px; |
| background: var(--paper-deep); |
| border-left: none; |
| font-family: var(--serif); |
| font-size: 1.3rem; |
| font-style: italic; |
| color: var(--ink-soft); |
| line-height: 1.5; |
| } |
|
|
| blockquote::before { |
| content: ''; |
| position: absolute; |
| left: 0; |
| top: 0; |
| bottom: 0; |
| width: 4px; |
| background: var(--accent); |
| } |
|
|
| figure { margin: 0; } |
|
|
| img { |
| display: block; |
| max-width: 100%; |
| } |
|
|
| .hero-figure, |
| .inline-figure { |
| overflow: hidden; |
| border: 1px solid var(--line); |
| background: var(--surface); |
| } |
|
|
| .hero-figure img, |
| .inline-figure img { |
| width: 100%; |
| aspect-ratio: 16 / 9; |
| object-fit: cover; |
| filter: contrast(1.02) saturate(0.95); |
| } |
|
|
| #generatedThumbnail { |
| aspect-ratio: 1 / 1; |
| object-fit: contain; |
| } |
|
|
| figcaption { |
| padding: 12px 16px 14px; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| letter-spacing: 0.01em; |
| line-height: 1.5; |
| border-top: 1px solid var(--line-faint); |
| } |
|
|
| .inline-figure { margin-top: 28px; } |
|
|
| |
| .status-panel { |
| position: sticky; |
| top: 88px; |
| border: 1px solid var(--line); |
| border-top: 3px solid var(--ink); |
| background: var(--surface); |
| padding: 24px 20px; |
| } |
|
|
| .status-panel h2 { |
| margin: 0 0 20px; |
| padding: 0; |
| font-family: var(--mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.12em; |
| color: var(--muted); |
| } |
|
|
| .status-panel h2::before { display: none; } |
|
|
| .status-panel h3 { |
| margin: 0; |
| font-family: var(--mono); |
| font-size: 0.7rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.1em; |
| color: var(--ink-soft); |
| } |
|
|
| dl { |
| display: grid; |
| grid-template-columns: 1fr 1fr; |
| gap: 14px 16px; |
| margin: 0; |
| padding-bottom: 20px; |
| border-bottom: 1px solid var(--line-faint); |
| } |
|
|
| dt { |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.65rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.08em; |
| } |
|
|
| dd { |
| margin: 3px 0 0; |
| font-family: var(--mono); |
| font-size: 0.82rem; |
| font-weight: 600; |
| color: var(--ink); |
| word-break: break-word; |
| } |
|
|
| .live-narration { |
| margin-top: 20px; |
| padding: 14px 16px; |
| border: 1px solid var(--line); |
| background: var(--paper); |
| font-family: var(--mono); |
| font-size: 0.82rem; |
| line-height: 1.5; |
| } |
|
|
| |
| .history-header, |
| .award-header, |
| .demo-script-header, |
| .submission-header, |
| .budget-header, |
| .runtime-header, |
| .image-receipt-header { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 8px; |
| margin-top: 24px; |
| padding-bottom: 8px; |
| border-bottom: 1px solid var(--line-faint); |
| } |
|
|
| .history-header button, |
| .submission-header button { |
| min-height: 28px; |
| border: 1px solid var(--line); |
| padding: 0 10px; |
| font-family: var(--mono); |
| font-size: 0.68rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| color: var(--muted); |
| background: transparent; |
| } |
|
|
| .history-header button:hover, |
| .submission-header button:hover { |
| color: var(--accent); |
| border-color: var(--accent); |
| } |
|
|
| .budget-header span, |
| .runtime-header span, |
| .image-receipt-header span, |
| .submission-header span, |
| .demo-script-header span { |
| font-family: var(--mono); |
| font-size: 0.68rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| color: var(--teal); |
| } |
|
|
| |
| .transcript-log { |
| display: grid; |
| gap: 8px; |
| max-height: 320px; |
| margin: 10px 0 0; |
| padding: 0; |
| overflow: auto; |
| list-style: none; |
| } |
|
|
| .transcript-log li { |
| border: 1px solid var(--line-faint); |
| padding: 10px 12px; |
| background: var(--paper); |
| } |
|
|
| .transcript-meta { |
| display: flex; |
| justify-content: space-between; |
| gap: 8px; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.66rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| } |
|
|
| .transcript-text { |
| margin: 6px 0 0; |
| font-size: 0.88rem; |
| line-height: 1.5; |
| } |
|
|
| |
| .award-list, |
| .demo-script-list, |
| .demo-api-check-list, |
| .budget-list, |
| .runtime-list, |
| .image-receipt-list { |
| display: grid; |
| gap: 8px; |
| margin: 10px 0 0; |
| padding: 0; |
| list-style: none; |
| } |
|
|
| .demo-script-list { padding-left: 0; } |
|
|
| .award-list li, |
| .demo-script-list li, |
| .budget-list li, |
| .runtime-list li, |
| .image-receipt-list li { |
| border: 1px solid var(--line-faint); |
| padding: 10px 12px; |
| background: var(--paper); |
| } |
|
|
| .demo-api-check-list li { |
| display: grid; |
| grid-template-columns: auto 1fr; |
| gap: 4px 8px; |
| border: 1px solid var(--line-faint); |
| padding: 10px 12px; |
| background: var(--paper); |
| } |
|
|
| .demo-script-title, |
| .budget-row, |
| .runtime-row, |
| .image-receipt-row, |
| .award-title { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 8px; |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.04em; |
| } |
|
|
| .budget-pill, |
| .runtime-pill, |
| .image-receipt-pill { |
| font-family: var(--mono); |
| font-size: 0.66rem; |
| font-weight: 700; |
| padding: 2px 8px; |
| letter-spacing: 0.04em; |
| } |
|
|
| .budget-pill { |
| background: var(--accent-glow); |
| color: var(--accent); |
| border: 1px solid rgba(196, 66, 26, 0.2); |
| } |
|
|
| .runtime-pill { |
| background: var(--teal-soft); |
| color: var(--teal); |
| border: 1px solid rgba(42, 122, 110, 0.2); |
| } |
|
|
| .status-pill { |
| font-family: var(--mono); |
| font-size: 0.66rem; |
| font-weight: 700; |
| padding: 1px 6px; |
| letter-spacing: 0.04em; |
| text-transform: uppercase; |
| } |
|
|
| .status-online { |
| background: rgba(34, 140, 60, 0.12); |
| color: #1d7a34; |
| border: 1px solid rgba(34, 140, 60, 0.25); |
| } |
|
|
| .status-fallback { |
| background: rgba(160, 140, 60, 0.1); |
| color: #7a6a20; |
| border: 1px solid rgba(160, 140, 60, 0.25); |
| } |
|
|
| .status-offline { |
| background: rgba(180, 50, 50, 0.1); |
| color: #a03030; |
| border: 1px solid rgba(180, 50, 50, 0.25); |
| } |
|
|
| .image-receipt-pill { |
| background: rgba(180, 150, 60, 0.1); |
| color: #7a6520; |
| border: 1px solid rgba(180, 150, 60, 0.2); |
| } |
|
|
| .award-status { |
| font-family: var(--mono); |
| font-size: 0.66rem; |
| font-weight: 700; |
| padding: 2px 8px; |
| background: var(--teal-soft); |
| color: var(--teal); |
| border: 1px solid rgba(42, 122, 110, 0.2); |
| } |
|
|
| .demo-script-title span:last-child { |
| font-family: var(--mono); |
| font-size: 0.66rem; |
| font-weight: 700; |
| padding: 2px 8px; |
| background: var(--teal-soft); |
| color: var(--teal); |
| border: 1px solid rgba(42, 122, 110, 0.2); |
| } |
|
|
| .demo-script-list p, |
| .budget-list p, |
| .runtime-list p, |
| .image-receipt-list p { |
| margin: 6px 0 0; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.74rem; |
| line-height: 1.5; |
| overflow-wrap: anywhere; |
| } |
|
|
| .award-evidence { |
| margin: 6px 0 0; |
| color: var(--muted); |
| font-size: 0.84rem; |
| line-height: 1.5; |
| } |
|
|
| .demo-api-check-list span { |
| font-family: var(--mono); |
| color: var(--accent); |
| font-size: 0.7rem; |
| font-weight: 700; |
| } |
|
|
| .demo-api-check-list code { |
| font-family: var(--mono); |
| font-size: 0.74rem; |
| overflow-wrap: anywhere; |
| } |
|
|
| .demo-api-check-list p { |
| grid-column: 1 / -1; |
| margin: 0; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.74rem; |
| } |
|
|
| .demo-api-command { |
| grid-column: 1 / -1; |
| display: block; |
| padding: 8px 10px; |
| background: var(--ink); |
| color: #c8e6c9; |
| font-family: var(--mono); |
| font-size: 0.72rem; |
| white-space: normal; |
| line-height: 1.5; |
| } |
|
|
| |
| .reader-bar { |
| position: fixed; |
| bottom: clamp(16px, 3vw, 36px); |
| left: 50%; |
| transform: translateX(-50%); |
| z-index: 30; |
| display: flex; |
| flex-wrap: wrap; |
| align-items: center; |
| justify-content: center; |
| gap: 8px; |
| box-sizing: border-box; |
| width: min(1200px, calc(100% - 32px)); |
| min-height: 64px; |
| padding: 10px 16px; |
| border: 2px solid var(--ink); |
| background: var(--surface); |
| box-shadow: 4px 4px 0 var(--ink); |
| } |
|
|
| .reader-bar[hidden] { display: none; } |
|
|
| .reader-bar button { |
| min-width: 80px; |
| min-height: 40px; |
| border: 1px solid var(--line); |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.06em; |
| } |
|
|
| .reader-bar button:hover { |
| background: var(--ink); |
| color: var(--paper); |
| border-color: var(--ink); |
| } |
|
|
| .reader-bar label { |
| display: inline-flex; |
| align-items: center; |
| flex: 0 1 auto; |
| gap: 8px; |
| min-width: 0; |
| color: var(--muted); |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.04em; |
| } |
|
|
| .reader-bar select { |
| min-height: 40px; |
| border: 1px solid var(--line); |
| background: var(--surface); |
| color: var(--ink); |
| font-family: var(--mono); |
| font-size: 0.76rem; |
| padding: 0 10px; |
| } |
|
|
| .reader-bar input[type="range"] { |
| width: clamp(96px, 12vw, 160px); |
| min-width: 80px; |
| } |
|
|
| .reader-bar output { |
| min-width: 48px; |
| font-family: var(--mono); |
| font-weight: 700; |
| font-size: 0.82rem; |
| color: var(--ink); |
| } |
|
|
| |
| .speakable { |
| scroll-margin: 100px; |
| transition: background 0.2s, outline-color 0.2s; |
| } |
|
|
| .reader-active { |
| outline: 3px solid var(--accent); |
| outline-offset: 6px; |
| background: var(--accent-glow); |
| } |
|
|
| |
| @media (max-width: 900px) { |
| .topbar { |
| grid-template-columns: 1fr; |
| gap: 10px; |
| } |
|
|
| .topnav { |
| justify-content: flex-start; |
| overflow-x: auto; |
| } |
|
|
| .reader-toggle { width: 100%; } |
|
|
| .article-shell { |
| grid-template-columns: 1fr; |
| } |
|
|
| .generator-shell { |
| grid-template-columns: 1fr; |
| } |
|
|
| .generator-controls { |
| position: static; |
| } |
|
|
| .generator-input-row { |
| grid-template-columns: 1fr; |
| } |
|
|
| h1 { |
| max-width: 14ch; |
| font-size: clamp(2.8rem, 15vw, 4.5rem); |
| } |
|
|
| .status-panel { |
| position: static; |
| border-top: 3px solid var(--ink); |
| } |
|
|
| .reader-bar { |
| flex-wrap: wrap; |
| justify-content: flex-start; |
| box-shadow: 3px 3px 0 var(--ink); |
| width: calc(100% - 32px); |
| } |
|
|
| .reader-bar button { |
| min-width: 70px; |
| flex: 1 1 28%; |
| } |
| } |
|
|