@font-face { font-family: "Cormorant Garamond"; font-weight: 300; font-style: italic; src: url("/fonts/CormorantGaramond-LightItalic.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "Cormorant Garamond"; font-weight: 300; font-style: normal; src: url("/fonts/CormorantGaramond-Light.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "Cormorant Garamond"; font-weight: 400; font-style: normal; src: url("/fonts/CormorantGaramond-Regular.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "Cormorant Garamond"; font-weight: 400; font-style: italic; src: url("/fonts/CormorantGaramond-RegularItalic.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "IBM Plex Mono"; font-weight: 300; font-style: normal; src: url("/fonts/IBMPlexMono-Light.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "IBM Plex Mono"; font-weight: 300; font-style: italic; src: url("/fonts/IBMPlexMono-LightItalic.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "IBM Plex Mono"; font-weight: 400; font-style: normal; src: url("/fonts/IBMPlexMono-Regular.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "Inter Variable"; font-weight: 100 900; font-style: normal; src: url("/fonts/InterVariable.woff2") format("woff2-variations"); font-display: optional; } @font-face { font-family: "Inter"; font-weight: 400; font-style: normal; src: url("/fonts/Inter-Regular.woff2") format("woff2"); font-display: optional; } @font-face { font-family: "PeachScript"; font-weight: 400; font-style: normal; src: url("/fonts/PeachScript-Regular.otf") format("opentype"); font-display: block; } :root { --bg: #0C0A06; --s1: #131109; --s2: #1A1710; --s3: #221F14; --bg-1: var(--s1); --bg-2: var(--s2); --bg-3: var(--s3); --t0: #F0E8D8; --t1: rgba(240, 232, 216, 0.50); --t2: rgba(240, 232, 216, 0.20); --t3: rgba(240, 232, 216, 0.07); --t4: rgba(240, 232, 216, 0.04); --ac: #E8956D; --surface-card: rgba(240, 232, 216, 0.02); --surface-elevated: rgba(19, 17, 9, 0.88); --shell-top-solid: #000000; --shell-top-fade: rgba(12, 10, 6, 0.95); --shell-accent-a: color-mix(in srgb, var(--peach-accent) 8%, transparent); --shell-accent-b: color-mix(in srgb, var(--peach-accent) 6%, transparent); --breach: rgba(220, 80, 60, 0.7); --health: rgba(100, 210, 100, 0.75); --totp-tag: rgba(120, 175, 255, 0.75); --copy-shadow: 0 2px 8px rgba(0,0,0,0.55), 0 14px 48px rgba(0,0,0,0.7), 0 0 0 1px rgba(240,232,216,0.04); --font-display: "Cormorant Garamond", "Times New Roman", serif; --font-display-style: italic; --font-mono: "IBM Plex Mono", "SFMono-Regular", Menlo, monospace; --font-ui: "Inter Variable", "Inter", system-ui, sans-serif; /* Body-text scale; multiplied into key font-size declarations so users can request small / default / large without breaking dense layouts. XL was deliberately excluded — clips Vault and Health. */ --peach-text-scale: 1; --spring: cubic-bezier(0.16, 1, 0.3, 1); --retreat: cubic-bezier(0.4, 0, 1, 1); --settle: cubic-bezier(0.34, 1.56, 0.64, 1); --dur-enter: 500ms; --dur-exit: 280ms; --dur-micro: 150ms; --peach-bg: var(--bg); --peach-s1: var(--s1); --peach-s2: var(--s2); --peach-s3: var(--s3); --peach-t0: var(--t0); --peach-t1: var(--t1); --peach-t2: var(--t2); --peach-t3: var(--t3); --peach-t4: var(--t4); --peach-text: var(--peach-t4); --peach-text-dim: var(--peach-t1); --peach-bg-card: var(--surface-card); --peach-border: var(--peach-t3); --peach-mono: var(--font-mono); --peach-accent: var(--ac); --peach-accent-dim: color-mix(in srgb, var(--peach-accent) 25%, transparent); --peach-glow: #F49C702A; /* accent bloom behind buttons/illustrations — set by applyAccent() */ --peach-surface-tint: #F49C7009; /* accent tint on card surfaces — set by applyAccent() */ --peach-border-accent: #F49C7024; /* accent-tinted border for active states — set by applyAccent() */ --peach-breach: var(--breach); --peach-health-ok: var(--health); --peach-health-bad: var(--breach); --peach-totp-tag: var(--totp-tag); --peach-sync-ok: #5ebd5e; --peach-sync-busy: #c8a840; --peach-sync-off: var(--peach-t2); --peach-sync-err: var(--peach-breach); --peach-curve-arrival: var(--spring); --peach-curve-departure: var(--retreat); --peach-curve-settle: var(--settle); --peach-dur-80: 80ms; --peach-dur-150: 150ms; --peach-dur-280: 280ms; --peach-dur-380: 380ms; --peach-dur-500: 500ms; --peach-dur-600: 600ms; --peach-copy-clear: 1.4s; --peach-rune-idle: rgba(245, 240, 234, 0.16); /* Tell the browser engine which color schemes the UI knows how to render — this gets us correct form-control colors and scrollbar tinting in the WebView when the user follows the system theme. */ color-scheme: dark light; } .light { --bg: #EEE3CC; --s1: #E7DBC0; --s2: #E0D3B4; --s3: #D8CAA7; --bg-1: var(--s1); --bg-2: var(--s2); --bg-3: var(--s3); --t0: #221809; --t1: rgba(34, 24, 9, 0.82); --t2: rgba(34, 24, 9, 0.58); --t3: rgba(34, 24, 9, 0.12); --t4: rgba(34, 24, 9, 0.06); --surface-card: rgba(34, 24, 9, 0.03); --surface-elevated: rgba(238, 227, 204, 0.97); --shell-top-solid: rgba(238, 227, 204, 0.98); --shell-top-fade: rgba(231, 219, 192, 0.96); --shell-accent-a: color-mix(in srgb, var(--peach-accent) 6%, transparent); --shell-accent-b: color-mix(in srgb, var(--peach-accent) 3%, transparent); --copy-shadow: 0 2px 8px rgba(80, 56, 32, 0.10), 0 14px 48px rgba(80, 56, 32, 0.10), 0 0 0 1px rgba(28,25,21,0.05); --peach-rune-idle: rgba(34, 24, 9, 0.16); } /* ─── Display font choice ────────────────────────────────────────────── Default is Cormorant Italic. The non-italic options swap both the family AND the upright variant so display copy doesn't render as a synthesised slant on fonts that lack a true italic weight. */ [data-display-font="cormorant-italic"] { --font-display: "Cormorant Garamond", "Times New Roman", serif; --font-display-style: italic; } [data-display-font="cormorant"] { --font-display: "Cormorant Garamond", "Times New Roman", serif; --font-display-style: normal; } [data-display-font="inter"] { --font-display: "Inter Variable", "Inter", system-ui, sans-serif; --font-display-style: normal; } [data-display-font="system"] { --font-display: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --font-display-style: normal; } /* When the user picks an upright font, neutralise the italic-by-default styling on the display surfaces so the result feels intentional. */ :root[data-display-font="cormorant"] .peach-wordmark, :root[data-display-font="cormorant"] .peach-wordmark-wrap, :root[data-display-font="cormorant"] .peach-pro-headline, :root[data-display-font="cormorant"] .peach-pro-mini-badge, :root[data-display-font="inter"] .peach-wordmark, :root[data-display-font="inter"] .peach-wordmark-wrap, :root[data-display-font="inter"] .peach-pro-headline, :root[data-display-font="inter"] .peach-pro-mini-badge, :root[data-display-font="system"] .peach-wordmark, :root[data-display-font="system"] .peach-wordmark-wrap, :root[data-display-font="system"] .peach-pro-headline, :root[data-display-font="system"] .peach-pro-mini-badge { font-style: normal; } /* ─── Text size scaling ──────────────────────────────────────────────── Implemented via the `zoom` property on the popup body so every existing px-based font-size in popup.css scales proportionally without rewriting any individual rule. Capped at 1.08 — large enough to noticeably help, small enough that the dense Vault and Health views don't clip the fixed-size popup surface. The CSS custom property is also exposed so desktop / mobile builds can use a calc() multiplier on layouts that don't fit `zoom` semantics. */ [data-text-size="small"] { --peach-text-scale: 0.92; } [data-text-size="medium"] { --peach-text-scale: 1; } [data-text-size="large"] { --peach-text-scale: 1.08; } html[data-text-size="small"] body { zoom: 0.92; } html[data-text-size="large"] body { zoom: 1.08; } /* ─── Reduced motion ─────────────────────────────────────────────────── User-explicit setting OR OS-level prefers-reduced-motion both collapse transitions and ambient animations to instant. The user-explicit form takes precedence and works even when the OS hasn't been configured. */ [data-motion="reduce"] *, [data-motion="reduce"] *::before, [data-motion="reduce"] *::after { animation-duration: 0.001ms !important; animation-delay: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; transition-delay: 0.001ms !important; scroll-behavior: auto !important; }