@layer theme, base, components, utilities; @import "tailwindcss/theme.css" layer(theme); @import "tailwindcss/utilities.css" layer(utilities) important; @source "./"; @custom-variant dark (&:where(.theme-dark, .theme-dark *)); .bcal-root { --background: var(--background-primary); --foreground: var(--text-normal); --card: var(--background-primary-alt); --card-foreground: var(--text-normal); --popover: var(--background-secondary); --popover-foreground: var(--text-normal); --primary: var(--color-accent); --primary-foreground: var(--text-on-accent); --secondary: var(--background-modifier-hover); --secondary-foreground: var(--text-normal); --muted: var(--background-modifier-hover); --muted-foreground: var(--text-muted); --accent: var(--background-modifier-hover); --accent-foreground: var(--text-normal); --destructive: var(--text-error); --destructive-foreground: var(--text-on-accent); --border: var(--background-modifier-border); --input: var(--background-modifier-border); --ring: var(--color-accent); --icon: var(--text-muted); --signal: var(--color-accent); --note: oklch(0.52 0.13 78); --status-new: var(--color-accent); --status-done: oklch(0.55 0.14 155); --status-skip: var(--text-faint); --status-reply: oklch(0.55 0.14 235); --status-snooze: oklch(0.66 0.13 75); --status-meeting: oklch(0.5 0.2 300); --status-work: oklch(0.55 0.13 195); --sidebar: var(--background-secondary); --radius: 0.45rem; } .theme-dark .bcal-root { --note: oklch(0.84 0.14 88); --status-done: oklch(0.74 0.14 155); --status-reply: oklch(0.72 0.13 235); --status-snooze: oklch(0.8 0.13 75); --status-meeting: oklch(0.72 0.16 300); --status-work: oklch(0.75 0.12 195); } @theme inline { --font-sans: var(--font-interface); --text-xs: 0.75rem; --text-sm: 0.8125rem; --text-base: 0.875rem; --text-lg: 1rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --color-icon: var(--icon); --color-signal: var(--signal); --color-note: var(--note); --color-sidebar: var(--sidebar); --color-status-new: var(--status-new); --color-status-done: var(--status-done); --color-status-skip: var(--status-skip); --color-status-reply: var(--status-reply); --color-status-snooze: var(--status-snooze); --color-status-meeting: var(--status-meeting); --color-status-work: var(--status-work); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive-foreground: var(--destructive-foreground); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); --radius-sm: calc(var(--radius) * 0.6); --radius-md: calc(var(--radius) * 0.8); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) * 1.4); --radius-2xl: calc(var(--radius) * 1.8); } .bcal-root { box-sizing: border-box; height: 100%; /* The phone's navbar floats over the leaf rather than shortening it, so the last row of the list would sit underneath it. The view measures how much and sets this; on a desktop it stays 0. */ padding-bottom: var(--bcal-inset-bottom, 0px); font-family: var(--font-interface); font-size: var(--text-sm); color: var(--foreground); background: var(--background); } /* Portal layer for menus: a zero-sized anchor at body level, above the sidedocks. */ .bcal-portal { position: fixed; top: 0; left: 0; width: 0; height: 0; background: transparent; z-index: var(--layer-menu, 65); } .bcal-app { container-type: inline-size; display: flex; height: 100%; min-height: 0; overflow: hidden; } .bcal-root.bcal-root *, .bcal-root.bcal-root *::before, .bcal-root.bcal-root *::after { box-sizing: border-box; border: 0 solid var(--border); } .bcal-root.bcal-root :is(h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd) { margin: 0; font-size: inherit; font-weight: inherit; line-height: inherit; } .bcal-root.bcal-root :is(ul, ol) { margin: 0; padding: 0; list-style: none; } .bcal-root.bcal-root :is(button, input, select, textarea) { height: auto; min-height: 0; margin: 0; padding: 0; font: inherit; color: inherit; letter-spacing: inherit; background: transparent; border: 0 solid var(--border); border-radius: 0; box-shadow: none; outline: none; -webkit-appearance: none; appearance: none; } .bcal-root.bcal-root :is(button, input, select, textarea):hover, .bcal-root.bcal-root :is(button, input, select, textarea):focus, .bcal-root.bcal-root :is(button, input, select, textarea):active { box-shadow: none; } .bcal-root.bcal-root button { cursor: pointer; text-align: inherit; } .bcal-root.bcal-root button:hover { background: transparent; } .bcal-root.bcal-root button:disabled { cursor: default; } .bcal-root.bcal-root input::placeholder, .bcal-root.bcal-root textarea::placeholder { color: var(--muted-foreground); } .bcal-root.bcal-root input[type="search"]::-webkit-search-cancel-button, .bcal-root.bcal-root input[type="search"]::-webkit-search-decoration { display: none; -webkit-appearance: none; } .bcal-root.bcal-root svg { display: block; flex-shrink: 0; } .bcal-root.bcal-root a, .bcal-root.bcal-root a:hover { color: inherit; text-decoration: inherit; } .bcal-root.bcal-root img { display: block; max-width: 100%; height: auto; } .bcal-root.bcal-root .bcal-md > * { display: inline; } .bcal-root.bcal-root .bcal-md a { color: var(--link-color, var(--color-accent)); text-decoration: none; } .bcal-root.bcal-root .bcal-md a:hover { text-decoration: underline; } .bcal-root.bcal-root .bcal-md a.is-unresolved { color: var(--link-unresolved-color, var(--muted-foreground)); opacity: 0.75; } .bcal-root.bcal-root .bcal-md code { padding: 0 0.25em; font-size: 0.9em; background: var(--secondary); border-radius: var(--radius-sm); } .bcal-root.bcal-root .bcal-md :is(img, .internal-embed) { display: inline-block; max-height: 1.4em; vertical-align: text-bottom; } /* The quick look reads the whole card, so here markdown keeps its blocks. */ .bcal-root.bcal-root .bcal-prose > * + * { margin-top: 0.45em; } .bcal-root.bcal-root .bcal-prose :is(ul, ol) { padding-left: 1.25em; list-style: disc; } .bcal-root.bcal-root .bcal-prose ol { list-style: decimal; } .bcal-root.bcal-root .bcal-prose li + li { margin-top: 0.2em; } .bcal-root.bcal-root .bcal-prose li.task-list-item { list-style: none; margin-left: -1.25em; } .bcal-root.bcal-root .bcal-prose input.task-list-item-checkbox { margin: 0 0.4em 0 0; vertical-align: -0.15em; pointer-events: none; } .bcal-root.bcal-root .bcal-prose a { color: var(--link-color, var(--color-accent)); text-decoration: none; } .bcal-root.bcal-root .bcal-prose a:hover { text-decoration: underline; } .bcal-root.bcal-root .bcal-prose code { padding: 0 0.25em; font-size: 0.9em; background: var(--secondary); border-radius: var(--radius-sm); } .bcal-root.bcal-root .bcal-prose :is(img, .internal-embed) { max-width: 100%; border-radius: var(--radius-md); } .bcal-root.bcal-root .bcal-prose blockquote { padding-left: 0.75em; border-left: 1px solid var(--border); color: var(--muted-foreground); } .bcal-root.bcal-root .bcal-dragging { position: relative; z-index: 40; cursor: grabbing; box-shadow: 0 12px 28px -8px rgb(0 0 0 / 45%); transition: none; } @utility touch-shown { @media (hover: none) { opacity: 1; } } @utility tabular { font-variant-numeric: tabular-nums; } /* A lane's gate in the rail: the project's hue as a filled check. */ @utility gate-hue { color: white; background: oklch(0.58 0.11 var(--hue)); border-color: oklch(0.58 0.11 var(--hue)); .theme-dark & { background: oklch(0.66 0.11 var(--hue)); border-color: oklch(0.66 0.11 var(--hue)); color: oklch(0.2 0.02 var(--hue)); } } @utility hue-chip { color: oklch(0.45 0.13 var(--hue)); background: oklch(0.6 0.09 var(--hue) / 0.12); border-color: oklch(0.6 0.09 var(--hue) / 0.4); .theme-dark & { color: oklch(0.82 0.08 var(--hue)); } } /* A key, drawn as one: the heavier bottom edge is the keycap, not a shadow. */ @utility kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 1.15rem; height: 1.15rem; padding: 0 0.25rem; font-family: inherit; font-size: 10px; font-variant-numeric: tabular-nums; line-height: 1; color: var(--muted-foreground); background: var(--background); border: 1px solid var(--border); border-bottom-color: color-mix(in oklab, var(--border) 55%, var(--foreground)); border-radius: var(--radius-sm); } @utility scrollbar-none { -ms-overflow-style: none; scrollbar-width: none; &::-webkit-scrollbar { display: none; } }