/* ============================================================================ */ /* Inline code */ /* ============================================================================ */ code { font-size: 14px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; border-radius: 0.3em; border: 1px solid var(--border-color); color: var(--text-color); font-weight: 400; line-height: 1.5; } p code, .note code { white-space: nowrap; padding: calc(var(--spacing-1)/3) calc(var(--spacing-1)/2); } /* ============================================================================ */ /* Shiki code blocks */ /* ============================================================================ */ .astro-code { position: relative; border: 1px solid var(--border-color); background-color: var(--surface-bg) !important; border-radius: 6px; padding: 0; font-size: 14px; --code-gutter-width: 2.5em; } /* Shared sizing & horizontal scroll for code containers */ .astro-code, section.content-grid pre { width: 100%; max-width: 100%; box-sizing: border-box; -webkit-overflow-scrolling: touch; padding: 0; margin-bottom: var(--block-spacing-y) !important; overflow-x: auto; } section.content-grid pre.astro-code { margin: 0; padding: var(--spacing-1) 0; } section.content-grid pre code { display: inline-block; min-width: 100%; } /* Wrap long lines only on small screens to prevent layout overflow */ @media (--bp-content-collapse) { .astro-code, section.content-grid pre { white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; } section.content-grid pre code { white-space: pre-wrap; display: block; min-width: 0; } } /* Themes */ [data-theme='light'] .astro-code { background-color: var(--code-bg); } /* Apply token color from per-span vars exposed by Shiki dual themes */ [data-theme='light'] .astro-code span { color: var(--shiki-light) !important; } [data-theme='dark'] .astro-code span { color: var(--shiki-dark) !important; } /* Optional: boost contrast for light theme */ [data-theme='light'] .astro-code { --shiki-foreground: #24292f; --shiki-background: #ffffff; } /* Line numbers for Shiki-rendered code blocks */ .astro-code code { counter-reset: astro-code-line; display: block; background: none; border: none; } .astro-code .line { display: inline-block; position: relative; padding-left: calc(var(--code-gutter-width) + var(--spacing-1)); min-height: 1.25em; } .astro-code .line::before { counter-increment: astro-code-line; content: counter(astro-code-line); position: absolute; left: 0; top: 0; bottom: 0; width: calc(var(--code-gutter-width)); text-align: right; color: var(--muted-color); opacity: .3; user-select: none; padding-right: var(--spacing-2); border-right: 1px solid var(--border-color); } .astro-code .line:empty::after { content: "\00a0"; } /* Hide trailing empty line added by parsers */ .astro-code code>.line:last-child:empty { display: none; } /* ============================================================================ */ /* Non-Shiki pre wrapper (rehype) */ /* ============================================================================ */ .code-card { position: relative; } .code-card .code-copy { position: absolute; top: var(--spacing-2); right: var(--spacing-2); z-index: 3; display: none; } .code-card:hover .code-copy { display: block; } .code-card .code-copy svg { width: 16px; height: 16px; display: block; fill: currentColor; } .code-card pre { margin: 0 0 var(--spacing-1); } /* When no copy button (single-line), keep the label in the top-right corner */ .code-card.no-copy::after { top: 8px; right: 8px; } /* ============================================================================ */ /* Contextual overrides */ /* ============================================================================ */ /* Inside Accordions: remove padding and border on code containers */ .accordion .astro-code { padding: 0; border: none; } .accordion .astro-code { margin-bottom: 0 !important; } .accordion .code-output { border: none; border-top: 1px solid var(--border-color) !important; } .accordion pre { margin-bottom: 0 !important; } .accordion .code-card pre { margin: 0 !important; } /* ============================================================================ */ /* Language/extension vignette (bottom-right, discreet) */ /* ============================================================================ */ /* .astro-code::after { content: attr(data-language); position: absolute; right: 0; bottom: 0; font-size: 10px; line-height: 1; text-transform: uppercase; color: var(--muted-color); background: var(--surface-bg); border-top: 1px solid var(--border-color); border-left: 1px solid var(--border-color); opacity: 1; border-radius: 8px 0 0 0; padding: 4px 6px; pointer-events: none; } */ /* Fallback if Shiki uses data-lang instead of data-language */ /* .astro-code[data-lang]::after { content: attr(data-lang); } .astro-code[data-language="typescript"]::after { content: "ts"; } .astro-code[data-language="tsx"]::after { content: "tsx"; } .astro-code[data-language="javascript"]::after, .astro-code[data-language="node"]::after, .astro-code[data-language="jsx"]::after { content: "js"; } .astro-code[data-language="python"]::after { content: "py"; } .astro-code[data-language="bash"]::after, .astro-code[data-language="shell"]::after, .astro-code[data-language="sh"]::after { content: "sh"; } .astro-code[data-language="markdown"]::after { content: "md"; } .astro-code[data-language="yaml"]::after, .astro-code[data-language="yml"]::after { content: "yml"; } .astro-code[data-language="html"]::after { content: "html"; } .astro-code[data-language="css"]::after { content: "css"; } .astro-code[data-language="json"]::after { content: "json"; } */ /* In Accordions, keep same bottom-right placement */ .accordion .astro-code::after { right: 0; bottom: 0; } /* ============================================================================ */ /* Results blocks glued to code blocks */ /* ============================================================================ */ .code-output { position: relative; background: oklch(from var(--code-bg) calc(l - 0.005) c h); border: 1px solid var(--border-color); border-radius: 6px; margin-top: 0; margin-bottom: var(--block-spacing-y); padding: 0 !important; } .code-output pre { padding: calc(var(--spacing-3) + 6px) var(--spacing-3) var(--spacing-3) var(--spacing-3) !important; } /* If immediately following a code container, keep tight visual connection */ .code-card+.code-output, .astro-code+.code-output, section.content-grid pre+.code-output { margin-top: 0; border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; box-shadow: inset 0 8px 12px -12px rgba(0, 0, 0, 0.15); } /* Remove bottom margin on code when immediately followed by results */ .astro-code:has(+ .code-output) { margin-bottom: 0 !important; } .code-card:has(+ .code-output) .astro-code { margin-bottom: 0 !important; } section.content-grid pre:has(+ .code-output) { margin-bottom: 0 !important; } /* Remove bottom border radius on code when followed by results */ .astro-code:has(+ .code-output) { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .code-card:has(+ .code-output) .astro-code { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } section.content-grid pre:has(+ .code-output) { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } /* Small top-left label */ .code-output::before { content: "Output"; position: absolute; top: 0; right: 0; font-size: 10px; line-height: 1; color: var(--muted-color); text-transform: uppercase; letter-spacing: 0.04em; border-top: none; border-right: none; border-radius: 0 0 0 6px; padding: 10px 10px; } /* Very subtle top shadow so results feels under the code */ .code-output {} .code-output> :where(*):first-child { margin-top: 0 !important; } .code-output> :where(*):last-child { margin-bottom: 0 !important; } /* ============================================================================ */ /* Optional filename tag above code blocks */ /* ============================================================================ */ .code-filename { display: inline-block; font-size: 12px; line-height: 1; color: var(--muted-color); background: var(--surface-bg); border: 1px solid var(--border-color); border-bottom: none; border-radius: 6px 6px 0 0; padding: 4px 8px; margin: 0; } .code-filename+.code-card .astro-code, .code-filename+.astro-code, .code-filename+section.content-grid pre { border-top-left-radius: 0; border-top-right-radius: 6px; }