@import "tailwindcss"; @plugin "@tailwindcss/typography"; @import "tw-animate-css"; @import "vazirmatn/Vazirmatn-font-face.css"; @custom-variant dark (&:is(.dark *)); /* Custom breakpoints for desktop design (matching code.html reference) */ @theme { /* Desktop breakpoints: 1024px (min), 1440px (large), 1920px (ultra-wide) */ --breakpoint-desktop: 1024px; --breakpoint-large-desktop: 1440px; --breakpoint-ultra-wide: 1920px; /* Custom colors matching Keep design */ --color-primary: #64748b; --color-background-light: #f7f7f8; --color-background-dark: #1a1d23; /* Stitch Design Tokens */ --font-sans: var(--font-inter); --font-heading: var(--font-manrope); --shadow-level-1: 0px 4px 20px rgba(15, 23, 42, 0.05); --shadow-level-2: 0px 10px 30px rgba(15, 23, 42, 0.08); } /* Custom scrollbar for better aesthetics */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #94a3b8; } .dark ::-webkit-scrollbar-thumb { background: #475569; } /* Custom Prose overrides for compact notes */ @utility prose-compact { & :where(h1, h2, h3, h4) { margin-top: 0.5rem; margin-bottom: 0.25rem; } & :where(p, ul, ol, li) { margin-top: 0.25rem; margin-bottom: 0.25rem; } } @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-inter); --font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, Consolas, monospace; --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --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); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --radius-2xl: calc(var(--radius) + 8px); --radius-3xl: calc(var(--radius) + 12px); --radius-4xl: calc(var(--radius) + 16px); } :root { --radius: 0.5rem; --background: #f8fafc; /* Sub-surface off-white */ --foreground: oklch(0.2 0.02 230); /* Gris-bleu foncé */ --card: oklch(1 0 0); /* Blanc pur */ --card-foreground: oklch(0.2 0.02 230); --popover: oklch(1 0 0); --popover-foreground: oklch(0.2 0.02 230); --primary: #0284c7; /* Sky Blue */ --primary-foreground: #ffffff; /* Blanc */ --secondary: #e2e8f0; /* Gris-bleu très pâle */ --secondary-foreground: #1e293b; --muted: #f1f5f9; --muted-foreground: #64748b; --accent: #f1f5f9; --accent-foreground: #0284c7; --destructive: oklch(0.6 0.18 25); /* Rouge */ --border: #cbd5e1; /* Gris-bleu visible */ --input: #cbd5e1; /* Bordure visible pour inputs/checkbox */ --ring: #0284c7; --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); --sidebar: oklch(0.97 0.004 230); --sidebar-foreground: oklch(0.2 0.02 230); --sidebar-primary: oklch(0.45 0.08 230); --sidebar-primary-foreground: oklch(0.99 0 0); --sidebar-accent: oklch(0.94 0.005 230); --sidebar-accent-foreground: oklch(0.2 0.02 230); --sidebar-border: oklch(0.9 0.008 230); --sidebar-ring: oklch(0.7 0.005 230); } [data-theme='light'] { --background: oklch(0.985 0.003 230); /* Blanc grisâtre */ --foreground: oklch(0.2 0.02 230); /* Gris-bleu foncé */ --card: oklch(1 0 0); /* Blanc pur */ --card-foreground: oklch(0.2 0.02 230); --popover: oklch(1 0 0); --popover-foreground: oklch(0.2 0.02 230); --primary: oklch(0.45 0.08 230); /* Gris-bleu doux */ --primary-foreground: oklch(0.99 0 0); /* Blanc */ --secondary: oklch(0.94 0.005 230); /* Gris-bleu très pâle */ --secondary-foreground: oklch(0.2 0.02 230); --muted: oklch(0.92 0.005 230); --muted-foreground: oklch(0.6 0.01 230); --accent: oklch(0.92 0.005 230); --accent-foreground: oklch(0.2 0.02 230); --destructive: oklch(0.6 0.18 25); /* Rouge */ --border: oklch(0.85 0.008 230); /* Gris-bleu visible */ --input: oklch(0.85 0.008 230); /* Bordure visible */ --ring: oklch(0.7 0.005 230); --popover: oklch(1 0 0); --popover-foreground: oklch(0.2 0.02 230); --sidebar: oklch(0.97 0.004 230); --sidebar-foreground: oklch(0.2 0.02 230); --sidebar-primary: oklch(0.45 0.08 230); --sidebar-primary-foreground: oklch(0.99 0 0); --sidebar-accent: oklch(0.94 0.005 230); --sidebar-accent-foreground: oklch(0.2 0.02 230); --sidebar-border: oklch(0.85 0.008 230); --sidebar-ring: oklch(0.7 0.005 230); } [data-theme='light'].dark { --background: oklch(0.14 0.005 230); /* Noir grisâtre */ --foreground: oklch(0.97 0.003 230); /* Blanc grisâtre */ --card: oklch(0.18 0.006 230); /* Gris-bleu foncé */ --card-foreground: oklch(0.97 0.003 230); --popover: oklch(0.18 0.006 230); --popover-foreground: oklch(0.97 0.003 230); --primary: oklch(0.55 0.08 230); /* Gris-bleu plus clair */ --primary-foreground: oklch(0.1 0 0); /* Noir */ --secondary: oklch(0.24 0.006 230); --secondary-foreground: oklch(0.97 0.003 230); --muted: oklch(0.22 0.006 230); --muted-foreground: oklch(0.55 0.01 230); --accent: oklch(0.26 0.008 230); --accent-foreground: oklch(0.97 0.003 230); --destructive: oklch(0.65 0.18 25); --border: oklch(0.33 0.01 230); --input: oklch(0.33 0.01 230); --ring: oklch(0.6 0.01 230); --popover: oklch(0.18 0.006 230); --popover-foreground: oklch(0.97 0.003 230); --sidebar: oklch(0.12 0.005 230); --sidebar-foreground: oklch(0.97 0.003 230); --sidebar-primary: oklch(0.55 0.08 230); --sidebar-primary-foreground: oklch(0.1 0 0); --sidebar-accent: oklch(0.24 0.006 230); --sidebar-accent-foreground: oklch(0.97 0.003 230); --sidebar-border: oklch(0.28 0.01 230); --sidebar-ring: oklch(0.6 0.01 230); } .dark { --background: oklch(0.14 0.005 230); /* Noir grisâtre */ --foreground: oklch(0.97 0.003 230); /* Blanc grisâtre */ --card: oklch(0.18 0.006 230); /* Gris-bleu foncé */ --card-foreground: oklch(0.97 0.003 230); --popover: oklch(0.18 0.006 230); --popover-foreground: oklch(0.97 0.003 230); --primary: oklch(0.55 0.08 230); /* Gris-bleu plus clair */ --primary-foreground: oklch(0.1 0 0); /* Noir */ --secondary: oklch(0.24 0.006 230); --secondary-foreground: oklch(0.97 0.003 230); --muted: oklch(0.22 0.006 230); --muted-foreground: oklch(0.55 0.01 230); --accent: oklch(0.26 0.008 230); --accent-foreground: oklch(0.97 0.003 230); --destructive: oklch(0.65 0.18 25); --border: oklch(0.33 0.01 230); --input: oklch(0.33 0.01 230); --ring: oklch(0.6 0.01 230); --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); --sidebar: oklch(0.12 0.005 230); --sidebar-foreground: oklch(0.97 0.003 230); --sidebar-primary: oklch(0.55 0.08 230); --sidebar-primary-foreground: oklch(0.1 0 0); --sidebar-accent: oklch(0.24 0.006 230); --sidebar-accent-foreground: oklch(0.97 0.003 230); --sidebar-border: oklch(0.28 0.01 230); --sidebar-ring: oklch(0.6 0.01 230); } [data-theme='midnight'] { --background: oklch(0.94 0.005 250); /* Gris-bleu très pâle */ --foreground: oklch(0.18 0.03 250); /* Gris-bleu très foncé */ --card: oklch(0.97 0.006 250); /* Gris-bleu pâle */ --card-foreground: oklch(0.18 0.03 250); --primary: oklch(0.5 0.12 250); /* Gris-bleu saturé */ --primary-foreground: oklch(0.99 0 0); /* Blanc */ --secondary: oklch(0.2 0.01 250); --secondary-foreground: oklch(0.18 0.03 250); --muted: oklch(0.22 0.01 250); --muted-foreground: oklch(0.55 0.02 250); --accent: oklch(0.25 0.015 250); --accent-foreground: oklch(0.18 0.03 250); --destructive: oklch(0.6 0.22 25); --border: oklch(0.82 0.015 250); --input: oklch(0.82 0.015 250); --ring: oklch(0.65 0.015 250); --popover: oklch(0.97 0.006 250); --popover-foreground: oklch(0.18 0.03 250); --sidebar: oklch(0.9 0.01 250); --sidebar-foreground: oklch(0.18 0.03 250); --sidebar-primary: oklch(0.5 0.12 250); --sidebar-primary-foreground: oklch(0.99 0 0); --sidebar-accent: oklch(0.25 0.015 250); --sidebar-accent-foreground: oklch(0.18 0.03 250); --sidebar-border: oklch(0.85 0.015 250); --sidebar-ring: oklch(0.65 0.015 250); } [data-theme='midnight'].dark { --background: oklch(0.1 0.01 250); /* Noir profond */ --foreground: oklch(0.96 0.005 250); /* Blanc grisâtre */ --card: oklch(0.15 0.015 250); /* Gris-bleu très foncé */ --card-foreground: oklch(0.96 0.005 250); --primary: oklch(0.6 0.12 250); /* Gris-bleu vibrant */ --primary-foreground: oklch(0.1 0 0); /* Noir */ --secondary: oklch(0.18 0.015 250); --secondary-foreground: oklch(0.96 0.005 250); --muted: oklch(0.2 0.015 250); --muted-foreground: oklch(0.5 0.02 250); --accent: oklch(0.26 0.02 250); --accent-foreground: oklch(0.96 0.005 250); --destructive: oklch(0.65 0.2 25); --border: oklch(0.33 0.02 250); --input: oklch(0.33 0.02 250); --ring: oklch(0.55 0.02 250); --popover: oklch(0.15 0.015 250); --popover-foreground: oklch(0.96 0.005 250); --sidebar: oklch(0.08 0.01 250); --sidebar-foreground: oklch(0.96 0.005 250); --sidebar-primary: oklch(0.6 0.12 250); --sidebar-primary-foreground: oklch(0.1 0 0); --sidebar-accent: oklch(0.22 0.02 250); --sidebar-accent-foreground: oklch(0.96 0.005 250); --sidebar-border: oklch(0.3 0.02 250); --sidebar-ring: oklch(0.55 0.02 250); } [data-theme='blue'] { --background: oklch(0.985 0.005 225); /* Blanc légèrement bleuté */ --foreground: oklch(0.18 0.035 225); /* Gris-bleu foncé saturé */ --card: oklch(1 0 0); /* Blanc pur */ --card-foreground: oklch(0.18 0.035 225); --primary: oklch(0.5 0.15 225); /* Bleu vibrant */ --primary-foreground: oklch(0.99 0 0); /* Blanc */ --secondary: oklch(0.93 0.008 225); --secondary-foreground: oklch(0.18 0.035 225); --muted: oklch(0.9 0.01 225); --muted-foreground: oklch(0.58 0.015 225); --accent: oklch(0.93 0.01 225); --accent-foreground: oklch(0.18 0.035 225); --destructive: oklch(0.6 0.2 25); --border: oklch(0.83 0.012 225); --input: oklch(0.83 0.012 225); --ring: oklch(0.65 0.015 225); --popover: oklch(1 0 0); --popover-foreground: oklch(0.18 0.035 225); --sidebar: oklch(0.965 0.008 225); --sidebar-foreground: oklch(0.18 0.035 225); --sidebar-primary: oklch(0.5 0.15 225); --sidebar-primary-foreground: oklch(0.99 0 0); --sidebar-accent: oklch(0.93 0.01 225); --sidebar-accent-foreground: oklch(0.18 0.035 225); --sidebar-border: oklch(0.87 0.012 225); --sidebar-ring: oklch(0.65 0.015 225); } [data-theme='blue'].dark { --background: oklch(0.13 0.008 225); /* Noir légèrement bleuté */ --foreground: oklch(0.97 0.006 225); /* Blanc légèrement bleuté */ --card: oklch(0.17 0.01 225); /* Gris-bleu foncé */ --card-foreground: oklch(0.97 0.006 225); --primary: oklch(0.6 0.15 225); /* Bleu vibrant plus clair */ --primary-foreground: oklch(0.1 0 0); /* Noir */ --secondary: oklch(0.22 0.015 225); --secondary-foreground: oklch(0.97 0.006 225); --muted: oklch(0.25 0.02 225); --muted-foreground: oklch(0.52 0.018 225); --accent: oklch(0.28 0.025 225); --accent-foreground: oklch(0.97 0.006 225); --destructive: oklch(0.65 0.22 25); --border: oklch(0.35 0.018 225); --input: oklch(0.35 0.018 225); --ring: oklch(0.55 0.02 225); --popover: oklch(0.17 0.01 225); --popover-foreground: oklch(0.97 0.006 225); --sidebar: oklch(0.1 0.01 225); --sidebar-foreground: oklch(0.97 0.006 225); --sidebar-primary: oklch(0.6 0.15 225); --sidebar-primary-foreground: oklch(0.1 0 0); --sidebar-accent: oklch(0.25 0.025 225); --sidebar-accent-foreground: oklch(0.97 0.006 225); --sidebar-border: oklch(0.32 0.018 225); --sidebar-ring: oklch(0.55 0.02 225); } [data-theme='sepia'] { --background: oklch(0.985 0.004 45); /* Blanc légèrement doré */ --foreground: oklch(0.2 0.015 45); /* Gris-brun foncé */ --card: oklch(1 0 0); /* Blanc pur */ --card-foreground: oklch(0.2 0.015 45); --primary: oklch(0.45 0.08 45); /* Gris-brun chaud */ --primary-foreground: oklch(0.99 0 0); /* Blanc */ --secondary: oklch(0.94 0.008 45); --secondary-foreground: oklch(0.2 0.015 45); --muted: oklch(0.91 0.01 45); --muted-foreground: oklch(0.6 0.012 45); --accent: oklch(0.93 0.01 45); --accent-foreground: oklch(0.2 0.015 45); --destructive: oklch(0.6 0.2 25); --border: oklch(0.83 0.012 45); --input: oklch(0.83 0.012 45); --ring: oklch(0.68 0.01 45); --popover: oklch(1 0 0); --popover-foreground: oklch(0.2 0.015 45); --sidebar: oklch(0.96 0.01 45); --sidebar-foreground: oklch(0.2 0.015 45); --sidebar-primary: oklch(0.45 0.08 45); --sidebar-primary-foreground: oklch(0.99 0 0); --sidebar-accent: oklch(0.93 0.01 45); --sidebar-accent-foreground: oklch(0.2 0.015 45); --sidebar-border: oklch(0.88 0.012 45); --sidebar-ring: oklch(0.68 0.01 45); } [data-theme='sepia'].dark { --background: oklch(0.15 0.008 45); /* Noir légèrement bruni */ --foreground: oklch(0.97 0.005 45); /* Blanc légèrement bruni */ --card: oklch(0.19 0.01 45); /* Gris-brun foncé */ --card-foreground: oklch(0.97 0.005 45); --primary: oklch(0.55 0.08 45); /* Gris-brun plus clair */ --primary-foreground: oklch(0.1 0 0); /* Noir */ --secondary: oklch(0.25 0.015 45); --secondary-foreground: oklch(0.97 0.005 45); --muted: oklch(0.23 0.02 45); --muted-foreground: oklch(0.55 0.012 45); --accent: oklch(0.29 0.018 45); --accent-foreground: oklch(0.97 0.005 45); --destructive: oklch(0.65 0.2 25); --border: oklch(0.33 0.018 45); --input: oklch(0.33 0.018 45); --ring: oklch(0.58 0.02 45); --popover: oklch(0.19 0.01 45); --popover-foreground: oklch(0.97 0.005 45); --sidebar: oklch(0.12 0.01 45); --sidebar-foreground: oklch(0.97 0.005 45); --sidebar-primary: oklch(0.55 0.08 45); --sidebar-primary-foreground: oklch(0.1 0 0); --sidebar-accent: oklch(0.27 0.018 45); --sidebar-accent-foreground: oklch(0.97 0.005 45); --sidebar-border: oklch(0.3 0.018 45); --sidebar-ring: oklch(0.58 0.02 45); } /* System font mode — override Inter with native OS fonts. Must be outside @layer base to win over next/font's generated class. */ html.font-system { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif !important; } html.font-system body, html.font-system * { font-family: inherit !important; } @layer base { * { @apply border-border outline-ring/50; } /* Set base font size on html element - this affects all rem units */ html { font-size: var(--user-font-size, 16px); } body { @apply bg-background text-foreground; /* Body inherits from html, can be adjusted per language */ } /* Latin languages use default (inherits from html) */ [lang='en'] body, [lang='fr'] body { font-size: 1rem; /* Uses html font size */ } /* Persian/Farsi font with larger size for better readability */ [lang='fa'] body { font-family: 'Vazirmatn', var(--font-sans), sans-serif !important; /* Base 110% for Persian = 1.1rem */ font-size: calc(1.1rem * var(--user-font-size-factor, 1)); } /* Ensure Persian text uses Vazirmatn even in nested elements */ [lang='fa'] * { font-family: 'Vazirmatn', sans-serif !important; } } /* ============================================ Toast Notifications - Fix UI Blocking Issue ============================================ */ /* Ensure the toaster container doesn't block clicks on the page underneath */ [data-sonner-toaster] { pointer-events: none !important; } /* Ensure all children of toaster don't block except the toast itself */ [data-sonner-toaster]>* { pointer-events: none !important; } /* But allow interaction with the toast itself (buttons, close, etc) */ [data-sonner-toast] { pointer-events: auto !important; } /* Also ensure any overlay or background doesn't block */ [data-sonner-toaster]::before, [data-sonner-toaster]::after { pointer-events: none !important; } /* ============================================ Muuri Grid Styles for Drag & Drop ============================================ */ .muuri-grid { position: relative; } /* Note: Width is controlled by Tailwind classes (w-1/2, w-1/3, w-full, etc.) */ .muuri-item { position: absolute; /* width: 100%; REMOVED - Don't override Tailwind size classes */ } .muuri-item.muuri-item-dragging { z-index: 3; } .muuri-item.muuri-item-releasing { z-index: 2; } .muuri-item.muuri-item-hidden { z-index: 0; } /* Ensure note cards work properly with Muuri */ .muuri-item>* { width: 100%; } /* Force URLs/links to render LTR even in RTL mode */ [dir="rtl"] .prose a { direction: ltr; unicode-bidi: embed; display: inline-block; } /* ============================================ Notion-like Rich Text Editor (TipTap) ============================================ */ /* --- Editor Wrapper --- */ .notion-editor-wrapper { position: relative; } /* --- ProseMirror Base --- */ .notion-editor-wrapper .ProseMirror { outline: none; min-height: 120px; padding: 4px 0; font-size: 0.9375rem; line-height: 1.7; caret-color: var(--primary); } .notion-editor-wrapper .ProseMirror > *:first-child { margin-top: 0; } /* Placeholder */ .notion-editor-wrapper .ProseMirror p.is-editor-empty:first-child::before, .notion-editor-wrapper .ProseMirror p.is-empty::before { content: attr(data-placeholder); float: left; color: var(--muted-foreground); pointer-events: none; height: 0; opacity: 0.4; font-style: italic; } /* --- Paragraphs --- */ .notion-editor-wrapper .ProseMirror p { margin: 0.2em 0; } /* --- Headings (Notion style — clean, sans-serif) --- */ .notion-editor-wrapper .ProseMirror h1 { font-size: 1.75rem; font-weight: 700; margin: 1.2em 0 0.2em; line-height: 1.25; letter-spacing: -0.02em; } .notion-editor-wrapper .ProseMirror h2 { font-size: 1.375rem; font-weight: 600; margin: 1em 0 0.15em; line-height: 1.3; letter-spacing: -0.01em; } .notion-editor-wrapper .ProseMirror h3 { font-size: 1.125rem; font-weight: 600; margin: 0.8em 0 0.1em; line-height: 1.35; } /* --- Lists --- */ .notion-editor-wrapper .ProseMirror ul { list-style-type: disc; padding-left: 1.5rem; margin: 0.25em 0; } .notion-editor-wrapper .ProseMirror ol { list-style-type: decimal; padding-left: 1.5rem; margin: 0.25em 0; } .notion-editor-wrapper .ProseMirror li > p { margin: 0.1em 0; } .notion-editor-wrapper .ProseMirror li > ul, .notion-editor-wrapper .ProseMirror li > ol { margin: 0.1em 0; } /* --- Task / Todo List --- */ .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] { list-style: none; padding-left: 0; } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li { display: flex; align-items: flex-start; gap: 0.4rem; margin: 0.2em 0; } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li > label { display: flex; align-items: center; cursor: pointer; margin-top: 2px; } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li > label input[type="checkbox"] { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border: 2px solid var(--border); border-radius: 4px; cursor: pointer; display: grid; place-content: center; transition: all 0.15s ease; background: transparent; flex-shrink: 0; } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li > label input[type="checkbox"]:checked { background: var(--primary); border-color: var(--primary); } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li > label input[type="checkbox"]::before { content: ""; width: 10px; height: 10px; transform: scale(0); transition: 120ms transform ease-in-out; box-shadow: inset 1em 1em white; clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li > label input[type="checkbox"]:checked::before { transform: scale(1); } .notion-editor-wrapper .ProseMirror ul[data-type="taskList"] li[data-checked="true"] > div > p { color: var(--muted-foreground); text-decoration: line-through; } /* --- Blockquote --- */ .notion-editor-wrapper .ProseMirror blockquote { border-left: 3px solid var(--primary); padding: 0.25em 0 0.25em 1em; margin: 0.4em 0; color: var(--muted-foreground); font-style: italic; background: oklch(0.5 0 0 / 0.03); border-radius: 0 4px 4px 0; } /* --- Code --- */ .notion-editor-wrapper .ProseMirror code { background: var(--muted); padding: 0.15em 0.4em; border-radius: 4px; font-size: 0.85em; font-family: var(--font-mono, ui-monospace, monospace); color: var(--foreground); } .notion-editor-wrapper .ProseMirror pre { background: var(--muted); border-radius: 8px; padding: 0.85rem 1rem; margin: 0.5em 0; overflow-x: auto; border: 1px solid var(--border); } .notion-editor-wrapper .ProseMirror pre code { background: none; padding: 0; border-radius: 0; font-size: 0.8125rem; line-height: 1.6; } /* --- Horizontal Rule --- */ .notion-editor-wrapper .ProseMirror hr { border: none; border-top: 1px solid var(--border); margin: 0.75em 0; } /* --- Strong / Marks --- */ .notion-editor-wrapper .ProseMirror strong { font-weight: 600; } /* --- Images --- */ .notion-editor-wrapper .ProseMirror img { border-radius: 8px; max-width: 100%; height: auto; display: block; margin: 0.5em 0; transition: filter 0.15s ease; } .notion-editor-wrapper .ProseMirror img:hover { filter: brightness(95%); } .notion-editor-wrapper .ProseMirror img.ProseMirror-selectednode { outline: 2px solid var(--primary); outline-offset: 2px; } /* --- Links --- */ .notion-editor-wrapper .ProseMirror a { color: var(--primary); text-decoration: underline; text-underline-offset: 2px; cursor: pointer; } .notion-editor-wrapper .ProseMirror a:hover { opacity: 0.8; } /* --- Highlight --- */ .notion-editor-wrapper .ProseMirror mark { background: oklch(0.85 0.12 90); border-radius: 2px; padding: 0 1px; } .dark .notion-editor-wrapper .ProseMirror mark { background: oklch(0.4 0.1 90); } /* ============================================ Bubble Menu (floating toolbar on selection) ============================================ */ .notion-bubble-menu { background: var(--popover); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 4px 16px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04); padding: 2px; display: flex; align-items: center; gap: 0; z-index: 100; } .dark .notion-bubble-menu { box-shadow: 0 4px 16px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.06); } .notion-bubble-btn { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 6px; border: none; background: transparent; color: var(--foreground); cursor: pointer; transition: all 0.12s ease; } .notion-bubble-btn:hover { background: var(--accent); } .notion-bubble-btn-active { background: var(--accent); color: var(--primary); } /* AI submenu inside bubble */ .notion-ai-submenu { position: absolute; top: 100%; right: 0; margin-top: 4px; background: var(--popover); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.12); padding: 4px; min-width: 150px; z-index: 110; } .dark .notion-ai-submenu { box-shadow: 0 8px 24px rgba(0,0,0,0.5); } .notion-ai-subitem { display: flex; align-items: center; gap: 8px; width: 100%; padding: 7px 10px; border: none; background: transparent; border-radius: 6px; cursor: pointer; font-size: 0.8125rem; color: var(--foreground); transition: background 0.1s ease; } .notion-ai-subitem:hover { background: var(--accent); } /* Inline input inside bubble menu (link editor) */ .notion-inline-input { background: transparent; border: none; outline: none; font-size: 0.8125rem; color: var(--foreground); width: 200px; min-width: 120px; } .notion-inline-input::placeholder { color: var(--muted-foreground); opacity: 0.6; } /* Image insert overlay */ .notion-overlay { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.3); } .dark .notion-overlay { background: rgba(0,0,0,0.6); } .notion-image-modal { background: var(--popover); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 16px 48px rgba(0,0,0,0.15); padding: 20px; width: 400px; max-width: 90vw; } .dark .notion-image-modal { box-shadow: 0 16px 48px rgba(0,0,0,0.5); } .notion-modal-input { width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--background); color: var(--foreground); font-size: 0.8125rem; outline: none; transition: border-color 0.15s ease; } .notion-modal-input:focus { border-color: var(--primary); } .notion-modal-input::placeholder { color: var(--muted-foreground); opacity: 0.5; } .notion-modal-btn { padding: 6px 14px; border-radius: 6px; font-size: 0.8125rem; border: 1px solid var(--border); background: transparent; color: var(--foreground); cursor: pointer; transition: background 0.1s ease; } .notion-modal-btn:hover { background: var(--accent); } .notion-modal-btn-primary { background: var(--primary); color: var(--primary-foreground); border-color: var(--primary); } .notion-modal-btn-primary:hover { opacity: 0.9; background: var(--primary); } /* ============================================ Slash Command Menu ============================================ */ .notion-slash-menu { position: fixed; z-index: 9999; background: var(--popover); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 4px 24px rgba(0,0,0,0.1); padding: 4px; min-width: 300px; max-height: 340px; overflow-y: auto; scrollbar-width: thin; } .dark .notion-slash-menu { box-shadow: 0 4px 24px rgba(0,0,0,0.5); } .notion-slash-section + .notion-slash-section { border-top: 1px solid var(--border); margin-top: 4px; padding-top: 4px; } .notion-slash-label { padding: 6px 8px 2px; font-size: 11px; font-weight: 600; color: var(--muted-foreground); user-select: none; } .notion-slash-item { display: flex; align-items: center; gap: 8px; width: 100%; padding: 4px 8px; border: none; background: transparent; border-radius: 4px; cursor: pointer; text-align: left; color: var(--foreground); transition: background 0.1s ease; } .notion-slash-item:hover, .notion-slash-item-selected { background: var(--accent); } .notion-slash-icon { display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; border: 1px solid var(--border); border-radius: 4px; background: var(--background); color: var(--muted-foreground); flex-shrink: 0; } .notion-slash-icon-ai { background: oklch(0.95 0.05 270); border-color: oklch(0.8 0.08 270); color: oklch(0.55 0.15 270); } .dark .notion-slash-icon-ai { background: oklch(0.25 0.05 270); border-color: oklch(0.4 0.08 270); color: oklch(0.75 0.15 270); } .notion-slash-loading { display: flex; align-items: center; gap: 6px; padding: 8px 10px; font-size: 13px; color: var(--muted-foreground); } .notion-slash-title { font-size: 13px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 0 1 auto; } .notion-slash-desc { font-size: 11px; color: var(--muted-foreground); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1 1 auto; text-align: right; } /* ============================================ Note Card Rich Text Preview ============================================ */ .rt-preview { font-size: 0.875rem; line-height: 1.6; } .rt-preview h1 { font-size: 1.3rem; font-weight: 700; margin: 0.3em 0; } .rt-preview h2 { font-size: 1.1rem; font-weight: 600; margin: 0.3em 0; } .rt-preview h3 { font-size: 1rem; font-weight: 600; margin: 0.3em 0; } .rt-preview p { margin: 0.2em 0; } .rt-preview ul, .rt-preview ol { padding-left: 1.25rem; margin: 0.2em 0; } .rt-preview blockquote { border-left: 3px solid var(--border); padding-left: 0.75rem; color: var(--muted-foreground); margin: 0.3em 0; }