@import "tailwindcss"; @plugin "@tailwindcss/typography"; @custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-destructive-muted: var(--destructive-muted); --color-success: var(--success); --color-success-foreground: var(--success-foreground); --color-success-muted: var(--success-muted); --color-warning: var(--warning); --color-warning-foreground: var(--warning-foreground); --color-warning-muted: var(--warning-muted); --color-caution: var(--caution); --color-caution-foreground: var(--caution-foreground); --color-caution-muted: var(--caution-muted); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); --radius-sm: 0.25rem; --radius-md: 0.375rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --font-serif: "Newsreader", "Source Han Serif SC", "Noto Serif CJK SC", "Songti SC", "STSong", Georgia, "Cambria", "Times New Roman", serif; --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Source Han Sans SC", "Noto Sans CJK SC", "Microsoft YaHei", Roboto, Arial, sans-serif; --font-mono: "JetBrains Mono", "Fira Code", "Maple Mono NF CN", "Maple Mono", "SF Mono", Consolas, Monaco, ui-monospace, monospace; } /* * Kami source-of-truth tokens (oklch-encoded). * Do not consume directly in components -- consume through the * shadcn aliases (--background, --primary, ...) which map to these. */ :root { --kami-parchment: oklch(0.959 0.008 95); --kami-ivory: oklch(0.977 0.006 95); --kami-warm-sand: oklch(0.915 0.013 95); --kami-deep-dark: oklch(0.156 0.003 95); --kami-dark-surface: oklch(0.283 0.003 95); --kami-ink: oklch(0.306 0.083 258); --kami-ink-light: oklch(0.462 0.096 255); --kami-near-black: oklch(0.156 0.003 95); --kami-dark-warm: oklch(0.336 0.004 95); --kami-charcoal: oklch(0.403 0.006 95); --kami-olive: oklch(0.466 0.006 95); --kami-stone: oklch(0.608 0.007 95); --kami-warm-silver: oklch(0.739 0.010 95); --kami-border-cream: oklch(0.913 0.014 95); --kami-border-warm: oklch(0.888 0.014 95); --kami-border-soft: oklch(0.904 0.013 95); --kami-border-dark: oklch(0.283 0.003 95); --kami-ring-warm: oklch(0.832 0.011 95); --kami-ring-deep: oklch(0.783 0.012 95); --kami-tag-tint-lightest: oklch(0.949 0.011 245); --kami-tag-tint-light: oklch(0.922 0.019 245); --kami-tag-tint-medium: oklch(0.862 0.026 245); --kami-tag-tint-strong: oklch(0.883 0.024 245); } :root { color-scheme: light; --radius: 0.5rem; --background: oklch(0.959 0.008 95); --foreground: oklch(0.156 0.003 95); --card: oklch(0.977 0.006 95); --card-foreground: oklch(0.156 0.003 95); --popover: oklch(0.977 0.006 95); --popover-foreground: oklch(0.156 0.003 95); --primary: oklch(0.306 0.083 258); --primary-foreground: oklch(0.977 0.006 95); --secondary: oklch(0.915 0.013 95); --secondary-foreground: oklch(0.403 0.006 95); --muted: oklch(0.904 0.013 95); --muted-foreground: oklch(0.466 0.006 95); --accent: oklch(0.922 0.019 245); --accent-foreground: oklch(0.306 0.083 258); --destructive: oklch(0.516 0.186 25); --destructive-foreground: oklch(0.977 0.006 95); --destructive-muted: oklch(0.92 0.030 25); --success: oklch(0.55 0.085 145); --success-foreground: oklch(0.977 0.006 95); --success-muted: oklch(0.93 0.030 145); --warning: oklch(0.72 0.100 75); --warning-foreground: oklch(0.156 0.003 95); --warning-muted: oklch(0.95 0.025 85); --caution: oklch(0.62 0.130 50); --caution-foreground: oklch(0.977 0.006 95); --caution-muted: oklch(0.93 0.030 60); --border: oklch(0.888 0.014 95); --input: oklch(0.888 0.014 95); --ring: oklch(0.832 0.011 95); --chart-1: oklch(0.306 0.083 258); --chart-2: oklch(0.395 0.082 256); --chart-3: oklch(0.505 0.075 254); --chart-4: oklch(0.625 0.060 253); --chart-5: oklch(0.755 0.038 252); --sidebar: oklch(0.977 0.006 95); --sidebar-foreground: oklch(0.403 0.006 95); --sidebar-primary: oklch(0.306 0.083 258); --sidebar-primary-foreground: oklch(0.977 0.006 95); --sidebar-accent: oklch(0.922 0.019 245); --sidebar-accent-foreground: oklch(0.306 0.083 258); --sidebar-border: oklch(0.888 0.014 95); --sidebar-ring: oklch(0.832 0.011 95); } .dark { --background: oklch(0.156 0.003 95); --foreground: oklch(0.959 0.008 95); --card: oklch(0.283 0.003 95); --card-foreground: oklch(0.959 0.008 95); --popover: oklch(0.283 0.003 95); --popover-foreground: oklch(0.959 0.008 95); --primary: oklch(0.462 0.096 255); --primary-foreground: oklch(0.959 0.008 95); --secondary: oklch(0.283 0.003 95); --secondary-foreground: oklch(0.739 0.010 95); --muted: oklch(0.283 0.003 95); --muted-foreground: oklch(0.739 0.010 95); --accent: oklch(0.28 0.03 250); --accent-foreground: oklch(0.959 0.008 95); --destructive: oklch(0.60 0.17 25); --destructive-foreground: oklch(0.959 0.008 95); --destructive-muted: oklch(0.26 0.06 25); --success: oklch(0.65 0.085 145); --success-foreground: oklch(0.959 0.008 95); --success-muted: oklch(0.28 0.050 145); --warning: oklch(0.82 0.100 75); --warning-foreground: oklch(0.156 0.003 95); --warning-muted: oklch(0.28 0.050 85); --caution: oklch(0.72 0.130 50); --caution-foreground: oklch(0.959 0.008 95); --caution-muted: oklch(0.28 0.050 60); --border: oklch(0.283 0.003 95); --input: oklch(0.283 0.003 95); --ring: oklch(0.832 0.011 95); --chart-1: oklch(0.755 0.038 252); --chart-2: oklch(0.625 0.060 253); --chart-3: oklch(0.505 0.075 254); --chart-4: oklch(0.462 0.096 255); --chart-5: oklch(0.395 0.082 256); --sidebar: oklch(0.156 0.003 95); --sidebar-foreground: oklch(0.739 0.010 95); --sidebar-primary: oklch(0.462 0.096 255); --sidebar-primary-foreground: oklch(0.959 0.008 95); --sidebar-accent: oklch(0.283 0.003 95); --sidebar-accent-foreground: oklch(0.959 0.008 95); --sidebar-border: oklch(0.283 0.003 95); --sidebar-ring: oklch(0.832 0.011 95); } /* Hide all scrollbars globally while keeping scroll functionality */ *::-webkit-scrollbar { width: 0; height: 0; } @layer base { * { @apply border-border; } html { height: 100%; -webkit-tap-highlight-color: color-mix(in oklab, var(--foreground) 20%, transparent); } body { @apply bg-background text-foreground antialiased; font-family: var(--font-sans); height: 100%; overflow: hidden; } h1, h2, h3 { text-wrap: balance; } /* Prevent double-tap-to-zoom on interactive elements for mobile */ a, button, [role="button"], input, select, textarea, label { touch-action: manipulation; } } @media (pointer: coarse) { button, [role="button"], input, select, textarea, [data-slot="select-trigger"] { min-height: 44px; } [data-slot="toggle"] { min-height: 0; } } /* Dark mode color scheme */ .dark { color-scheme: dark; } /* Expandable dialog transition for max-width changes */ [data-slot="dialog-content"] { transition: max-width 200ms cubic-bezier(0.16, 1, 0.3, 1); } /* MDXEditor theme integration */ .paperclip-mdxeditor-scope, .paperclip-mdxeditor { --baseBase: var(--background); --baseBg: transparent; --baseBgSubtle: color-mix(in oklab, var(--accent) 35%, transparent); --baseLine: var(--border); --baseSolid: var(--muted-foreground); --baseSolidHover: var(--foreground); --baseText: var(--muted-foreground); --baseBorderColor: var(--border); --baseBorder: var(--border); --baseBorderHover: var(--ring); --baseTextContrast: var(--foreground); --baseTextContrastMuted: var(--muted-foreground); --baseTextEmphasis: var(--foreground); --basePageBg: var(--background); --baseRadius: var(--radius); --baseLineHeight: 1.5; --accentBorder: color-mix(in oklab, var(--primary) 35%, var(--border)); --accentSolid: var(--primary); --accentSolidHover: var(--primary); --accentLine: color-mix(in oklab, var(--primary) 20%, transparent); --accentBg: var(--accent); --accentBgHover: color-mix(in oklab, var(--accent) 80%, var(--background)); --accentBgActive: color-mix(in oklab, var(--accent) 72%, var(--background)); --accentText: var(--accent-foreground); font-family: inherit; font-size: 0.875rem; line-height: 1.5; color: var(--foreground); } .paperclip-mdxeditor-scope [class*="_iconButton_"], .paperclip-mdxeditor [class*="_iconButton_"] { color: var(--baseText); } .paperclip-mdxeditor-scope [class*="_iconButton_"]:hover, .paperclip-mdxeditor [class*="_iconButton_"]:hover { color: var(--baseTextContrast); } .paperclip-mdxeditor .mdxeditor-root-contenteditable { min-height: 2.5rem; padding: 0; line-height: 1.5; } .paperclip-mdxeditor [class*="_contentEditable_"] { padding: 0.375rem 0.625rem !important; } .paperclip-mdxeditor--borderless [class*="_contentEditable_"] { padding: 0 !important; } .paperclip-mdxeditor [class*="_placeholder_"] { font-family: inherit; font-size: 0.875rem; line-height: 1.5; color: var(--muted-foreground); } .paperclip-mdxeditor-content { font-family: inherit; font-size: inherit; line-height: inherit; color: inherit; } .paperclip-edit-in-place-content { font-size: 0.9375rem; line-height: 1.75rem; } .paperclip-mdxeditor-content > *:first-child { margin-top: 0; } .paperclip-mdxeditor-content > *:last-child { margin-bottom: 0; } .paperclip-mdxeditor-content p { margin: 0; line-height: inherit; } .paperclip-mdxeditor-content p + p { margin-top: 1.1em; } .paperclip-mdxeditor-content a.paperclip-mention-chip, .paperclip-mdxeditor-content a.paperclip-project-mention-chip { display: inline-flex; align-items: center; gap: 0.25rem; margin: 0 0.1rem; padding: 0.05rem 0.45rem; border: 1px solid var(--border); border-radius: 999px; font-size: 0.75rem; line-height: 1.3; text-decoration: none; vertical-align: middle; white-space: nowrap; user-select: none; } .paperclip-mdxeditor-content a.paperclip-mention-chip::before, a.paperclip-mention-chip::before { content: ""; flex: none; } .paperclip-mdxeditor-content a.paperclip-mention-chip[data-mention-kind="project"]::before, a.paperclip-mention-chip[data-mention-kind="project"]::before { width: 0.45rem; height: 0.45rem; border-radius: 999px; background-color: var(--paperclip-mention-project-color, currentColor); } .paperclip-mdxeditor-content a.paperclip-mention-chip[data-mention-kind="agent"]::before, a.paperclip-mention-chip[data-mention-kind="agent"]::before { width: 0.75rem; height: 0.75rem; background-color: currentColor; -webkit-mask-image: var(--paperclip-mention-icon-mask); mask-image: var(--paperclip-mention-icon-mask); -webkit-mask-position: center; mask-position: center; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-size: contain; mask-size: contain; } .paperclip-mdxeditor-content ul, .paperclip-mdxeditor-content ol { margin: 1.1em 0; padding-left: 1.6em; } .paperclip-mdxeditor-content ul { list-style: disc; } .paperclip-mdxeditor-content ol { list-style: decimal; } .paperclip-mdxeditor-content li { display: list-item; margin: 0.3em 0; line-height: inherit; } .paperclip-mdxeditor-content li::marker { color: var(--muted-foreground); } .paperclip-mdxeditor-content h1 { margin: 1.4em 0 0.9em; font-family: var(--font-serif); font-size: 1.75em; font-weight: 500; line-height: 1.2; } .paperclip-mdxeditor-content h2 { margin: 1.3em 0 0.85em; font-family: var(--font-serif); font-size: 1.35em; font-weight: 500; line-height: 1.3; } .paperclip-mdxeditor-content h3 { margin: 1.2em 0 0.8em; font-family: var(--font-serif); font-size: 1.15em; font-weight: 500; line-height: 1.35; } .paperclip-mdxeditor-content img { max-height: 18rem; border-radius: calc(var(--radius) - 2px); } .paperclip-mdxeditor-content blockquote { margin: 1.2em 0; padding-left: 1em; border-left: 3px solid var(--border); color: var(--muted-foreground); line-height: inherit; } .paperclip-mdxeditor-content code { font-family: var(--font-mono); font-size: 1em; } .paperclip-mdxeditor-content pre { margin: 0.4rem 0; padding: 0; border: 1px solid color-mix(in oklab, var(--foreground) 12%, transparent); border-radius: calc(var(--radius) - 3px); background: oklch(0.283 0.003 95); color: oklch(0.959 0.008 95); overflow-x: auto; } /* Dark-surface code theme for CodeMirror code blocks inside the MDXEditor. Overrides the default cm6-theme-basic-light. Uses kami warm-charcoal palette. */ .paperclip-mdxeditor .cm-editor { background-color: oklch(0.283 0.003 95) !important; color: oklch(0.959 0.008 95) !important; font-size: 1em; } .paperclip-mdxeditor .cm-gutters { background-color: oklch(0.228 0.003 95) !important; color: oklch(0.466 0.006 95) !important; border-right: 1px solid oklch(0.228 0.003 95) !important; } .paperclip-mdxeditor .cm-activeLineGutter { background-color: oklch(0.283 0.003 95) !important; } .paperclip-mdxeditor .cm-activeLine { background-color: color-mix(in oklab, oklch(0.959 0.008 95) 5%, transparent) !important; } .paperclip-mdxeditor .cm-cursor, .paperclip-mdxeditor .cm-dropCursor { border-left-color: oklch(0.959 0.008 95) !important; } .paperclip-mdxeditor .cm-selectionBackground { background-color: color-mix(in oklab, oklch(0.462 0.096 255) 25%, transparent) !important; } .paperclip-mdxeditor .cm-focused .cm-selectionBackground { background-color: color-mix(in oklab, oklch(0.462 0.096 255) 30%, transparent) !important; } .paperclip-mdxeditor .cm-content { caret-color: oklch(0.959 0.008 95); } /* MDXEditor code block language selector -- show on hover only */ .paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"] { position: relative; } .paperclip-mdxeditor-content [class*="_codeMirrorToolbar_"], .paperclip-mdxeditor-content [class*="_codeBlockToolbar_"] { position: absolute; top: 0.25rem; right: 0.25rem; z-index: 2; opacity: 0; transition: opacity 150ms ease; } .paperclip-mdxeditor-content [class*="_codeMirrorToolbar_"] select, .paperclip-mdxeditor-content [class*="_codeBlockToolbar_"] select { background-color: oklch(0.228 0.003 95); color: oklch(0.959 0.008 95); border-color: oklch(0.336 0.004 95); } .paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:hover [class*="_codeMirrorToolbar_"], .paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:hover [class*="_codeBlockToolbar_"], .paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:focus-within [class*="_codeMirrorToolbar_"], .paperclip-mdxeditor-content [class*="_codeMirrorWrapper_"]:focus-within [class*="_codeBlockToolbar_"] { opacity: 1; } /* Rendered markdown code blocks & inline code (prose/MarkdownBody context). Dark-surface code blocks with compact sizing. Override prose CSS variables so prose-invert can't revert to defaults. */ .paperclip-markdown { --tw-prose-pre-bg: oklch(0.283 0.003 95); --tw-prose-pre-code: oklch(0.959 0.008 95); --tw-prose-invert-pre-bg: oklch(0.283 0.003 95); --tw-prose-invert-pre-code: oklch(0.959 0.008 95); } .paperclip-markdown pre { border: 1px solid color-mix(in oklab, var(--foreground) 12%, transparent) !important; border-radius: calc(var(--radius) - 3px) !important; background-color: oklch(0.283 0.003 95) !important; color: oklch(0.959 0.008 95) !important; padding: 0.5rem 0.65rem !important; margin: 0.4rem 0 !important; font-size: 1em !important; overflow-x: auto; white-space: pre; } .paperclip-markdown code { font-family: var(--font-mono); font-size: 1em; } .paperclip-markdown pre code { font-size: inherit; color: inherit; background: none; } /* Remove backtick pseudo-elements from inline code (prose default adds them) */ .prose code::before, .prose code::after { content: none; } /* Inline code background (not inside a code block) */ .prose :not(pre) > code { background-color: color-mix(in oklab, var(--accent) 60%, transparent); padding: 0.15em 0.35em; border-radius: 3px; font-weight: 500; } .dark .prose :not(pre) > code { background-color: color-mix(in oklab, var(--foreground) 8%, transparent); } .paperclip-markdown { color: var(--foreground); font-size: 0.9375rem; line-height: 1.6; } .paperclip-markdown > :first-child { margin-top: 0; } .paperclip-markdown > :last-child { margin-bottom: 0; } .paperclip-markdown :where(p, ul, ol, blockquote, pre, table) { margin-top: 0.7rem; margin-bottom: 0.7rem; } .paperclip-markdown :where(ul, ol) { padding-left: 1.15rem; } .paperclip-markdown ul { list-style-type: disc; } .paperclip-markdown ol { list-style-type: decimal; } .paperclip-markdown li { margin: 0.14rem 0; padding-left: 0.2rem; } .paperclip-markdown li > :where(p, ul, ol) { margin-top: 0.3rem; margin-bottom: 0.3rem; } .paperclip-markdown li::marker { color: var(--muted-foreground); } .paperclip-markdown h1, .paperclip-markdown h2, .paperclip-markdown h3, .paperclip-markdown h4 { margin-top: 1.75rem; margin-bottom: 0.45rem; color: var(--foreground); font-family: var(--font-serif); font-weight: 500; letter-spacing: -0.01em; line-height: 1.3; } .paperclip-markdown h1 { font-size: 1.5rem; } .paperclip-markdown h2 { font-size: 1.25rem; } .paperclip-markdown h3 { font-size: 1.05rem; } .paperclip-markdown h4 { font-size: 0.95rem; } .paperclip-markdown :where(strong, b) { color: var(--foreground); font-weight: 500; } .paperclip-markdown a { color: color-mix(in oklab, var(--foreground) 76%, var(--primary) 24%); text-decoration: none; } .paperclip-markdown a:hover { text-decoration: underline; text-underline-offset: 0.15em; } .dark .paperclip-markdown a { color: color-mix(in oklab, var(--foreground) 80%, var(--primary) 20%); } .paperclip-markdown blockquote { margin-left: 0; padding-left: 0.95rem; border-left: 0.24rem solid color-mix(in oklab, var(--border) 84%, var(--muted-foreground) 16%); color: var(--muted-foreground); } .paperclip-markdown hr { margin: 1.25rem 0; border-color: var(--border); } .paperclip-markdown img { border-radius: calc(var(--radius) + 2px); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent); } .paperclip-markdown table { width: 100%; } .paperclip-markdown th { font-weight: 500; text-align: left; } .paperclip-mermaid { margin: 0.5rem 0; padding: 0.45rem 0.55rem; border: 1px solid var(--border); border-radius: calc(var(--radius) - 3px); background-color: color-mix(in oklab, var(--accent) 35%, transparent); overflow-x: auto; } .paperclip-mermaid svg { display: block; width: max-content; max-width: none; min-width: 100%; height: auto; } .paperclip-mermaid-status { margin: 0 0 0.45rem; font-size: 0.75rem; color: var(--muted-foreground); } .paperclip-mermaid-status-error { color: var(--destructive); } .paperclip-mermaid-source { margin: 0; padding: 0; border: 0; background: transparent; } /* Project mention chips rendered inside MarkdownBody */ a.paperclip-mention-chip, a.paperclip-project-mention-chip { display: inline-flex; align-items: center; gap: 0.25rem; margin: 0 0.1rem; padding: 0.05rem 0.45rem; border: 1px solid var(--border); border-radius: 999px; font-size: 0.75rem; line-height: 1.3; text-decoration: none; vertical-align: middle; white-space: nowrap; } /* Keep MDXEditor popups above app dialogs, even when they portal to . */ [class*="_popupContainer_"] { z-index: 81 !important; } [class*="_dialogOverlay_"] { z-index: 80; } [class*="_dialogContent_"], [class*="_largeDialogContent_"], [class*="_popoverContent_"], [class*="_linkDialogPopoverContent_"], [class*="_tableColumnEditorPopoverContent_"], [class*="_toolbarButtonDropdownContainer_"], [class*="_toolbarNodeKindSelectContainer_"] { z-index: 81 !important; } /* Electron window drag region -- CRITICAL */ .sidebar-drag { -webkit-app-region: drag; } .sidebar-drag button, .sidebar-drag select, .sidebar-drag input, .sidebar-drag a { -webkit-app-region: no-drag; } /* Custom title bar drag region */ .titlebar-drag { -webkit-app-region: drag; } .titlebar-button { -webkit-app-region: no-drag; } /* Fixed overlays (modals, dialogs, palettes) must escape titlebar drag region */ [class*="fixed"] { -webkit-app-region: no-drag; } /* Onboarding hero ambient drift */ @keyframes hero-drift { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(-4%, 3%) scale(1.05); } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* Global word-wrap to prevent text overflow */ textarea, input, select, p, span, div, td, th, li, pre { overflow-wrap: break-word; word-wrap: break-word; } textarea { white-space: pre-wrap; overflow-wrap: anywhere; } /* Prevent native select dropdown from overflowing container */ select { max-width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } select option { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Prevent grid/flex children from overflowing their containers */ [role="dialog"] * { min-width: 0; }