/* Spec page styles. The spec body is rendered markdown, so these rules are global within the /spec route and target .spec-document content. */ /* The spec page supplies its own shell padding, so the global body gutter is removed while this stylesheet is loaded. */ body:has(.site-shell) { padding: 0; } .site-shell { position: relative; z-index: var(--dr-z-content); display: grid; grid-template-columns: minmax(250px, 320px) minmax(0, 1fr); gap: clamp(1.25rem, 3vw, 3rem); padding: clamp(1.25rem, 3vw, 3.5rem); max-width: 1600px; margin: 0 auto; } /* ── TOC toggle (mobile) ── */ .toc-toggle { display: none; position: sticky; top: 0; z-index: 3; width: 100%; border: 2px solid var(--dr-border-color); background: var(--dr-surface-elevated); color: var(--dr-text-primary); font-family: var(--dr-font-heading); font-variation-settings: 'slnt' 0; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; padding: var(--dr-space-md) var(--dr-space-lg); box-shadow: var(--dr-shadow-offset-md), var(--dr-shadow-inner-highlight); cursor: pointer; transition: transform var(--dr-transition-fast), box-shadow var(--dr-transition-fast); } .toc-toggle:hover { transform: translate(-2px, -2px); box-shadow: var(--dr-shadow-hover-md), var(--dr-shadow-glow-sm); } .toc-toggle:active { transform: translate(2px, 2px); box-shadow: var(--dr-shadow-active); } /* ── TOC panel ── */ .toc-panel { position: sticky; top: clamp(1rem, 3vw, 2rem); align-self: start; height: fit-content; } .toc-panel__inner { background: var(--dr-surface-elevated); border: var(--dr-border); border-radius: var(--dr-radius-lg); padding: var(--dr-space-lg); box-shadow: var(--dr-shadow-offset-md), var(--dr-shadow-inner-highlight); } .toc-eyebrow { font-family: var(--dr-font-heading); font-variation-settings: 'slnt' 0; font-size: var(--dr-text-xs); text-transform: uppercase; letter-spacing: 0.18em; color: var(--dr-text-quiet); margin: 0 0 var(--dr-space-xs); } .toc-panel__hint { font-size: var(--dr-text-sm); color: var(--dr-text-quiet); margin-bottom: var(--dr-space-md); } .toc-nav { font-size: var(--dr-text-sm); max-height: calc(100vh - 6rem); overflow: auto; padding-right: var(--dr-space-sm); } .toc-nav ul { list-style: none; margin: 0; padding-left: 0.95rem; } .toc-nav > ul { padding-left: 0; } .toc-nav li { margin: 0.2rem 0; } .toc-nav a { display: inline-flex; width: 100%; gap: var(--dr-space-sm); align-items: center; padding: 0.2rem 0.25rem; border-left: 2px solid transparent; color: var(--dr-text-secondary); text-decoration: none; transition: color var(--dr-transition-fast), border-color var(--dr-transition-fast); } .toc-nav a:hover { color: var(--dr-text-primary); border-color: var(--dr-surface-highlight); } .toc-nav a.is-active { color: var(--dr-text-primary); border-color: var(--dr-accent); } /* ── Main spec document ── */ .spec-main { min-width: 0; } .spec-document { background: var(--dr-surface-base); border-radius: var(--dr-radius-lg); padding: clamp(var(--dr-space-lg), 3vw, var(--dr-space-xl)); border: var(--dr-border); box-shadow: var(--dr-shadow-offset-lg), var(--dr-shadow-inner-highlight); } .spec-document h1, .spec-document h2, .spec-document h3, .spec-document h4, .spec-document h5, .spec-document h6 { font-family: var(--dr-font-heading); font-variation-settings: 'slnt' 0; font-weight: 700; letter-spacing: -0.02em; line-height: 1.3; } .spec-document h1 { color: var(--dr-heading); font-size: clamp(var(--dr-text-2xl), 5vw, var(--dr-text-3xl)); margin-top: 0; margin-bottom: var(--dr-space-sm); } .spec-document h2 { color: var(--dr-heading); font-size: var(--dr-text-xl); margin-top: var(--dr-space-xl); margin-bottom: var(--dr-space-md); text-transform: uppercase; letter-spacing: 0.1em; border-left: var(--dr-border-thick); border-left-color: var(--dr-accent); padding-left: var(--dr-space-md); } .spec-document h3 { color: var(--dr-heading-sub); font-size: var(--dr-text-lg); margin-top: var(--dr-space-xl); margin-bottom: var(--dr-space-sm); } .spec-document h4 { color: var(--dr-heading-sub); font-size: var(--dr-text-lg); font-weight: 600; margin-top: var(--dr-space-lg); margin-bottom: var(--dr-space-sm); } .spec-document h5 { color: var(--dr-text-primary); font-size: var(--dr-text-lg); font-weight: 600; margin-top: var(--dr-space-lg); margin-bottom: var(--dr-space-sm); } .spec-document h6 { color: var(--dr-text-secondary); font-size: var(--dr-text-base); font-weight: 600; margin-top: var(--dr-space-md); margin-bottom: var(--dr-space-sm); } .spec-lede { font-size: var(--dr-text-lg); color: var(--dr-text-quiet); max-width: 60ch; line-height: 1.45; } /* ── Meta bar ── */ .spec-meta { display: flex; flex-wrap: wrap; gap: var(--dr-space-md); margin: var(--dr-space-lg) 0 var(--dr-space-xl); padding: var(--dr-space-md) var(--dr-space-lg); background: var(--dr-surface-elevated); border: var(--dr-border); box-shadow: var(--dr-shadow-offset-sm), var(--dr-shadow-inner-highlight); } .spec-meta__item { flex: 1 1 200px; } .spec-meta__label { display: block; font-family: var(--dr-font-heading); font-variation-settings: 'slnt' 0; font-size: var(--dr-text-xs); text-transform: uppercase; letter-spacing: 0.2em; color: var(--dr-text-primary); margin-bottom: var(--dr-space-xs); } .spec-meta__value { font-size: var(--dr-text-base); font-weight: 600; } .status-chip { display: inline-flex; align-items: center; gap: var(--dr-space-sm); padding: var(--dr-space-xs) var(--dr-space-md); border-radius: var(--dr-radius); background: var(--dr-surface-secondary); border: var(--dr-border-subtle); } .status-chip::before { content: ''; width: 0.45rem; height: 0.45rem; border-radius: 50%; background: var(--dr-accent); box-shadow: 0 0 12px var(--dr-glow-accent); } .hero-actions { display: flex; flex-wrap: wrap; gap: var(--dr-space-sm); margin-left: auto; align-items: center; } /* ── Spec document content ── */ .spec-document table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; background: var(--dr-surface-elevated); border: var(--dr-border); } .spec-document th, .spec-document td { padding: var(--dr-space-sm) var(--dr-space-md); text-align: center; border-bottom: var(--dr-border-subtle); } .spec-document th { background: var(--dr-surface-elevated); font-family: var(--dr-font-heading); font-variation-settings: 'slnt' 0; font-weight: 700; font-size: var(--dr-text-xs); color: var(--dr-heading); text-transform: uppercase; letter-spacing: 0.2em; border-bottom: var(--dr-border); } .spec-document tbody tr:last-child td { border-bottom: none; } .spec-document tbody tr:hover { background: var(--dr-surface-highlight); } .spec-document pre { margin: var(--dr-space-md) 0; padding: var(--dr-space-lg); background: var(--dr-surface-secondary); color: var(--dr-text-primary); border-radius: var(--dr-radius); overflow: auto; font-family: var(--dr-font-mono); font-size: var(--dr-text-sm); line-height: 1.5; border: var(--dr-border); border-left: var(--dr-border-thick); border-left-color: var(--dr-border-color-warm); hyphens: none; } .spec-document code { font-family: var(--dr-font-mono); } .spec-document blockquote { margin: var(--dr-space-lg) 0; padding: var(--dr-space-sm) var(--dr-space-md); background: var(--core-meltdown-40); color: var(--dr-text-secondary); font-style: italic; } .spec-document hr { border: none; border-top: var(--dr-border); margin: var(--dr-space-xl) auto; width: 50%; } .spec-document ul, .spec-document ol { padding-left: 1.5rem; } .spec-document li { margin: 0.35rem 0; } /* ── Color lab (palette card grids above the source tables) ── */ .table-scroll { overflow-x: auto; margin-top: var(--dr-space-md); } .color-lab { margin-bottom: var(--dr-space-xl); } .color-lab .color-grid, .color-lab .ansi-grid { display: grid; gap: var(--dr-space-sm); margin: var(--dr-space-lg) 0 var(--dr-space-sm); } .color-lab .color-grid { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); } .color-card { padding: var(--dr-space-sm); border: var(--dr-border); border-radius: var(--dr-radius); background: var(--dr-surface-secondary); display: flex; flex-direction: column; gap: var(--dr-space-sm); box-shadow: var(--dr-shadow-offset-sm), var(--dr-shadow-inner-highlight); transition: transform var(--dr-transition-fast), box-shadow var(--dr-transition-fast); } .color-card:hover { transform: translate(-2px, -2px); box-shadow: var(--dr-shadow-hover-md), var(--dr-shadow-glow-sm); } .color-card:active { transform: translate(2px, 2px); box-shadow: var(--dr-shadow-active); } .color-card__swatch { border-radius: var(--dr-radius); height: 80px; border: var(--dr-border-subtle); } .color-card__code { font-family: var(--dr-font-mono); font-size: var(--dr-text-xs); letter-spacing: 0.05em; } .color-card__note { opacity: 0.7; font-size: var(--dr-text-sm); } .color-lab .ansi-grid { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); } .color-lab .ansi-chip { display: flex; align-items: center; gap: var(--dr-space-sm); padding: var(--dr-space-sm) var(--dr-space-md); background: var(--dr-surface-secondary); border: var(--dr-border); border-radius: var(--dr-radius); box-shadow: var(--dr-shadow-offset-sm), var(--dr-shadow-inner-highlight); transition: transform var(--dr-transition-fast), box-shadow var(--dr-transition-fast); } .color-lab .ansi-chip:hover { transform: translate(-2px, -2px); box-shadow: var(--dr-shadow-hover-md), var(--dr-shadow-glow-sm); } .color-lab .ansi-chip:active { transform: translate(2px, 2px); box-shadow: var(--dr-shadow-active); } .color-lab .ansi-chip span { font-size: var(--dr-text-sm); } .legend-chip { display: inline-block; width: 0.85rem; height: 0.85rem; border-radius: var(--dr-radius-sm); flex-shrink: 0; } .color-lab .ansi-chip .legend-chip { width: 1.25rem; height: 1.25rem; } /* ── Responsive ── */ @media (max-width: 1100px) { .site-shell { grid-template-columns: 1fr; } .toc-toggle { display: block; } .toc-panel { position: fixed; top: 0; bottom: 0; left: 0; width: 320px; max-width: 85vw; transform: translateX(-100%); transition: transform var(--dr-duration-normal) var(--dr-ease-out-expo); z-index: 4; } .toc-panel.is-open { transform: translateX(0); } .toc-panel__inner { height: 100%; border-radius: 0; } } @media (max-width: 640px) { .spec-meta { flex-direction: column; } /* Basis applies to height in column direction. Items size to content. */ .spec-meta__item { flex: none; } .hero-actions { width: 100%; justify-content: flex-start; } .spec-document pre { font-size: var(--dr-text-xs); } } @media (prefers-reduced-motion: reduce) { .toc-toggle, .color-card, .ansi-chip { transition: none; } .toc-toggle:hover, .toc-toggle:active, .color-card:hover, .color-card:active, .ansi-chip:hover, .ansi-chip:active { transform: none; } } @media print { body:has(.site-shell) { background: white; color: black; } .site-shell, .spec-document { padding: 0; background: none; box-shadow: none; border: none; } .toc-panel, .toc-toggle, .spec-live-demo, .color-grid, .ansi-grid { display: none; } }