@import "tailwindcss"; /* Self-hosted font */ @font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 400; font-display: swap; src: url("/fonts/jetbrains-mono-400.woff2") format("woff2"); } @font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 700; font-display: swap; src: url("/fonts/jetbrains-mono-700.woff2") format("woff2"); } /* Map Catppuccin CSS vars to Tailwind theme tokens */ @theme { --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace; --color-base: var(--ctp-base); --color-mantle: var(--ctp-mantle); --color-crust: var(--ctp-crust); --color-text: var(--ctp-text); --color-subtext: var(--ctp-subtext0); --color-overlay: var(--ctp-overlay0); --color-line: var(--ctp-surface0); --color-blue: var(--ctp-blue); --color-mauve: var(--ctp-mauve); --color-green: var(--ctp-green); --color-yellow: var(--ctp-yellow); --color-peach: var(--ctp-peach); --color-red: var(--ctp-red); --color-teal: var(--ctp-teal); } /* Catppuccin Frappé — dark, default */ :root, [data-theme="frappe"] { --ctp-base: #303446; --ctp-mantle: #292c3c; --ctp-crust: #232634; --ctp-text: #c6d0f5; --ctp-subtext0: #a5adce; --ctp-overlay0: #737994; --ctp-surface0: #414559; --ctp-blue: #8caaee; --ctp-mauve: #ca9ee6; --ctp-green: #a6d189; --ctp-yellow: #e5c890; --ctp-peach: #ef9f76; --ctp-red: #e78284; --ctp-teal: #81c8be; } /* Catppuccin Latte — light */ [data-theme="latte"] { --ctp-base: #eff1f5; --ctp-mantle: #e6e9ef; --ctp-crust: #dce0e8; --ctp-text: #4c4f69; --ctp-subtext0: #6c6f85; --ctp-overlay0: #9ca0b0; --ctp-surface0: #ccd0da; --ctp-blue: #1e66f5; --ctp-mauve: #8839ef; --ctp-green: #40a02b; --ctp-yellow: #df8e1d; --ctp-peach: #fe640b; --ctp-red: #d20f39; --ctp-teal: #179299; } html { scroll-behavior: smooth; font-family: var(--font-mono); background: var(--color-base); color: var(--color-text); } /* Theme toggle icons: shown based on active theme, set before paint by the head bootstrap */ [data-icon] { display: none; } [data-theme="frappe"] [data-icon="frappe"] { display: inline; } [data-theme="latte"] [data-icon="latte"] { display: inline; } .blink { display: inline-block; width: 0.5rem; height: 1em; background: var(--color-green); vertical-align: -1px; animation: blink 1s steps(1) infinite; } @keyframes blink { 50% { opacity: 0; } }