@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap'); /* Layout: app sidebar + canvas main area (matches chat-page-with-sidebar pattern) */ .canvas-page-with-sidebar { display: flex; height: 100vh; overflow: hidden; background: var(--bg-gradient); } .canvas-main-area { flex: 1; margin-left: 300px; height: 100vh; transition: margin-left 0.3s ease; overflow: hidden; display: flex; flex-direction: column; } .canvas-main-area.sidebar-collapsed { margin-left: 70px; } .canvas-app-shell { flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden; } @media (max-width: 768px) { .canvas-main-area, .canvas-main-area.sidebar-collapsed { margin-left: 0; } } /* PhD Canvas — color palette matched to the rest of the app (Tailwind gray + indigo accent + violet "wedge" accent) */ .canvas-page-with-sidebar { --canvas-bg: #111827; --canvas-bg-2: #0f172a; --canvas-surface: #1F2937; --canvas-surface-2: #374151; --canvas-surface-3: #4B5563; --canvas-border: #374151; --canvas-border-2: #4B5563; --canvas-text: #F9FAFB; --canvas-text-2: #D1D5DB; --canvas-text-3: #9CA3AF; --canvas-text-4: #6B7280; --canvas-accent: #818CF8; --canvas-accent-dim: #4F46E5; --canvas-accent-glow: rgba(129, 140, 248, 0.20); --canvas-critic: #A78BFA; --canvas-critic-dim: #7C3AED; --canvas-critic-glow: rgba(167, 139, 250, 0.20); --canvas-warn: #F59E0B; --canvas-danger: #DC2626; --canvas-ok: #10B981; --canvas-shadow: 0 8px 24px rgba(0,0,0,0.4), 0 2px 6px rgba(0,0,0,0.3); --canvas-shadow-lg: 0 24px 60px rgba(0,0,0,0.55), 0 6px 16px rgba(0,0,0,0.4); --canvas-r-sm: 6px; --canvas-r-md: 10px; --canvas-r-lg: 14px; --canvas-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; --canvas-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; color: var(--canvas-text); font-family: var(--canvas-sans); font-size: 14px; -webkit-font-smoothing: antialiased; } /* Light theme — matches the app's white + Tailwind-gray palette */ .canvas-page-with-sidebar[data-canvas-theme="light"] { --canvas-bg: #F9FAFB; /* gray-50 */ --canvas-bg-2: #FFFFFF; --canvas-surface: #FFFFFF; --canvas-surface-2: #F3F4F6; /* gray-100 */ --canvas-surface-3: #E5E7EB; /* gray-200 */ --canvas-border: #E5E7EB; /* gray-200 */ --canvas-border-2: #D1D5DB; /* gray-300 */ --canvas-text: #111827; /* gray-900 */ --canvas-text-2: #374151; /* gray-700 */ --canvas-text-3: #6B7280; /* gray-500 */ --canvas-text-4: #9CA3AF; /* gray-400 */ --canvas-accent: #6366F1; /* indigo-500 (matches accent-primary) */ --canvas-accent-dim: #C7D2FE; --canvas-accent-glow: rgba(99, 102, 241, 0.15); --canvas-critic: #8B5CF6; /* violet-500 (matches accent-secondary) */ --canvas-critic-glow: rgba(139, 92, 246, 0.12); --canvas-shadow: 0 4px 14px rgba(20, 30, 50, 0.08); --canvas-shadow-lg: 0 18px 48px rgba(20, 30, 50, 0.16); } .canvas-page-with-sidebar *, .canvas-modal-backdrop *, .toast-stack * { box-sizing: border-box; } /* Standardized motion tokens */ .canvas-page-with-sidebar, .canvas-modal-backdrop { --canvas-ease: cubic-bezier(0.2, 0, 0, 1); --canvas-fast: 120ms var(--canvas-ease); --canvas-base: 180ms var(--canvas-ease); --canvas-slow: 280ms var(--canvas-ease); } /* Widgets fade + slight rise on mount */ @keyframes canvas-widget-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } } .canvas-page-with-sidebar .widget { animation: canvas-widget-in 240ms var(--canvas-ease); } /* Smooth content view transitions */ @keyframes canvas-view-in { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: none; } } .canvas-content > * { animation: canvas-view-in 220ms var(--canvas-ease); } /* Improved focus rings — accent halo, no harsh outline */ .canvas-page-with-sidebar :focus-visible, .canvas-modal-backdrop :focus-visible { outline: none; box-shadow: 0 0 0 3px var(--canvas-accent-glow); border-radius: 4px; } .canvas-page-with-sidebar input:focus-visible, .canvas-page-with-sidebar textarea:focus-visible, .canvas-modal-backdrop input:focus-visible, .canvas-modal-backdrop textarea:focus-visible { outline: none; border-color: var(--canvas-accent); box-shadow: 0 0 0 3px var(--canvas-accent-glow); } /* Respect users who don't want motion */ @media (prefers-reduced-motion: reduce) { .canvas-page-with-sidebar .widget, .canvas-content > * { animation: none; } } .canvas-page-with-sidebar button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; } .canvas-page-with-sidebar input, .canvas-page-with-sidebar textarea, .canvas-page-with-sidebar select, .canvas-modal-backdrop input, .canvas-modal-backdrop textarea, .canvas-modal-backdrop select { font-family: inherit; color: inherit; } .canvas-page-with-sidebar ::selection { background: var(--canvas-accent-glow); color: var(--canvas-text); } /* Floating header — matches the .floating-header pattern used on ChatPage */ .canvas-page-with-sidebar .floating-header { position: sticky; top: 0; z-index: 100; background: var(--header-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--header-border); padding: 12px 24px; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px; box-shadow: var(--header-shadow); flex-shrink: 0; } .canvas-page-with-sidebar .floating-header .header-right { justify-self: end; } .canvas-page-with-sidebar .header-left { display: flex; align-items: center; gap: 16px; } .canvas-page-with-sidebar .header-right { display: flex; align-items: center; gap: 8px; } .canvas-page-with-sidebar .mobile-menu-button { display: none; width: 40px; height: 40px; border-radius: 10px; border: none; background: var(--canvas-surface-2); color: var(--canvas-text-2); align-items: center; justify-content: center; cursor: pointer; } @media (max-width: 768px) { .canvas-page-with-sidebar .mobile-menu-button { display: flex; } } .canvas-page-with-sidebar .header-brand { display: flex; align-items: center; gap: 12px; } .canvas-page-with-sidebar .brand-icon { width: 40px; height: 40px; background: linear-gradient(135deg, var(--canvas-accent), var(--canvas-critic)); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: #fff; } .canvas-page-with-sidebar .brand-text { display: flex; flex-direction: column; gap: 6px; } .canvas-page-with-sidebar .brand-text h1 { font-size: 20px; font-weight: 700; color: var(--canvas-text); margin: 0; line-height: 1.2; letter-spacing: -0.01em; } .canvas-page-with-sidebar .brand-text p { font-size: 13px; color: var(--canvas-text-3); margin: 0; line-height: 1.35; } .canvas-page-with-sidebar .theme-toggle .theme-icon { display: block; } /* When the tabs sit in ChatPage's flex .floating-header, absolutely-position them so they center regardless of header-left/header-right widths. */ .floating-header { position: sticky; } .floating-header > .chat-view-tabs { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } .canvas-tabs-mobile { display: none; } @media (max-width: 900px) { .floating-header > .chat-view-tabs { display: none; } .canvas-tabs-mobile { display: inline-block; background: var(--canvas-surface, var(--bg-tertiary, #f3f4f6)); border: 1px solid var(--canvas-border, var(--border-primary, #e5e7eb)); color: var(--canvas-text, var(--text-primary, #111827)); font-family: inherit; font-size: 13px; padding: 6px 10px; border-radius: 7px; } } /* Shared view-tabs pill bar — used on both Canvas and Chat pages. Uses canvas vars first, falls back to app global vars on Chat. */ .canvas-tabs { display: flex; gap: 2px; background: var(--canvas-surface, var(--bg-tertiary, #f3f4f6)); padding: 3px; border-radius: 8px; border: 1px solid var(--canvas-border, var(--border-primary, #e5e7eb)); justify-self: center; cursor: pointer; } .canvas-tabs .tab { padding: 6px 14px; font-size: 13px; color: var(--canvas-text-2, var(--text-secondary, #6b7280)); border-radius: 6px; display: flex; align-items: center; gap: 7px; font-weight: 500; border: none; background: transparent; font-family: inherit; cursor: pointer; transition: background .12s, color .12s; } .canvas-tabs .tab:hover { color: var(--canvas-text, var(--text-primary, #111827)); } .canvas-tabs .tab.active { background: var(--canvas-surface-3, var(--bg-primary, #fff)); color: var(--canvas-text, var(--text-primary, #111827)); box-shadow: inset 0 0 0 1px var(--canvas-border-2, var(--border-secondary, #d1d5db)); } .canvas-tabs .tab .badge { font-family: var(--canvas-mono); font-size: 10px; background: var(--canvas-accent-glow); color: var(--canvas-accent); padding: 1px 5px; border-radius: 3px; letter-spacing: 0.02em; } .canvas-page-with-sidebar .topbar-spacer { flex: 1; } .canvas-page-with-sidebar .icon-btn, .canvas-modal-backdrop .icon-btn { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 7px; color: var(--canvas-text-2); transition: background .12s, color .12s; font-family: inherit; cursor: pointer; border: none; background: none; } .canvas-page-with-sidebar .icon-btn:hover, .canvas-modal-backdrop .icon-btn:hover { background: var(--canvas-surface); color: var(--canvas-text); } .canvas-page-with-sidebar .btn, .canvas-modal-backdrop .btn { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 7px; font-size: 13px; font-weight: 500; background: var(--canvas-surface-2); border: 1px solid var(--canvas-border-2); color: var(--canvas-text); transition: all .12s; font-family: inherit; cursor: pointer; } .canvas-page-with-sidebar .btn:hover, .canvas-modal-backdrop .btn:hover { background: var(--canvas-surface-3); border-color: var(--canvas-border-2); } .canvas-page-with-sidebar .btn-primary, .canvas-modal-backdrop .btn-primary { background: var(--canvas-accent); color: #FFFFFF; border-color: var(--canvas-accent); font-weight: 600; } .canvas-page-with-sidebar .btn-primary:hover, .canvas-modal-backdrop .btn-primary:hover { background: var(--canvas-accent-dim); border-color: var(--canvas-accent-dim); filter: brightness(1.05); box-shadow: 0 0 0 3px var(--canvas-accent-glow); } .canvas-page-with-sidebar .btn-critic, .canvas-modal-backdrop .btn-critic { background: var(--canvas-critic); color: #FFFFFF; border-color: var(--canvas-critic); font-weight: 600; } .canvas-page-with-sidebar .btn-critic:hover, .canvas-modal-backdrop .btn-critic:hover { filter: brightness(1.08); box-shadow: 0 0 0 3px var(--canvas-critic-glow); } .canvas-page-with-sidebar .btn-ghost, .canvas-modal-backdrop .btn-ghost { background: transparent; border-color: transparent; color: var(--canvas-text-2); } .canvas-page-with-sidebar .btn-ghost:hover, .canvas-modal-backdrop .btn-ghost:hover { background: var(--canvas-surface); color: var(--canvas-text); border-color: transparent; } .canvas-page-with-sidebar .btn-danger:hover, .canvas-modal-backdrop .btn-danger:hover { background: rgba(240,106,106,0.12); border-color: rgba(240,106,106,0.4); color: var(--canvas-danger); } .canvas-page-with-sidebar .btn:disabled, .canvas-modal-backdrop .btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Content */ .canvas-content { padding: 24px 28px 80px; max-width: 100%; flex: 1; overflow-y: auto; background: var(--canvas-bg); } .canvas-page-with-sidebar[data-canvas-theme="light"] .canvas-content { background: var(--canvas-bg); } .canvas-page-with-sidebar .page-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 22px; } .canvas-page-with-sidebar .page-title { font-size: 28px; font-weight: 700; letter-spacing: -0.02em; margin: 0; color: var(--canvas-text); } .canvas-page-with-sidebar .page-sub { color: var(--canvas-text-3); font-size: 13px; margin-top: 6px; } .canvas-page-with-sidebar .page-meta { font-family: var(--canvas-mono); font-size: 11px; color: var(--canvas-text-3); display: flex; align-items: center; gap: 8px; } .canvas-page-with-sidebar .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--canvas-ok); box-shadow: 0 0 8px var(--canvas-ok); } /* ----- Insights view ----- */ .canvas-page-with-sidebar .insights-stats { display: flex; gap: 18px; align-items: center; padding: 14px 18px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 10px; margin-bottom: 14px; flex-wrap: wrap; } .canvas-page-with-sidebar[data-canvas-theme="light"] .insights-stats { background: #ffffff; border-color: rgba(15, 15, 15, 0.06); } .canvas-page-with-sidebar .insights-stat { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; min-width: 70px; } .canvas-page-with-sidebar .insights-stat-value { font-family: var(--canvas-mono); font-size: 22px; font-weight: 700; color: var(--canvas-text); letter-spacing: -0.02em; line-height: 1; } .canvas-page-with-sidebar .insights-stat-label { font-size: 11px; color: var(--canvas-text-3); text-transform: uppercase; letter-spacing: 0.06em; font-weight: 500; } .canvas-page-with-sidebar .insights-stat-update { font-size: 11px; color: var(--canvas-text-3); font-family: var(--canvas-mono); display: inline-flex; align-items: center; gap: 6px; } .canvas-page-with-sidebar .insights-filters { display: flex; gap: 12px; align-items: center; margin-bottom: 14px; flex-wrap: wrap; } .canvas-page-with-sidebar .insights-pinned-strip { display: flex; align-items: center; gap: 8px; padding: 10px 14px; margin-bottom: 14px; background: var(--canvas-accent-glow); border: 1px solid rgba(99, 102, 241, 0.18); border-radius: 8px; flex-wrap: wrap; } .canvas-page-with-sidebar .insights-pinned-pill { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 999px; font-family: inherit; font-size: 12px; color: var(--canvas-text); cursor: pointer; transition: all .12s; } .canvas-page-with-sidebar .insights-pinned-pill:hover { border-color: var(--canvas-accent); color: var(--canvas-accent); } /* Cards vs Tasks view toggle on the Insights view */ .canvas-page-with-sidebar .insights-view-toggle { display: inline-flex; align-items: center; gap: 2px; margin-bottom: 12px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 7px; padding: 3px; } .canvas-page-with-sidebar .insights-view-toggle button { background: transparent; border: none; padding: 5px 12px; border-radius: 5px; font-family: inherit; font-size: 12px; color: var(--canvas-text-3); display: inline-flex; align-items: center; gap: 6px; cursor: pointer; transition: background .12s, color .12s; } .canvas-page-with-sidebar .insights-view-toggle button:hover { color: var(--canvas-text); } .canvas-page-with-sidebar .insights-view-toggle button.active { background: var(--canvas-surface-3); color: var(--canvas-text); box-shadow: inset 0 0 0 1px var(--canvas-border-2); } /* Flat task list view */ .canvas-page-with-sidebar .insights-tasks-list { display: flex; flex-direction: column; gap: 4px; } .canvas-page-with-sidebar .insights-task-row { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 7px; position: relative; transition: background .12s, border-color .12s; } .canvas-page-with-sidebar .insights-task-row:hover { border-color: var(--canvas-border-2); } .canvas-page-with-sidebar .insights-task-row.task-completed { opacity: 0.7; } .canvas-page-with-sidebar .insights-task-row.task-abandoned { opacity: 0.5; } .canvas-page-with-sidebar .insights-task-row.task-completed:hover, .canvas-page-with-sidebar .insights-task-row.task-abandoned:hover { opacity: 0.95; } .canvas-page-with-sidebar .insights-task-row .insight-task-check { margin-top: 4px; } .canvas-page-with-sidebar .insights-task-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; } .canvas-page-with-sidebar .insights-task-section { background: transparent; border: none; color: var(--canvas-text-3); font-family: var(--canvas-mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.06em; padding: 0; display: inline-flex; align-items: center; gap: 5px; cursor: pointer; align-self: flex-start; } .canvas-page-with-sidebar .insights-task-section:hover { color: var(--canvas-accent); } .canvas-page-with-sidebar .insights-task-text { font-size: 13px; color: var(--canvas-text); line-height: 1.5; } .canvas-page-with-sidebar .insights-task-row.task-completed .insights-task-text, .canvas-page-with-sidebar .insights-task-row.task-abandoned .insights-task-text { text-decoration: line-through; color: var(--canvas-text-3); } .canvas-page-with-sidebar .insights-task-text strong { color: var(--canvas-text); } /* Per-card progress bar — replaces the old single status pill */ .canvas-page-with-sidebar .insight-progress { display: flex; flex-direction: column; gap: 4px; padding: 0 0 4px; } .canvas-page-with-sidebar .insight-progress-meta { display: flex; align-items: center; gap: 8px; font-family: var(--canvas-mono); font-size: 10.5px; color: var(--canvas-text-3); } .canvas-page-with-sidebar .insight-progress-count { font-weight: 600; } .canvas-page-with-sidebar .insight-progress-badge { font-family: var(--canvas-mono); font-size: 9px; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; padding: 1px 6px; border-radius: 3px; } .canvas-page-with-sidebar .insight-progress-badge.done { background: rgba(16,185,129,0.15); color: #10B981; } .canvas-page-with-sidebar .insight-progress-badge.inprog { background: rgba(59,130,246,0.15); color: #3B82F6; } .canvas-page-with-sidebar .insight-progress-badge.abandoned { background: var(--canvas-surface-2); color: var(--canvas-text-4); } .canvas-page-with-sidebar .insight-progress-bar { height: 5px; background: var(--canvas-surface-2); border-radius: 3px; overflow: hidden; display: flex; } .canvas-page-with-sidebar .insight-progress-bar > i { display: block; height: 100%; transition: width .25s; } .canvas-page-with-sidebar .insight-progress-bar .ip-completed { background: #10B981; } .canvas-page-with-sidebar .insight-progress-bar .ip-inprogress { background: #3B82F6; } .canvas-page-with-sidebar .insight-progress-bar .ip-abandoned { background: var(--canvas-text-4); } /* Per-bullet tasks inside the body */ .canvas-page-with-sidebar .insight-tasks { list-style: none; padding: 0; margin: 6px 0 0; display: flex; flex-direction: column; gap: 6px; } .canvas-page-with-sidebar .insight-task { display: flex; align-items: flex-start; gap: 8px; padding: 2px 0; font-size: 13px; color: var(--canvas-text-2); line-height: 1.5; position: relative; } .canvas-page-with-sidebar .insight-task.task-completed .insight-task-text { text-decoration: line-through; color: var(--canvas-text-3); opacity: 0.7; } .canvas-page-with-sidebar .insight-task.task-abandoned .insight-task-text { text-decoration: line-through; color: var(--canvas-text-4); opacity: 0.5; } .canvas-page-with-sidebar .insight-task.task-in-progress .insight-task-text { color: var(--canvas-text); font-weight: 500; } .canvas-page-with-sidebar .insight-task-text { flex: 1; } .canvas-page-with-sidebar .insight-task-text strong { color: var(--canvas-text); } .canvas-page-with-sidebar .insight-task-check { flex-shrink: 0; width: 18px; height: 18px; border-radius: 4px; border: 1.5px solid currentColor; background: transparent; cursor: pointer; display: grid; place-items: center; margin-top: 2px; transition: background .12s; } .canvas-page-with-sidebar .insight-task-check:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .insight-task.task-completed .insight-task-check { background: #10B981; color: #fff; } .canvas-page-with-sidebar .insight-task.task-abandoned .insight-task-check { background: var(--canvas-text-4); color: #fff; } .canvas-page-with-sidebar .task-check-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; } /* Sidebar row for a fully-done section gets struck through */ .sidebar .csm-row-done .csm-row-label { text-decoration: line-through; color: var(--text-tertiary, #9CA3AF); } .sidebar .csm-row-done .csm-row-meta { color: #10B981; font-weight: 600; } /* Insight status pill + menu */ .canvas-page-with-sidebar .insight-status-wrap { position: relative; } .canvas-page-with-sidebar .insight-status-pill { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 999px; border: 1px solid transparent; background: transparent; font-family: inherit; font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; cursor: pointer; transition: background .12s; } .canvas-page-with-sidebar .insight-status-pill:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .insight-status-menu { position: absolute; top: calc(100% + 4px); right: 0; z-index: 5; background: var(--canvas-surface); border: 1px solid var(--canvas-border-2); border-radius: 7px; box-shadow: var(--canvas-shadow-lg); padding: 4px; min-width: 150px; display: flex; flex-direction: column; } .canvas-page-with-sidebar .insight-status-menu button { display: flex; align-items: center; gap: 8px; background: transparent; border: none; padding: 6px 10px; border-radius: 4px; font-family: inherit; font-size: 12px; color: var(--canvas-text); cursor: pointer; text-align: left; } .canvas-page-with-sidebar .insight-status-menu button:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .insight-status-menu button.active { background: var(--canvas-accent-glow); color: var(--canvas-accent); font-weight: 600; } /* Card-level status mutes the body when completed/abandoned */ .canvas-page-with-sidebar .insight.status-completed .insight-body, .canvas-page-with-sidebar .insight.status-completed .insight-foot { opacity: 0.65; } .canvas-page-with-sidebar .insight.status-abandoned { opacity: 0.5; } .canvas-page-with-sidebar .insight.status-abandoned:hover { opacity: 0.85; } /* Progress bar in stats — segmented for status mix */ .canvas-page-with-sidebar .insights-stat-progress { flex: 1; min-width: 180px; max-width: 280px; gap: 4px; } .canvas-page-with-sidebar .insights-progress-bar { height: 6px; width: 100%; background: var(--canvas-surface-2); border-radius: 3px; overflow: hidden; display: flex; } .canvas-page-with-sidebar .insights-progress-bar > i { display: block; height: 100%; transition: width .3s; } .canvas-page-with-sidebar .insights-progress-bar .ip-completed { background: #10B981; } .canvas-page-with-sidebar .insights-progress-bar .ip-inprogress { background: #3B82F6; } .canvas-page-with-sidebar .insights-progress-bar .ip-abandoned { background: var(--canvas-text-4); } /* Confidence ring */ .canvas-page-with-sidebar .confidence-ring { position: relative; width: 32px; height: 32px; display: grid; place-items: center; flex-shrink: 0; } .canvas-page-with-sidebar .confidence-ring span { position: absolute; font-family: var(--canvas-mono); font-size: 9.5px; font-weight: 700; } /* Insight card refinements */ .canvas-page-with-sidebar .insight { transition: border-color .15s, transform .15s, box-shadow .15s; } .canvas-page-with-sidebar .insight:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,0,0,0.08); } .canvas-page-with-sidebar .insight.is-pinned { border-color: var(--canvas-accent); background: var(--canvas-surface); box-shadow: 0 0 0 1px var(--canvas-accent-glow); } .canvas-page-with-sidebar[data-canvas-theme="light"] .insight.is-pinned { background: #ffffff; } /* Insight footer (source count + updated time) */ .canvas-page-with-sidebar .insight-foot { display: flex; justify-content: space-between; align-items: center; padding: 6px 0 0; font-size: 11px; color: var(--canvas-text-3); } .canvas-page-with-sidebar .insight-foot-meta { display: inline-flex; align-items: center; gap: 6px; font-family: var(--canvas-mono); } .canvas-page-with-sidebar .insight-dot { width: 3px; height: 3px; border-radius: 50%; background: var(--canvas-text-4); } /* Expanded source-quotes panel */ .canvas-page-with-sidebar .insight-detail { margin-top: 8px; padding: 10px 12px; background: var(--canvas-bg-2); border-left: 2px solid var(--canvas-accent); border-radius: 0 6px 6px 0; display: flex; flex-direction: column; gap: 6px; animation: canvas-view-in 180ms var(--canvas-ease); } .canvas-page-with-sidebar[data-canvas-theme="light"] .insight-detail { background: rgba(99, 102, 241, 0.04); } .canvas-page-with-sidebar .insight-detail-head { font-size: 10.5px; font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.06em; color: var(--canvas-accent); font-weight: 600; } .canvas-page-with-sidebar .insight-quote { font-size: 12.5px; color: var(--canvas-text-2); line-height: 1.5; font-style: italic; } /* Insights */ .canvas-page-with-sidebar .insight-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } @media (max-width: 1100px) { .canvas-page-with-sidebar .insight-grid { grid-template-columns: 1fr; } } .canvas-page-with-sidebar .insight { background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: var(--canvas-r-md); padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; transition: border-color .15s; } .canvas-page-with-sidebar .insight:hover { border-color: var(--canvas-border-2); } .canvas-page-with-sidebar[data-canvas-theme="light"] .insight { box-shadow: 0 1px 2px rgba(20,30,50,0.03); } .canvas-page-with-sidebar .insight-head { display: flex; align-items: center; gap: 10px; } .canvas-page-with-sidebar .insight-icon { width: 28px; height: 28px; border-radius: 7px; background: var(--canvas-surface-2); display: grid; place-items: center; color: var(--canvas-accent); } .canvas-page-with-sidebar .insight-title { font-weight: 600; font-size: 14px; flex: 1; color: var(--canvas-text); } .canvas-page-with-sidebar .confidence { display: flex; align-items: center; gap: 6px; font-family: var(--canvas-mono); font-size: 11px; color: var(--canvas-text-3); } .canvas-page-with-sidebar .conf-bar { width: 36px; height: 4px; background: var(--canvas-surface-3); border-radius: 2px; overflow: hidden; } .canvas-page-with-sidebar[data-canvas-theme="light"] .conf-bar { background: #e7ebf2; } .canvas-page-with-sidebar .conf-bar > i { display: block; height: 100%; background: var(--canvas-accent); border-radius: 2px; } .canvas-page-with-sidebar .insight-body { color: var(--canvas-text-2); font-size: 13px; } .canvas-page-with-sidebar .insight-body ul { margin: 6px 0 0; padding-left: 18px; } .canvas-page-with-sidebar .insight-body li { margin-bottom: 4px; } .canvas-page-with-sidebar .insight-body li::marker { color: var(--canvas-text-4); } .canvas-page-with-sidebar .insight-body strong { color: var(--canvas-text); font-weight: 600; } .canvas-page-with-sidebar .insight-actions { display: flex; gap: 4px; flex-wrap: wrap; padding-top: 10px; border-top: 1px dashed var(--canvas-border); margin-top: 4px; } .canvas-page-with-sidebar .chip, .canvas-modal-backdrop .chip { font-size: 11px; padding: 4px 9px; border-radius: 5px; background: var(--canvas-surface-2); color: var(--canvas-text-2); display: inline-flex; align-items: center; gap: 5px; transition: background .12s, color .12s; border: none; cursor: pointer; } .canvas-page-with-sidebar .chip:hover { background: var(--canvas-surface-3); color: var(--canvas-text); } .canvas-page-with-sidebar .chip.pinned { background: var(--canvas-accent-glow); color: var(--canvas-accent); } /* Workspace grid */ .canvas-page-with-sidebar .workspace { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 18px; align-items: start; } /* Notion-inspired widget treatment: hairline borders, generous padding, no hard chrome — the content is the page, the frame is barely there. */ .canvas-page-with-sidebar .widget { background: var(--canvas-surface); border: 1px solid transparent; border-radius: 6px; display: flex; flex-direction: column; min-height: 200px; position: relative; overflow: hidden; transition: background .15s, border-color .15s, box-shadow .15s; } .canvas-page-with-sidebar[data-canvas-theme="light"] .widget { background: #FFFFFF; border-color: rgba(15, 15, 15, 0.06); } .canvas-page-with-sidebar .widget.size-S { grid-column: span 2; } .canvas-page-with-sidebar .widget.size-M { grid-column: span 3; } .canvas-page-with-sidebar .widget.size-L { grid-column: span 6; } .canvas-page-with-sidebar .widget.dragging { opacity: 0.4; } .canvas-page-with-sidebar .widget.drag-over { box-shadow: 0 0 0 2px var(--canvas-accent), 0 4px 14px var(--canvas-accent-glow); } .canvas-page-with-sidebar .widget:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar[data-canvas-theme="light"] .widget:hover { background: rgba(0, 0, 0, 0.015); border-color: rgba(15, 15, 15, 0.08); } .canvas-page-with-sidebar .widget.critic { border-color: rgba(167, 139, 250, 0.18); } .canvas-page-with-sidebar[data-canvas-theme="light"] .widget.critic { border-color: rgba(139, 92, 246, 0.18); } .canvas-page-with-sidebar .widget.critic:hover { border-color: var(--canvas-critic); } /* Preserve 3-S / 2-M / 1-L per row at every desktop width. On phones (≤768px) just stack everything full-width for readability. */ @media (max-width: 768px) { .canvas-page-with-sidebar .workspace { grid-template-columns: 1fr; } .canvas-page-with-sidebar .widget.size-S, .canvas-page-with-sidebar .widget.size-M, .canvas-page-with-sidebar .widget.size-L { grid-column: 1 / -1; } } /* Notion-style header: drag grip is hover-only, title is plain text. */ .canvas-page-with-sidebar .widget-head { display: flex; align-items: center; gap: 8px; padding: 14px 16px 8px; cursor: grab; } .canvas-page-with-sidebar .widget-head:active { cursor: grabbing; } .canvas-page-with-sidebar .widget-head .drag-grip { color: var(--canvas-text-4); display: grid; place-items: center; width: 14px; opacity: 0; transition: opacity .15s; } .canvas-page-with-sidebar .widget:hover .widget-head .drag-grip { opacity: 0.6; } .canvas-page-with-sidebar .widget-icon { width: 18px; height: 18px; display: grid; place-items: center; color: var(--canvas-text-3); } .canvas-page-with-sidebar .widget.critic .widget-icon { color: var(--canvas-critic); } .canvas-page-with-sidebar .widget-title { font-weight: 600; font-size: 13.5px; flex: 1; letter-spacing: -0.005em; color: var(--canvas-text); } .canvas-page-with-sidebar .widget-tag, .canvas-modal-backdrop .widget-tag { font-size: 9.5px; font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.08em; padding: 2px 6px; border-radius: 3px; background: var(--canvas-critic-glow); color: var(--canvas-critic); font-weight: 600; } .canvas-modal-backdrop .widget-tag-enhanced { background: rgba(16, 185, 129, 0.15); color: #10B981; } .canvas-modal-backdrop .widget-tag-chat { background: rgba(59, 130, 246, 0.15); color: #3B82F6; } .canvas-page-with-sidebar .widget-actions { display: flex; gap: 1px; opacity: 0; transition: opacity .12s; } .canvas-page-with-sidebar .widget:hover .widget-actions { opacity: 1; } .canvas-page-with-sidebar .widget-actions .icon-btn { width: 24px; height: 24px; } .canvas-page-with-sidebar .widget-actions .icon-btn svg { width: 14px; height: 14px; } .canvas-page-with-sidebar .size-pill { font-family: var(--canvas-mono); font-size: 10px; background: var(--canvas-surface-2); color: var(--canvas-text-3); padding: 2px 6px; border-radius: 4px; cursor: pointer; user-select: none; } .canvas-page-with-sidebar .size-pill:hover { background: var(--canvas-surface-3); color: var(--canvas-text); } .canvas-page-with-sidebar .widget-body { padding: 4px 16px 18px; flex: 1; display: flex; flex-direction: column; gap: 12px; min-height: 0; } /* Preset picker (shown above the empty workspace) */ .canvas-page-with-sidebar .canvas-presets { margin-bottom: 18px; } .canvas-page-with-sidebar .canvas-presets-head { margin-bottom: 10px; } .canvas-page-with-sidebar .canvas-presets-title { font-size: 16px; font-weight: 600; color: var(--canvas-text); } .canvas-page-with-sidebar .canvas-presets-sub { font-size: 12.5px; color: var(--canvas-text-3); margin-top: 2px; } .canvas-page-with-sidebar .canvas-presets-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; } .canvas-page-with-sidebar .canvas-preset-card { background: transparent; border: 1px solid rgba(15, 15, 15, 0.10); border-radius: 8px; padding: 16px; display: flex; gap: 12px; text-align: left; cursor: pointer; transition: background .15s, border-color .15s; font-family: inherit; color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .canvas-preset-card { border-color: rgba(15, 15, 15, 0.12); } .canvas-page-with-sidebar .canvas-preset-card:hover { background: var(--canvas-surface-2); border-color: rgba(15, 15, 15, 0.15); } .canvas-page-with-sidebar[data-canvas-theme="light"] .canvas-preset-card:hover { background: rgba(0, 0, 0, 0.025); } .canvas-page-with-sidebar .canvas-preset-icon { width: 32px; height: 32px; border-radius: 6px; background: var(--canvas-surface-2); color: var(--canvas-text-2); display: grid; place-items: center; flex-shrink: 0; font-size: 16px; } .canvas-page-with-sidebar .canvas-preset-content { flex: 1; min-width: 0; } .canvas-page-with-sidebar .canvas-preset-name { font-size: 13.5px; font-weight: 600; color: var(--canvas-text); } .canvas-page-with-sidebar .canvas-preset-desc { font-size: 11.5px; color: var(--canvas-text-3); margin-top: 3px; line-height: 1.45; } .canvas-page-with-sidebar .canvas-preset-meta { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-4); margin-top: 6px; text-transform: uppercase; letter-spacing: 0.06em; } .canvas-page-with-sidebar .empty-cell { border: 1.5px dashed var(--canvas-border-2); border-radius: var(--canvas-r-md); padding: 28px 24px; text-align: center; color: var(--canvas-text-3); font-size: 13px; grid-column: span 6; display: flex; flex-direction: column; align-items: center; gap: 10px; background: rgba(255,255,255,0.01); } /* Inputs / forms (scoped) */ .canvas-page-with-sidebar .input, .canvas-page-with-sidebar .textarea, .canvas-page-with-sidebar .select, .canvas-modal-backdrop .input, .canvas-modal-backdrop .textarea, .canvas-modal-backdrop .select { width: 100%; background: var(--canvas-bg-2); border: 1px solid var(--canvas-border-2); border-radius: 7px; padding: 8px 10px; font-size: 13px; color: var(--canvas-text); transition: border-color .12s, box-shadow .12s; } .canvas-page-with-sidebar .input:focus, .canvas-page-with-sidebar .textarea:focus, .canvas-page-with-sidebar .select:focus, .canvas-modal-backdrop .input:focus, .canvas-modal-backdrop .textarea:focus, .canvas-modal-backdrop .select:focus { outline: none; border-color: var(--canvas-accent); box-shadow: 0 0 0 3px var(--canvas-accent-glow); } .canvas-page-with-sidebar .textarea, .canvas-modal-backdrop .textarea { resize: vertical; min-height: 80px; font-family: inherit; line-height: 1.5; } .canvas-page-with-sidebar .label, .canvas-modal-backdrop .label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-3); font-weight: 600; } .canvas-page-with-sidebar[data-canvas-theme="light"] .input, .canvas-page-with-sidebar[data-canvas-theme="light"] .textarea, .canvas-page-with-sidebar[data-canvas-theme="light"] .select, body[data-canvas-theme="light"] .canvas-modal-backdrop .input, body[data-canvas-theme="light"] .canvas-modal-backdrop .textarea, body[data-canvas-theme="light"] .canvas-modal-backdrop .select { background: #fff; } /* Modal backdrop — rendered at the body level, so it gets its own theme vars */ .canvas-modal-backdrop { position: fixed; inset: 0; background: rgba(17, 24, 39, 0.7); backdrop-filter: blur(6px); z-index: 100; display: grid; place-items: center; padding: 40px 20px; animation: canvas-fade-in .15s ease; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --canvas-bg: #111827; --canvas-bg-2: #0f172a; --canvas-surface: #1F2937; --canvas-surface-2: #374151; --canvas-surface-3: #4B5563; --canvas-border: #374151; --canvas-border-2: #4B5563; --canvas-text: #F9FAFB; --canvas-text-2: #D1D5DB; --canvas-text-3: #9CA3AF; --canvas-text-4: #6B7280; --canvas-accent: #818CF8; --canvas-accent-dim: #4F46E5; --canvas-accent-glow: rgba(129, 140, 248, 0.20); --canvas-critic: #A78BFA; --canvas-critic-glow: rgba(167, 139, 250, 0.20); --canvas-warn: #F59E0B; --canvas-danger: #DC2626; --canvas-ok: #10B981; --canvas-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; --canvas-shadow-lg: 0 24px 60px rgba(0,0,0,0.55), 0 6px 16px rgba(0,0,0,0.4); color: var(--canvas-text); } body[data-canvas-theme="light"] .canvas-modal-backdrop { background: rgba(17, 24, 39, 0.35); --canvas-bg: #F9FAFB; --canvas-bg-2: #FFFFFF; --canvas-surface: #FFFFFF; --canvas-surface-2: #F3F4F6; --canvas-surface-3: #E5E7EB; --canvas-border: #E5E7EB; --canvas-border-2: #D1D5DB; --canvas-text: #111827; --canvas-text-2: #374151; --canvas-text-3: #6B7280; --canvas-text-4: #9CA3AF; --canvas-accent: #6366F1; --canvas-accent-dim: #C7D2FE; --canvas-accent-glow: rgba(99, 102, 241, 0.15); --canvas-critic: #8B5CF6; --canvas-critic-glow: rgba(139, 92, 246, 0.12); --canvas-shadow-lg: 0 18px 48px rgba(20, 30, 50, 0.16); } @keyframes canvas-fade-in { from { opacity: 0 } to { opacity: 1 } } .canvas-modal { background: var(--canvas-surface); border: 1px solid var(--canvas-border-2); border-radius: 14px; width: 100%; max-width: 560px; max-height: 88vh; overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--canvas-shadow-lg); animation: canvas-scale-in .18s cubic-bezier(.22,.9,.3,1); } .canvas-modal.wide { max-width: 760px; } .canvas-modal.huge { max-width: 920px; } .canvas-modal.canvas-tour { max-width: 480px; } @keyframes canvas-scale-in { from { opacity: 0; transform: translateY(8px) scale(0.98) } to { opacity: 1; transform: none } } .canvas-modal .modal-head { padding: 18px 22px 14px; border-bottom: 1px solid var(--canvas-border); display: flex; align-items: center; gap: 12px; } .canvas-modal .modal-title { font-weight: 600; font-size: 15px; flex: 1; letter-spacing: -0.005em; color: var(--canvas-text); } .canvas-modal .modal-sub { color: var(--canvas-text-3); font-size: 12px; margin-top: 2px; } .canvas-modal .modal-body { padding: 18px 22px; overflow-y: auto; flex: 1; } .canvas-modal .modal-foot { padding: 14px 22px; border-top: 1px solid var(--canvas-border); display: flex; justify-content: flex-end; gap: 8px; background: var(--canvas-bg-2); } .canvas-modal .modal-icon { width: 36px; height: 36px; border-radius: 9px; background: var(--canvas-accent-glow); color: var(--canvas-accent); display: grid; place-items: center; } .canvas-modal .modal-icon.critic { background: var(--canvas-critic-glow); color: var(--canvas-critic); } .canvas-modal-backdrop .form-grid { display: grid; gap: 12px; } .canvas-modal-backdrop .form-grid.two { grid-template-columns: 1fr 1fr; } .canvas-modal-backdrop .form-row { display: flex; flex-direction: column; gap: 6px; } /* Widget palette */ .canvas-modal-backdrop .palette-search { padding: 4px 0 16px; position: sticky; top: 0; background: var(--canvas-surface); z-index: 2; } .canvas-modal-backdrop .palette-cats { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; } .canvas-modal-backdrop .palette-cat { font-size: 12px; padding: 5px 10px; border-radius: 999px; background: var(--canvas-surface-2); color: var(--canvas-text-2); border: 1px solid var(--canvas-border); cursor: pointer; font-family: inherit; } .canvas-modal-backdrop .palette-cat:hover { color: var(--canvas-text); } .canvas-modal-backdrop .palette-cat.active { background: var(--canvas-accent-glow); color: var(--canvas-accent); border-color: var(--canvas-accent); } .canvas-modal-backdrop .palette-cat.critic.active { background: var(--canvas-critic-glow); color: var(--canvas-critic); border-color: var(--canvas-critic); } .canvas-modal-backdrop .palette-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; } .canvas-modal-backdrop .palette-item { background: var(--canvas-surface-2); border: 1px solid var(--canvas-border); border-radius: 9px; padding: 12px; display: flex; gap: 10px; align-items: flex-start; cursor: pointer; text-align: left; transition: all .12s; font-family: inherit; color: var(--canvas-text); } .canvas-modal-backdrop .palette-item:hover { background: var(--canvas-surface-3); border-color: var(--canvas-border-2); transform: translateY(-1px); } .canvas-modal-backdrop .palette-item.added { opacity: 0.4; cursor: default; } .canvas-modal-backdrop .palette-item.added:hover { transform: none; } .canvas-modal-backdrop .palette-item.critic { border-left: 2px solid var(--canvas-critic); } .canvas-modal-backdrop .palette-item .pi-icon { width: 30px; height: 30px; border-radius: 7px; background: var(--canvas-surface-3); display: grid; place-items: center; color: var(--canvas-accent); flex-shrink: 0; } .canvas-modal-backdrop .palette-item.critic .pi-icon { color: var(--canvas-critic); } .canvas-modal-backdrop .palette-item .pi-content { flex: 1; min-width: 0; } .canvas-modal-backdrop .palette-item .pi-title { font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 6px; color: var(--canvas-text); } .canvas-modal-backdrop .palette-item .pi-desc { font-size: 11.5px; color: var(--canvas-text-3); margin-top: 2px; line-height: 1.4; } .canvas-modal-backdrop .palette-item .pi-added { font-size: 10px; font-family: var(--canvas-mono); color: var(--canvas-accent); background: var(--canvas-accent-glow); padding: 2px 6px; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.08em; } /* Bibliography widget */ .canvas-page-with-sidebar .bib-list { display: flex; flex-direction: column; gap: 6px; max-height: 320px; overflow-y: auto; } .canvas-page-with-sidebar .bib-cite { color: var(--canvas-text); font-weight: 500; line-height: 1.4; } .canvas-page-with-sidebar .bib-meta { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-3); display: flex; gap: 8px; } .canvas-page-with-sidebar .bib-meta .key { color: var(--canvas-accent); } .canvas-page-with-sidebar .format-tabs { display: flex; gap: 2px; background: var(--canvas-surface-2); padding: 2px; border-radius: 6px; } .canvas-page-with-sidebar .format-tab { font-family: var(--canvas-mono); font-size: 10px; padding: 3px 7px; border-radius: 4px; color: var(--canvas-text-3); letter-spacing: 0.05em; cursor: pointer; } .canvas-page-with-sidebar .format-tab.active { background: var(--canvas-surface-3); color: var(--canvas-text); } /* Kanban widget */ .canvas-page-with-sidebar .kanban { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; flex: 1; min-height: 0; } .canvas-page-with-sidebar .kan-col { background: var(--canvas-bg-2); border-radius: 7px; padding: 8px; display: flex; flex-direction: column; gap: 6px; min-width: 0; border: 1px solid var(--canvas-border); } .canvas-page-with-sidebar[data-canvas-theme="light"] .kan-col { background: #f3f5f9; } .canvas-page-with-sidebar .kan-col.drag-target { background: var(--canvas-accent-glow); border-color: var(--canvas-accent); } .canvas-page-with-sidebar .kan-col-head { font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-3); display: flex; justify-content: space-between; font-weight: 600; padding: 0 2px 4px; } .canvas-page-with-sidebar .kan-col-head .count { font-family: var(--canvas-mono); } .canvas-page-with-sidebar .kan-card { background: var(--canvas-surface-2); border: 1px solid var(--canvas-border-2); border-radius: 6px; padding: 7px 9px; font-size: 12px; cursor: grab; line-height: 1.35; position: relative; color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .kan-card { background: #fff; box-shadow: 0 1px 2px rgba(20,30,50,0.04); } .canvas-page-with-sidebar .kan-card:active { cursor: grabbing; } .canvas-page-with-sidebar .kan-card:hover { background: var(--canvas-surface-3); } .canvas-page-with-sidebar .kan-card.dragging { opacity: 0.4; } .canvas-page-with-sidebar .kan-card .priority-bar { position: absolute; left: 0; top: 6px; bottom: 6px; width: 2px; border-radius: 2px; } .canvas-page-with-sidebar .kan-card.high .priority-bar { background: var(--canvas-danger); } .canvas-page-with-sidebar .kan-card.med .priority-bar { background: var(--canvas-warn); } .canvas-page-with-sidebar .kan-card.low .priority-bar { background: var(--canvas-text-4); } .canvas-page-with-sidebar .kan-card .kan-title { padding-left: 6px; } .canvas-page-with-sidebar .kan-card .kan-meta { font-family: var(--canvas-mono); font-size: 9.5px; color: var(--canvas-text-3); margin-top: 4px; padding-left: 6px; display: flex; gap: 6px; } .canvas-page-with-sidebar .add-tiny { font-size: 11px; color: var(--canvas-text-3); padding: 4px 6px; border-radius: 4px; text-align: left; border: 1px dashed transparent; cursor: pointer; background: none; font-family: inherit; } .canvas-page-with-sidebar .add-tiny:hover { color: var(--canvas-accent); border-color: var(--canvas-border); background: var(--canvas-surface); } /* Pomodoro */ .canvas-page-with-sidebar .pomo { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 6px 0; flex: 1; justify-content: center; } .canvas-page-with-sidebar .pomo-ring { width: 130px; height: 130px; position: relative; } .canvas-page-with-sidebar .pomo-ring svg { transform: rotate(-90deg); } .canvas-page-with-sidebar .pomo-ring .track { stroke: var(--canvas-surface-3); } .canvas-page-with-sidebar[data-canvas-theme="light"] .pomo-ring .track { stroke: #e7ebf2; } .canvas-page-with-sidebar .pomo-ring .fill { stroke: var(--canvas-accent); stroke-linecap: round; filter: drop-shadow(0 0 6px var(--canvas-accent-glow)); transition: stroke-dashoffset .4s ease; } .canvas-page-with-sidebar .pomo-ring.break .fill { stroke: var(--canvas-ok); filter: drop-shadow(0 0 6px rgba(16,185,129,0.4)); } .canvas-page-with-sidebar .pomo-time { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; font-family: var(--canvas-mono); } .canvas-page-with-sidebar .pomo-time .t { font-size: 26px; font-weight: 600; color: var(--canvas-text); letter-spacing: -0.02em; } .canvas-page-with-sidebar .pomo-time .l { font-size: 10px; color: var(--canvas-text-3); text-transform: uppercase; letter-spacing: 0.08em; margin-top: 2px; } .canvas-page-with-sidebar .pomo-controls { display: flex; gap: 6px; } .canvas-page-with-sidebar .pomo-stats { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-3); display: flex; gap: 14px; } .canvas-page-with-sidebar .pomo-stats b { color: var(--canvas-accent); font-weight: 500; } /* Writing tracker */ .canvas-page-with-sidebar .write-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .canvas-page-with-sidebar .stat { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 7px; padding: 9px 11px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .stat { background: #fff; } .canvas-page-with-sidebar .stat .stat-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-3); font-weight: 600; } .canvas-page-with-sidebar .stat .stat-value { font-family: var(--canvas-mono); font-size: 18px; font-weight: 600; color: var(--canvas-text); margin-top: 3px; letter-spacing: -0.02em; } .canvas-page-with-sidebar .stat .stat-sub { font-size: 10.5px; color: var(--canvas-text-3); margin-top: 2px; } .canvas-page-with-sidebar .stat .stat-value.accent { color: var(--canvas-accent); } .canvas-page-with-sidebar .spark { width: 100%; height: 56px; } .canvas-page-with-sidebar .spark .area { fill: var(--canvas-accent-glow); } .canvas-page-with-sidebar .spark .line { stroke: var(--canvas-accent); fill: none; stroke-width: 1.5; } .canvas-page-with-sidebar .spark .dot-today { fill: var(--canvas-accent); } .canvas-page-with-sidebar .spark .grid { stroke: var(--canvas-border); stroke-dasharray: 2 3; } .canvas-page-with-sidebar .progress { height: 6px; background: var(--canvas-surface-2); border-radius: 3px; overflow: hidden; } .canvas-page-with-sidebar[data-canvas-theme="light"] .progress { background: #e7ebf2; } .canvas-page-with-sidebar .progress > i { display: block; height: 100%; background: var(--canvas-accent); border-radius: 3px; transition: width .3s; } /* Deadlines */ .canvas-page-with-sidebar .dl-list { display: flex; flex-direction: column; gap: 6px; } .canvas-page-with-sidebar .dl-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 7px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .dl-row { background: #fff; } .canvas-page-with-sidebar .dl-row:hover { border-color: var(--canvas-border-2); } .canvas-page-with-sidebar .dl-day { font-family: var(--canvas-mono); font-size: 11px; font-weight: 600; width: 56px; text-align: center; padding: 6px 0; border-radius: 5px; background: var(--canvas-surface-2); flex-shrink: 0; line-height: 1.1; color: var(--canvas-text-2); } .canvas-page-with-sidebar .dl-day.urgent { background: rgba(220,38,38,0.15); color: var(--canvas-danger); } .canvas-page-with-sidebar .dl-day.warn { background: rgba(245,158,11,0.15); color: var(--canvas-warn); } .canvas-page-with-sidebar .dl-day .num { font-size: 16px; display: block; } .canvas-page-with-sidebar .dl-day .lbl { font-size: 9px; text-transform: uppercase; letter-spacing: 0.06em; } .canvas-page-with-sidebar .dl-info { flex: 1; min-width: 0; } .canvas-page-with-sidebar .dl-title { font-size: 12.5px; font-weight: 500; color: var(--canvas-text); } .canvas-page-with-sidebar .dl-sub { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-3); margin-top: 2px; } /* Budget */ .canvas-page-with-sidebar .budget-bar { height: 8px; background: var(--canvas-surface-2); border-radius: 4px; overflow: hidden; display: flex; margin: 6px 0 12px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .budget-bar { background: #e7ebf2; } .canvas-page-with-sidebar .budget-bar > i { display: block; height: 100%; } .canvas-page-with-sidebar .budget-list { display: flex; flex-direction: column; gap: 6px; } .canvas-page-with-sidebar .budget-row { display: grid; grid-template-columns: 12px 1fr auto auto; gap: 10px; align-items: center; font-size: 12px; padding: 5px 0; color: var(--canvas-text); } .canvas-page-with-sidebar .budget-row .swatch { width: 8px; height: 8px; border-radius: 2px; } .canvas-page-with-sidebar .budget-row .amt { font-family: var(--canvas-mono); color: var(--canvas-text-2); } .canvas-page-with-sidebar .budget-row .pct { font-family: var(--canvas-mono); color: var(--canvas-text-3); font-size: 10.5px; width: 36px; text-align: right; } /* Reviewer 2 widget */ .canvas-page-with-sidebar .critic-prompt { font-size: 12px; color: var(--canvas-text-2); background: var(--canvas-bg-2); border: 1px dashed var(--canvas-critic-glow); border-radius: 7px; padding: 10px 12px; font-style: italic; line-height: 1.5; } .canvas-page-with-sidebar .critic-meter { display: flex; align-items: center; gap: 8px; font-family: var(--canvas-mono); font-size: 10.5px; color: var(--canvas-text-3); } .canvas-page-with-sidebar .critic-meter .bar { flex: 1; height: 4px; background: var(--canvas-surface-2); border-radius: 2px; position: relative; overflow: hidden; } .canvas-page-with-sidebar[data-canvas-theme="light"] .critic-meter .bar { background: #e7ebf2; } .canvas-page-with-sidebar .critic-meter .bar > i { position: absolute; left: 0; top: 0; bottom: 0; background: linear-gradient(90deg, var(--canvas-ok), var(--canvas-warn) 50%, var(--canvas-critic)); border-radius: 2px; } .canvas-page-with-sidebar .review, .canvas-modal-backdrop .review { background: var(--canvas-bg-2); border-left: 3px solid var(--canvas-critic); padding: 10px 12px; border-radius: 0 6px 6px 0; font-size: 12.5px; line-height: 1.55; color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .review, body[data-canvas-theme="light"] .canvas-modal-backdrop .review { background: #fff; } .canvas-page-with-sidebar .review .review-tag, .canvas-modal-backdrop .review .review-tag { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-critic); text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; margin-bottom: 4px; display: block; } /* Devil's Advocate */ .canvas-page-with-sidebar .devil-list, .canvas-modal-backdrop .devil-list { display: flex; flex-direction: column; gap: 6px; } .canvas-page-with-sidebar .devil-item, .canvas-modal-backdrop .devil-item { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 7px; padding: 9px 11px; font-size: 12px; position: relative; padding-left: 30px; color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .devil-item, body[data-canvas-theme="light"] .canvas-modal-backdrop .devil-item { background: #fff; } .canvas-page-with-sidebar .devil-item::before, .canvas-modal-backdrop .devil-item::before { content: '◆'; position: absolute; left: 11px; top: 9px; color: var(--canvas-critic); font-size: 10px; } .canvas-page-with-sidebar .devil-item .lbl, .canvas-modal-backdrop .devil-item .lbl { font-family: var(--canvas-mono); font-size: 9.5px; color: var(--canvas-critic); text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; margin-bottom: 3px; } /* Scope realism */ .canvas-page-with-sidebar .realism { display: flex; flex-direction: column; gap: 10px; } .canvas-page-with-sidebar .realism-verdict { background: var(--canvas-bg-2); border: 1px solid var(--canvas-critic-glow); border-radius: 9px; padding: 12px 14px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .realism-verdict { background: #fff; } .canvas-page-with-sidebar .verdict-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .canvas-page-with-sidebar .verdict-score { font-family: var(--canvas-mono); font-size: 22px; font-weight: 600; color: var(--canvas-critic); letter-spacing: -0.02em; } .canvas-page-with-sidebar .verdict-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-2); font-weight: 600; } .canvas-page-with-sidebar .realism-row, .canvas-modal-backdrop .realism-row { display: flex; align-items: center; gap: 10px; font-size: 12px; padding: 5px 0; } .canvas-page-with-sidebar .realism-row .label-cell, .canvas-modal-backdrop .realism-row .label-cell { width: 100px; color: var(--canvas-text-2); font-size: 11.5px; } .canvas-page-with-sidebar .realism-row .gauge, .canvas-modal-backdrop .realism-row .gauge { flex: 1; height: 4px; background: var(--canvas-surface-2); border-radius: 2px; overflow: hidden; } .canvas-page-with-sidebar[data-canvas-theme="light"] .gauge, body[data-canvas-theme="light"] .canvas-modal-backdrop .gauge, body[data-canvas-theme="light"] .canvas-modal-backdrop .critic-meter .bar { background: #e7ebf2; } .canvas-page-with-sidebar .realism-row .gauge i, .canvas-modal-backdrop .realism-row .gauge i { display: block; height: 100%; background: var(--canvas-critic); border-radius: 2px; } .canvas-page-with-sidebar .realism-row .val, .canvas-modal-backdrop .realism-row .val { font-family: var(--canvas-mono); font-size: 10.5px; color: var(--canvas-text-3); width: 30px; text-align: right; } /* Notes / generic row */ .canvas-page-with-sidebar .note-list { display: flex; flex-direction: column; gap: 6px; max-height: 280px; overflow-y: auto; } .canvas-page-with-sidebar .note-row { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 7px; padding: 8px 10px; display: flex; flex-direction: column; gap: 4px; position: relative; } .canvas-page-with-sidebar[data-canvas-theme="light"] .note-row { background: #fff; } .canvas-page-with-sidebar .note-row:hover { border-color: var(--canvas-border-2); } .canvas-page-with-sidebar .note-row .note-text { font-size: 12.5px; color: var(--canvas-text); line-height: 1.45; word-break: break-word; } .canvas-page-with-sidebar .note-row .note-meta { font-family: var(--canvas-mono); font-size: 9.5px; color: var(--canvas-text-3); display: flex; gap: 8px; } .canvas-page-with-sidebar .note-row .row-actions, .canvas-page-with-sidebar .dl-row .row-actions { position: absolute; top: 6px; right: 6px; display: flex; gap: 1px; opacity: 0; transition: opacity .12s; } .canvas-page-with-sidebar .note-row:hover .row-actions, .canvas-page-with-sidebar .dl-row:hover .row-actions { opacity: 1; } .canvas-page-with-sidebar .row-actions .icon-btn { width: 22px; height: 22px; } .canvas-page-with-sidebar .row-actions .icon-btn svg { width: 12px; height: 12px; } .canvas-page-with-sidebar .tag-pill { display: inline-block; font-family: var(--canvas-mono); font-size: 9.5px; padding: 1px 6px; border-radius: 3px; background: var(--canvas-accent-glow); color: var(--canvas-accent); text-transform: uppercase; letter-spacing: 0.06em; } /* ----- Deliverables view ----- */ /* Paper / document mode — three-column layout that collapses on narrow screens */ .canvas-page-with-sidebar .deliverable-grid { display: grid; grid-template-columns: 180px minmax(0, 1fr) 240px; gap: 16px; align-items: start; } .canvas-page-with-sidebar .deliverable-nav { display: flex; flex-direction: column; gap: 4px; position: sticky; top: 0; } /* Slides mode — thumbs on left, big canvas in middle, panel on right */ .canvas-page-with-sidebar .deliverable-slides-grid { display: grid; grid-template-columns: 160px minmax(0, 1fr) 240px; gap: 16px; align-items: start; } @media (max-width: 1280px) { .canvas-page-with-sidebar .deliverable-slides-grid { grid-template-columns: 140px minmax(0, 1fr); } .canvas-page-with-sidebar .deliverable-slides-grid > .deliverable-insertables { display: none; } } @media (max-width: 768px) { .canvas-page-with-sidebar .deliverable-slides-grid { grid-template-columns: 1fr; } .canvas-page-with-sidebar .slide-thumbs { display: none; } } /* Slide thumbnails column */ .canvas-page-with-sidebar .slide-thumbs { display: flex; flex-direction: column; gap: 8px; position: sticky; top: 0; max-height: calc(100vh - 100px); overflow-y: auto; padding-right: 4px; } .canvas-page-with-sidebar .slide-thumb { display: flex; align-items: stretch; gap: 6px; padding: 0; background: transparent; border: none; cursor: pointer; font-family: inherit; text-align: left; } .canvas-page-with-sidebar .slide-thumb-num { width: 18px; font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-3); padding-top: 4px; flex-shrink: 0; text-align: right; } .canvas-page-with-sidebar .slide-thumb-canvas { flex: 1; background: #fff; border: 1px solid var(--canvas-border-2); border-radius: 4px; aspect-ratio: 16 / 9; padding: 5px 6px; overflow: hidden; color: #111; display: flex; flex-direction: column; gap: 3px; transition: all .15s; } .canvas-page-with-sidebar .slide-thumb:hover .slide-thumb-canvas { border-color: var(--canvas-accent); transform: translateY(-1px); } .canvas-page-with-sidebar .slide-thumb.active .slide-thumb-canvas { border: 2px solid var(--canvas-accent); box-shadow: 0 0 0 2px var(--canvas-accent-glow); padding: 4px 5px; } .canvas-page-with-sidebar .slide-thumb.active .slide-thumb-num { color: var(--canvas-accent); font-weight: 700; } .canvas-page-with-sidebar .slide-thumb-title { font-size: 8px; font-weight: 700; color: #1a1a1a; letter-spacing: -0.01em; line-height: 1.1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .canvas-page-with-sidebar .slide-thumb-body { font-size: 6.5px; color: #555; line-height: 1.25; overflow: hidden; flex: 1; } /* Big slide canvas */ .canvas-page-with-sidebar .slide-canvas-wrap { background: var(--canvas-surface-2); border: 1px solid var(--canvas-border); border-radius: 10px; padding: 18px; display: flex; align-items: center; justify-content: center; } .canvas-page-with-sidebar .slide-canvas { position: relative; width: 100%; max-width: 720px; aspect-ratio: 16 / 9; background: #fff; border-radius: 6px; box-shadow: 0 12px 32px rgba(0,0,0,0.18), 0 4px 10px rgba(0,0,0,0.10); padding: 36px 44px; display: flex; flex-direction: column; gap: 16px; color: #111; overflow: hidden; } .canvas-page-with-sidebar .slide-canvas::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--canvas-accent), var(--canvas-critic)); } .canvas-page-with-sidebar .slide-canvas-title { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; color: #0f172a; line-height: 1.15; } .canvas-page-with-sidebar .slide-canvas-body { flex: 1; font-size: 15px; color: #1f2937; line-height: 1.55; overflow: hidden; } .canvas-page-with-sidebar .slide-canvas-body ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; } .canvas-page-with-sidebar .slide-canvas-body ul li { position: relative; padding-left: 22px; } .canvas-page-with-sidebar .slide-canvas-body ul li::before { content: ''; position: absolute; left: 0; top: 9px; width: 7px; height: 7px; border-radius: 50%; background: var(--canvas-accent); } .canvas-page-with-sidebar .slide-paragraph { font-size: 17px; line-height: 1.6; } .canvas-page-with-sidebar .slide-placeholder { color: #9ca3af; font-style: italic; font-size: 14px; } .canvas-page-with-sidebar .slide-canvas-footer { position: absolute; bottom: 14px; right: 18px; font-family: var(--canvas-mono); font-size: 10px; color: #9ca3af; } /* Section-check pill (used in both modes) */ .canvas-page-with-sidebar .check-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; padding: 3px 9px; border-radius: 999px; background: var(--canvas-surface-2); color: var(--canvas-text-3); font-family: var(--canvas-sans); } .canvas-page-with-sidebar .check-pill[data-passed="true"] { background: rgba(16, 185, 129, 0.15); color: #10B981; } /* Document-page preview (Google Docs feel) */ .canvas-page-with-sidebar .doc-page { background: #ffffff; color: #1a1a1a; padding: 56px 72px; border-radius: 4px; box-shadow: 0 4px 14px rgba(0,0,0,0.10), 0 1px 4px rgba(0,0,0,0.06); font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; max-width: 800px; margin: 0 auto; width: 100%; } .canvas-page-with-sidebar .doc-title { font-size: 28px; font-weight: 700; margin: 0 0 24px; letter-spacing: -0.02em; color: #0f172a; } .canvas-page-with-sidebar .doc-h2 { font-size: 18px; font-weight: 700; margin: 24px 0 8px; color: #0f172a; } .canvas-page-with-sidebar .doc-body { font-size: 14px; line-height: 1.7; color: #1f2937; } .canvas-page-with-sidebar .doc-body p { margin: 0 0 12px; } .canvas-page-with-sidebar .doc-body strong { color: #0f172a; } .canvas-page-with-sidebar .doc-section { margin-bottom: 8px; } /* Paper-page preview (Overleaf feel — serif, two-column body) */ .canvas-page-with-sidebar .paper-page { background: #fdfbf7; color: #1a1a1a; padding: 64px 72px; border-radius: 4px; box-shadow: 0 4px 14px rgba(0,0,0,0.10), 0 1px 4px rgba(0,0,0,0.06); font-family: 'Georgia', 'Times New Roman', serif; max-width: 820px; margin: 0 auto; width: 100%; } .canvas-page-with-sidebar .paper-page-head { text-align: center; border-bottom: 1px solid #d1d5db; padding-bottom: 16px; margin-bottom: 22px; } .canvas-page-with-sidebar .paper-title { font-size: 22px; font-weight: 700; letter-spacing: -0.01em; color: #0f172a; } .canvas-page-with-sidebar .paper-byline { font-size: 12px; color: #6b7280; font-style: italic; margin-top: 6px; } .canvas-page-with-sidebar .paper-h2 { font-size: 14px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: #0f172a; margin: 22px 0 8px; } .canvas-page-with-sidebar .paper-body { font-size: 13px; line-height: 1.65; color: #1f2937; text-align: justify; } .canvas-page-with-sidebar .paper-body p { margin: 0 0 10px; text-indent: 1.5em; } .canvas-page-with-sidebar .paper-body p:first-child { text-indent: 0; } .canvas-page-with-sidebar .paper-empty { color: #9ca3af; font-style: italic; font-size: 12px; } .canvas-page-with-sidebar .paper-section { margin-bottom: 4px; } /* ----- Canvas-mode app sidebar menu (Insights / Workspace / Deliverables) ----- */ /* These rules live in the *app* sidebar (not the canvas-page-with-sidebar scope) because they apply to .sidebar from components.css when the user is on canvas. */ .canvas-sidebar-menu { flex: 1; overflow-y: auto; padding: 8px 8px 16px; display: flex; flex-direction: column; gap: 4px; } .canvas-sidebar-menu .no-sessions { padding: 18px 12px; font-size: 12px; color: var(--text-tertiary, #9CA3AF); text-align: center; } /* --- Workspace: widget groups --- */ .canvas-sidebar-menu .csm-group { display: flex; flex-direction: column; gap: 1px; margin-bottom: 4px; } .canvas-sidebar-menu .csm-group-head { display: flex; align-items: center; gap: 6px; padding: 6px 8px; background: transparent; border: none; border-radius: 5px; font-family: inherit; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; font-weight: 600; color: var(--text-tertiary, #9CA3AF); cursor: pointer; } .canvas-sidebar-menu .csm-group-head:hover { background: var(--bg-secondary, #f3f4f6); color: var(--text-secondary, #6b7280); } .dark .canvas-sidebar-menu .csm-group-head:hover { background: var(--bg-secondary-dark, #374151); } .canvas-sidebar-menu .csm-group-name { flex: 1; text-align: left; } .canvas-sidebar-menu .csm-group-count { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-tertiary, #9CA3AF); } .canvas-sidebar-menu .csm-group-body { display: flex; flex-direction: column; gap: 1px; padding: 2px 0 6px 8px; } /* --- Deliverables: project blocks --- */ .canvas-sidebar-menu .csm-project { display: flex; flex-direction: column; gap: 1px; border-radius: 6px; margin-bottom: 4px; } .canvas-sidebar-menu .csm-project.active { background: rgba(99, 102, 241, 0.06); } .dark .canvas-sidebar-menu .csm-project.active { background: rgba(129, 140, 248, 0.10); } .canvas-sidebar-menu .csm-project-head { display: flex; align-items: center; gap: 7px; padding: 8px 10px; background: transparent; border: none; border-radius: 5px; font-family: inherit; font-size: 13px; font-weight: 500; color: var(--text-primary, #111827); cursor: pointer; text-align: left; } .canvas-sidebar-menu .csm-project-head:hover { background: var(--bg-secondary, #f3f4f6); } .dark .canvas-sidebar-menu .csm-project-head { color: var(--text-primary-dark, #f9fafb); } .dark .canvas-sidebar-menu .csm-project-head:hover { background: var(--bg-secondary-dark, #374151); } .canvas-sidebar-menu .csm-project.active .csm-project-name { color: var(--accent-primary, #6366F1); font-weight: 600; } .canvas-sidebar-menu .csm-project-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .canvas-sidebar-menu .csm-versions { display: inline-flex; align-items: center; gap: 3px; font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--text-tertiary, #9CA3AF); padding: 1px 5px; border-radius: 3px; background: var(--bg-secondary, #f3f4f6); } .dark .canvas-sidebar-menu .csm-versions { background: var(--bg-secondary-dark, #374151); } .canvas-sidebar-menu .csm-project-body { padding: 2px 0 8px 22px; display: flex; flex-direction: column; gap: 1px; } /* --- Shared row (used in groups and project bodies) --- */ .canvas-sidebar-menu .csm-row { display: flex; align-items: center; gap: 8px; padding: 5px 10px 5px 6px; background: transparent; border: none; border-radius: 4px; font-family: inherit; font-size: 12.5px; color: var(--text-secondary, #6b7280); text-align: left; cursor: pointer; } .canvas-sidebar-menu .csm-row:hover { background: var(--bg-secondary, #f3f4f6); color: var(--text-primary, #111827); } .dark .canvas-sidebar-menu .csm-row { color: var(--text-secondary-dark, #9ca3af); } .dark .canvas-sidebar-menu .csm-row:hover { background: var(--bg-secondary-dark, #374151); color: var(--text-primary-dark, #f9fafb); } .canvas-sidebar-menu .csm-row.critic { color: #8B5CF6; } .dark .canvas-sidebar-menu .csm-row.critic { color: #A78BFA; } .canvas-sidebar-menu .csm-row-bullet { width: 4px; height: 4px; border-radius: 50%; background: currentColor; opacity: 0.45; flex-shrink: 0; margin-left: 4px; } .canvas-sidebar-menu .csm-row-icon { font-size: 11px; opacity: 0.85; } .canvas-sidebar-menu .csm-row-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .canvas-sidebar-menu .csm-row-meta { font-family: 'JetBrains Mono', monospace; font-size: 9.5px; color: var(--text-tertiary, #9CA3AF); } .canvas-sidebar-menu .csm-row-foot { display: flex; align-items: center; gap: 6px; padding: 3px 8px; font-family: 'JetBrains Mono', monospace; font-size: 9.5px; color: var(--text-tertiary, #9CA3AF); cursor: default; } .canvas-sidebar-menu .csm-row-foot:hover { background: transparent; color: var(--text-tertiary, #9CA3AF); } /* Chevron rotates open/closed */ .canvas-sidebar-menu .csm-chevron { transition: transform 0.15s ease; color: var(--text-tertiary, #9CA3AF); } .canvas-sidebar-menu .csm-chevron.open { transform: rotate(90deg); } /* ----- Deliverable project tabs (Overleaf-style multi-draft) ----- */ .canvas-page-with-sidebar .deliverable-projects { display: flex; gap: 4px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; padding-bottom: 12px; border-bottom: 1px solid var(--canvas-border); } .canvas-page-with-sidebar .deliverable-project-tab { display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 6px; background: transparent; border: 1px solid transparent; color: var(--canvas-text-2); font-family: inherit; font-size: 12.5px; cursor: pointer; transition: background .12s, color .12s, border-color .12s; } .canvas-page-with-sidebar .deliverable-project-tab:hover { background: var(--canvas-surface-2); color: var(--canvas-text); } .canvas-page-with-sidebar .deliverable-project-tab.active { background: var(--canvas-surface-2); border-color: var(--canvas-border); color: var(--canvas-text); font-weight: 600; } .canvas-page-with-sidebar .deliverable-new-project { position: relative; } .canvas-page-with-sidebar .deliverable-new-project summary { list-style: none; cursor: pointer; color: var(--canvas-text-3); } .canvas-page-with-sidebar .deliverable-new-project summary::-webkit-details-marker { display: none; } .canvas-page-with-sidebar .deliverable-new-project[open] summary { background: var(--canvas-surface-2); color: var(--canvas-text); } /* Auto-save indicator next to the project title */ .canvas-page-with-sidebar .save-indicator { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--canvas-text-3); font-family: var(--canvas-mono); white-space: nowrap; padding: 4px 8px; border-radius: 999px; background: var(--canvas-surface-2); transition: background .2s, color .2s; } .canvas-page-with-sidebar .save-indicator-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--canvas-ok); box-shadow: 0 0 6px rgba(16, 185, 129, 0.4); transition: background .2s; } .canvas-page-with-sidebar .save-indicator.saving { background: var(--canvas-accent-glow); color: var(--canvas-accent); } .canvas-page-with-sidebar .save-indicator.saving .save-indicator-dot { background: var(--canvas-accent); animation: save-pulse 0.6s ease infinite; } @keyframes save-pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.4; transform: scale(0.85); } } /* Editable project title — looks like the page-title but is an input */ .canvas-page-with-sidebar .page-title-editable { background: transparent; border: none; outline: none; width: 100%; font-family: inherit; font-size: 28px; font-weight: 700; letter-spacing: -0.02em; margin: 0; padding: 2px 0; color: var(--canvas-text); } .canvas-page-with-sidebar .page-title-editable:focus { background: rgba(255, 255, 255, 0.03); border-radius: 4px; padding: 2px 6px; margin: 0 -6px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .page-title-editable:focus { background: rgba(0, 0, 0, 0.025); } /* Version history dropdown panel */ .canvas-page-with-sidebar .deliverable-history { background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 8px; margin-bottom: 16px; padding: 6px; max-height: 320px; overflow-y: auto; } .canvas-page-with-sidebar .deliverable-history-head { display: flex; align-items: center; justify-content: space-between; padding: 4px 8px 8px; font-size: 11px; font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-3); border-bottom: 1px solid var(--canvas-border); margin-bottom: 4px; } .canvas-page-with-sidebar .deliverable-history-row { display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px 8px; background: transparent; border: none; border-radius: 4px; color: var(--canvas-text-2); font-family: inherit; font-size: 12px; cursor: pointer; } .canvas-page-with-sidebar .deliverable-history-row:hover { background: var(--canvas-surface-2); color: var(--canvas-text); } /* Slash menu (block-insert popover) */ .canvas-page-with-sidebar .slash-menu { position: absolute; bottom: calc(100% + 4px); left: 0; z-index: 30; background: var(--canvas-surface); border: 1px solid var(--canvas-border-2); border-radius: 8px; box-shadow: var(--canvas-shadow-lg); padding: 4px; min-width: 240px; max-height: 280px; overflow-y: auto; display: flex; flex-direction: column; } .canvas-page-with-sidebar .slash-menu-head { font-size: 10px; font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-4); padding: 6px 8px 4px; } .canvas-page-with-sidebar .slash-menu button { display: flex; align-items: center; gap: 8px; background: transparent; border: none; padding: 6px 8px; border-radius: 4px; font-family: inherit; font-size: 12.5px; color: var(--canvas-text); text-align: left; cursor: pointer; } .canvas-page-with-sidebar .slash-menu button:hover, .canvas-page-with-sidebar .slash-menu button.active { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .slash-menu-kind { font-family: var(--canvas-mono); font-size: 9.5px; color: var(--canvas-text-4); text-transform: uppercase; letter-spacing: 0.06em; } /* Poster mode — 4-quadrant grid, banners on top and bottom */ .canvas-page-with-sidebar .poster-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 10px; padding: 18px; } .canvas-page-with-sidebar .poster-banner { grid-column: 1 / -1; } .canvas-page-with-sidebar .poster-panel { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 8px; padding: 14px; display: flex; flex-direction: column; gap: 8px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .poster-panel { background: #ffffff; border-color: rgba(15, 15, 15, 0.08); } .canvas-page-with-sidebar .poster-panel-head { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--canvas-accent); border-bottom: 2px solid var(--canvas-accent-glow); padding-bottom: 6px; } .canvas-page-with-sidebar .poster-panel textarea { flex: 1; min-height: 120px; background: transparent; border: none; outline: none; resize: none; font-family: inherit; font-size: 13px; line-height: 1.5; color: var(--canvas-text); padding: 0; } @media (max-width: 768px) { .canvas-page-with-sidebar .poster-grid { grid-template-columns: 1fr; } } /* ----- Rich editor block (click-to-edit + floating toolbar + LaTeX math) ----- */ .canvas-page-with-sidebar .rich-block { position: relative; margin-top: 4px; } .canvas-page-with-sidebar .rich-toolbar { position: absolute; bottom: calc(100% + 6px); left: 0; display: flex; flex-wrap: wrap; gap: 1px; padding: 4px; background: var(--canvas-surface); border: 1px solid var(--canvas-border-2); border-radius: 8px; box-shadow: var(--canvas-shadow-lg); z-index: 20; animation: canvas-view-in 140ms var(--canvas-ease); } .canvas-page-with-sidebar .rich-toolbar button { background: transparent; border: none; width: 30px; height: 28px; border-radius: 4px; display: grid; place-items: center; color: var(--canvas-text-2); font-family: inherit; font-size: 13px; cursor: pointer; transition: background .12s, color .12s; } .canvas-page-with-sidebar .rich-toolbar button:hover { background: var(--canvas-surface-2); color: var(--canvas-text); } /* Rendered block (idle state — looks like real document text) */ .canvas-page-with-sidebar .rich-rendered { cursor: text; padding: 4px 0; border-radius: 4px; transition: background .12s; outline: none; } .canvas-page-with-sidebar .rich-rendered:hover { background: rgba(255, 255, 255, 0.02); } .canvas-page-with-sidebar[data-canvas-theme="light"] .rich-rendered:hover { background: rgba(0, 0, 0, 0.02); } .canvas-page-with-sidebar .rich-rendered:focus-visible { background: rgba(0, 0, 0, 0.025); box-shadow: 0 0 0 2px var(--canvas-accent-glow); } .canvas-page-with-sidebar .rich-placeholder { color: var(--canvas-text-4); font-style: italic; } /* Inside the rendered block: typography matching the page */ .canvas-page-with-sidebar .rich-rendered > * { margin: 0; } .canvas-page-with-sidebar .rich-rendered > * + * { margin-top: 12px; } .canvas-page-with-sidebar .rich-rendered p { font-size: 16px; line-height: 1.65; color: var(--canvas-text); } .canvas-page-with-sidebar .rich-rendered.serif p { font-family: 'Georgia', 'Times New Roman', serif; font-size: 14.5px; line-height: 1.7; text-align: justify; } .canvas-page-with-sidebar .rich-rendered h1, .canvas-page-with-sidebar .rich-rendered h2, .canvas-page-with-sidebar .rich-rendered h3, .canvas-page-with-sidebar .rich-rendered h4 { font-weight: 700; letter-spacing: -0.01em; color: var(--canvas-text); margin-top: 16px; } .canvas-page-with-sidebar .rich-rendered h1 { font-size: 24px; } .canvas-page-with-sidebar .rich-rendered h2 { font-size: 19px; } .canvas-page-with-sidebar .rich-rendered h3 { font-size: 16px; } .canvas-page-with-sidebar .rich-rendered ul, .canvas-page-with-sidebar .rich-rendered ol { padding-left: 22px; font-size: 16px; line-height: 1.65; color: var(--canvas-text); } .canvas-page-with-sidebar .rich-rendered.serif ul, .canvas-page-with-sidebar .rich-rendered.serif ol { font-family: 'Georgia', serif; font-size: 14.5px; } .canvas-page-with-sidebar .rich-rendered li { margin-bottom: 4px; } .canvas-page-with-sidebar .rich-rendered blockquote { border-left: 3px solid var(--canvas-accent); padding: 4px 14px; color: var(--canvas-text-2); margin-left: 0; background: rgba(99, 102, 241, 0.04); border-radius: 0 4px 4px 0; } .canvas-page-with-sidebar .rich-rendered code { background: var(--canvas-surface-2); padding: 1px 5px; border-radius: 3px; font-family: var(--canvas-mono); font-size: 13px; } .canvas-page-with-sidebar .rich-rendered pre { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 6px; padding: 12px; overflow-x: auto; font-family: var(--canvas-mono); font-size: 13px; } .canvas-page-with-sidebar .rich-rendered pre code { background: none; padding: 0; } .canvas-page-with-sidebar .rich-rendered a { color: var(--canvas-accent); text-decoration: underline; text-underline-offset: 2px; } .canvas-page-with-sidebar .rich-rendered strong { color: var(--canvas-text); font-weight: 700; } .canvas-page-with-sidebar .rich-rendered em { color: var(--canvas-text); } .canvas-page-with-sidebar .rich-rendered img { max-width: 100%; height: auto; border-radius: 4px; margin: 8px 0; display: block; } /* KaTeX math overrides — match document text size */ .canvas-page-with-sidebar .rich-rendered .katex { font-size: 1.05em; color: var(--canvas-text); } .canvas-page-with-sidebar .rich-rendered .katex-display { margin: 16px 0; padding: 8px 12px; background: var(--canvas-bg-2); border-radius: 6px; overflow-x: auto; } .canvas-page-with-sidebar[data-canvas-theme="light"] .rich-rendered .katex-display { background: rgba(0, 0, 0, 0.025); } /* ----- Real LaTeX editor (CodeMirror + LaTeX.js) ----- */ .canvas-page-with-sidebar .paper-editor-toggle { display: inline-flex; align-items: center; gap: 4px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 7px; padding: 3px; margin-bottom: 14px; } .canvas-page-with-sidebar .paper-editor-toggle-label { font-size: 10.5px; color: var(--canvas-text-4); font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.06em; padding: 0 8px 0 6px; } .canvas-page-with-sidebar .paper-editor-toggle button { background: transparent; border: none; padding: 4px 11px; border-radius: 5px; font-family: inherit; font-size: 12px; color: var(--canvas-text-3); cursor: pointer; transition: background .12s, color .12s; } .canvas-page-with-sidebar .paper-editor-toggle button:hover { color: var(--canvas-text); } .canvas-page-with-sidebar .paper-editor-toggle button.active { background: var(--canvas-surface-3); color: var(--canvas-text); box-shadow: inset 0 0 0 1px var(--canvas-border-2); } .canvas-page-with-sidebar .latex-editor { display: flex; flex-direction: column; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 8px; overflow: hidden; } .canvas-page-with-sidebar .latex-editor-toolbar { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--canvas-border); background: var(--canvas-bg-2); } .canvas-page-with-sidebar .latex-editor-mode { display: inline-flex; align-items: center; gap: 2px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); border-radius: 5px; padding: 2px; } .canvas-page-with-sidebar .latex-editor-mode button { background: transparent; border: none; padding: 3px 10px; border-radius: 3px; font-family: inherit; font-size: 11.5px; color: var(--canvas-text-3); display: inline-flex; align-items: center; gap: 5px; cursor: pointer; } .canvas-page-with-sidebar .latex-editor-mode button.active { background: var(--canvas-surface-3); color: var(--canvas-text); } .canvas-page-with-sidebar .latex-editor-mode button:hover { color: var(--canvas-text); } .canvas-page-with-sidebar .latex-editor-panes { display: grid; min-height: 520px; height: 70vh; max-height: 800px; } .canvas-page-with-sidebar .latex-editor-panes.mode-split { grid-template-columns: 1fr 1fr; } .canvas-page-with-sidebar .latex-editor-panes.mode-source, .canvas-page-with-sidebar .latex-editor-panes.mode-preview { grid-template-columns: 1fr; } .canvas-page-with-sidebar .latex-source-pane { border-right: 1px solid var(--canvas-border); overflow: hidden; } .canvas-page-with-sidebar .latex-source-pane .cm-editor { height: 100%; font-size: 13px; } .canvas-page-with-sidebar .latex-source-pane .cm-scroller { font-family: var(--canvas-mono); } .canvas-page-with-sidebar .latex-editor-panes.mode-preview .latex-source-pane, .canvas-page-with-sidebar .latex-editor-panes.mode-source ~ .latex-preview-pane { display: none; } .canvas-page-with-sidebar .latex-preview-pane { background: #fdfbf7; color: #1a1a1a; overflow-y: auto; padding: 40px 56px; font-family: 'Georgia', 'Times New Roman', serif; position: relative; } .canvas-page-with-sidebar[data-canvas-theme="light"] .latex-preview-pane { background: #fdfbf7; } .canvas-page-with-sidebar .latex-preview-body { max-width: 720px; margin: 0 auto; } .canvas-page-with-sidebar .latex-preview-body h1, .canvas-page-with-sidebar .latex-preview-body h2, .canvas-page-with-sidebar .latex-preview-body h3 { font-family: 'Georgia', serif; color: #0f172a; } .canvas-page-with-sidebar .latex-preview-body p { font-size: 14.5px; line-height: 1.65; color: #1f2937; text-align: justify; } .canvas-page-with-sidebar .latex-preview-error { display: flex; gap: 10px; padding: 10px 14px; margin: 0 auto 14px; max-width: 720px; background: rgba(220, 38, 38, 0.08); border-left: 3px solid var(--canvas-danger); border-radius: 4px; color: var(--canvas-danger); } @media (max-width: 900px) { .canvas-page-with-sidebar .latex-editor-panes.mode-split { grid-template-columns: 1fr; } .canvas-page-with-sidebar .latex-editor-panes.mode-split .latex-source-pane { border-right: none; border-bottom: 1px solid var(--canvas-border); } } /* ----- Notion-style single-surface deliverable editor ----- */ .canvas-page-with-sidebar .notion-deliverable-grid { display: grid; grid-template-columns: 200px minmax(0, 1fr) 240px; gap: 28px; align-items: start; } @media (max-width: 1280px) { .canvas-page-with-sidebar .notion-deliverable-grid { grid-template-columns: 200px minmax(0, 1fr); } .canvas-page-with-sidebar .notion-deliverable-grid > .deliverable-insertables { display: none; } } @media (max-width: 768px) { .canvas-page-with-sidebar .notion-deliverable-grid { grid-template-columns: 1fr; } .canvas-page-with-sidebar .notion-toc { display: none; } } /* Subtle TOC */ .canvas-page-with-sidebar .notion-toc { display: flex; flex-direction: column; gap: 1px; position: sticky; top: 0; padding: 4px 0; } .canvas-page-with-sidebar .notion-toc-label { font-size: 11px; color: var(--canvas-text-4); font-weight: 500; padding: 4px 6px 8px; letter-spacing: 0; text-transform: none; } .canvas-page-with-sidebar .notion-toc-link { display: flex; align-items: center; gap: 8px; background: transparent; border: none; padding: 5px 8px; border-radius: 4px; cursor: pointer; font-family: inherit; font-size: 13px; color: var(--canvas-text-2); text-align: left; transition: background .12s, color .12s; } .canvas-page-with-sidebar .notion-toc-link:hover { background: rgba(255, 255, 255, 0.04); color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-toc-link:hover { background: rgba(0, 0, 0, 0.04); } .canvas-page-with-sidebar .notion-toc-link.active { background: rgba(255, 255, 255, 0.06); color: var(--canvas-text); font-weight: 500; } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-toc-link.active { background: rgba(0, 0, 0, 0.05); } .canvas-page-with-sidebar .notion-toc-link-text { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .canvas-page-with-sidebar .notion-toc-link-count { font-family: var(--canvas-mono); font-size: 10px; color: var(--canvas-text-4); } /* The page itself */ .canvas-page-with-sidebar .notion-page-wrap { display: flex; justify-content: center; } .canvas-page-with-sidebar .notion-page { background: var(--canvas-surface); width: 100%; max-width: 760px; padding: 60px 80px; border-radius: 4px; color: var(--canvas-text); font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-page { background: #ffffff; border: 1px solid rgba(15, 15, 15, 0.06); box-shadow: 0 1px 3px rgba(0,0,0,0.04); } .canvas-page-with-sidebar .notion-page.serif { font-family: 'Georgia', 'Times New Roman', serif; } .canvas-page-with-sidebar .notion-page-wrap.paper .notion-page { background: #fdfbf7; } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-page-wrap.paper .notion-page { background: #fdfbf7; } .canvas-page-with-sidebar .notion-page-title { font-size: 40px; font-weight: 700; margin: 0 0 6px; letter-spacing: -0.025em; line-height: 1.15; color: var(--canvas-text); } .canvas-page-with-sidebar .notion-page-meta { font-size: 12.5px; color: var(--canvas-text-3); margin: 0 0 36px; } .canvas-page-with-sidebar .notion-block { margin: 24px 0; position: relative; } .canvas-page-with-sidebar .notion-h2 { font-size: 24px; font-weight: 700; letter-spacing: -0.015em; margin: 0 0 8px; color: var(--canvas-text); } .canvas-page-with-sidebar .notion-h2.serif { font-size: 16px; text-transform: uppercase; letter-spacing: 0.06em; font-weight: 700; } .canvas-page-with-sidebar .notion-hint { font-size: 13.5px; color: var(--canvas-text-4); font-style: italic; margin: 4px 0 6px; } /* The textarea, styled as Notion body text */ .canvas-page-with-sidebar .notion-text { display: block; width: 100%; background: transparent; border: none; outline: none; resize: none; padding: 4px 0; margin: 0; font-family: inherit; font-size: 16px; line-height: 1.6; color: var(--canvas-text); overflow: hidden; min-height: 28px; } .canvas-page-with-sidebar .notion-text.serif { font-family: 'Georgia', 'Times New Roman', serif; font-size: 14.5px; line-height: 1.7; } .canvas-page-with-sidebar .notion-text::placeholder { color: var(--canvas-text-4); } .canvas-page-with-sidebar .notion-text:focus { background: rgba(0, 0, 0, 0.02); border-radius: 3px; padding: 4px 6px; margin: 0 -6px; } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-text:focus { background: rgba(0, 0, 0, 0.025); } /* Inline meta (check pills + word count) sits below the block */ .canvas-page-with-sidebar .notion-block-meta { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; } /* Notion-style callout box for AI suggestions */ .canvas-page-with-sidebar .notion-callout { margin-top: 12px; background: rgba(99, 102, 241, 0.06); border-radius: 4px; padding: 14px 16px; display: flex; gap: 10px; font-size: 13.5px; line-height: 1.55; color: var(--canvas-text); } .canvas-page-with-sidebar[data-canvas-theme="light"] .notion-callout { background: rgba(99, 102, 241, 0.07); } .canvas-page-with-sidebar .notion-callout > svg { color: var(--canvas-accent); flex-shrink: 0; margin-top: 2px; } .canvas-page-with-sidebar .notion-callout-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--canvas-accent); font-weight: 600; margin-bottom: 2px; } /* Export dropdown — uses native
for zero-state-management */ .canvas-page-with-sidebar .canvas-export-menu summary { list-style: none; } .canvas-page-with-sidebar .canvas-export-menu summary::-webkit-details-marker { display: none; } .canvas-page-with-sidebar .canvas-export-menu[open] summary { filter: brightness(1.05); } .canvas-page-with-sidebar .canvas-export-menu-list { position: absolute; top: calc(100% + 4px); right: 0; background: var(--canvas-surface); border: 1px solid var(--canvas-border-2); border-radius: 6px; box-shadow: var(--canvas-shadow-lg); padding: 4px; min-width: 180px; display: flex; flex-direction: column; z-index: 30; } .canvas-page-with-sidebar .canvas-export-menu-list button { text-align: left; background: transparent; border: none; padding: 7px 10px; border-radius: 4px; font-size: 13px; cursor: pointer; color: var(--canvas-text); } .canvas-page-with-sidebar .canvas-export-menu-list button:hover { background: rgba(255, 255, 255, 0.05); } .canvas-page-with-sidebar[data-canvas-theme="light"] .canvas-export-menu-list button:hover { background: rgba(0, 0, 0, 0.05); } /* Old paper/doc preview styles can stay below for the slides bottom-info case */ /* Responsive breakpoints for paper/document mode */ @media (max-width: 1280px) { .canvas-page-with-sidebar .deliverable-grid { grid-template-columns: 160px minmax(0, 1fr); } .canvas-page-with-sidebar .deliverable-grid > .deliverable-insertables { display: none; } } @media (max-width: 768px) { .canvas-page-with-sidebar .deliverable-grid { grid-template-columns: 1fr; } .canvas-page-with-sidebar .doc-page, .canvas-page-with-sidebar .paper-page { padding: 32px 24px; } } /* Insertable row in the right rail of Deliverables */ .canvas-page-with-sidebar .canvas-insert-row { display: flex; align-items: center; gap: 8px; padding: 6px 8px; background: transparent; border: none; border-radius: 4px; text-align: left; cursor: pointer; font-family: inherit; color: var(--canvas-text); transition: background .12s; } .canvas-page-with-sidebar .canvas-insert-row:hover { background: rgba(255, 255, 255, 0.05); } .canvas-page-with-sidebar[data-canvas-theme="light"] .canvas-insert-row:hover { background: rgba(0, 0, 0, 0.04); } /* PhD Journey milestone rows */ .canvas-page-with-sidebar .phd-milestone { display: flex; align-items: flex-start; gap: 10px; padding: 8px 4px; border-radius: 6px; cursor: pointer; transition: background .12s; } .canvas-page-with-sidebar .phd-milestone:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .phd-milestone-check { flex-shrink: 0; width: 18px; height: 18px; border-radius: 4px; border: 1.5px solid var(--canvas-text-4); background: transparent; cursor: pointer; display: grid; place-items: center; margin-top: 2px; color: #fff; transition: background .12s, border-color .12s; } .canvas-page-with-sidebar .phd-milestone.milestone-in-progress .phd-milestone-check { background: #3B82F6; border-color: #3B82F6; } .canvas-page-with-sidebar .phd-milestone.milestone-completed .phd-milestone-check { background: #10B981; border-color: #10B981; } .canvas-page-with-sidebar .phd-milestone-body { flex: 1; min-width: 0; } .canvas-page-with-sidebar .phd-milestone-label { font-size: 13px; color: var(--canvas-text); font-weight: 500; line-height: 1.4; } .canvas-page-with-sidebar .phd-milestone.milestone-completed .phd-milestone-label { text-decoration: line-through; color: var(--canvas-text-3); } .canvas-page-with-sidebar .phd-milestone-hint { font-size: 11.5px; color: var(--canvas-text-4); font-style: italic; margin-top: 2px; } .canvas-page-with-sidebar .phd-milestone-note { font-size: 11.5px; color: var(--canvas-text-2); margin-top: 2px; } /* PhD Resources link rows */ .canvas-page-with-sidebar .phd-resource-link { display: flex; flex-direction: column; gap: 1px; padding: 6px 8px; background: transparent; border-radius: 5px; text-decoration: none; color: var(--canvas-text); transition: background .12s; } .canvas-page-with-sidebar .phd-resource-link:hover { background: var(--canvas-surface-2); } .canvas-page-with-sidebar .phd-resource-name { font-size: 12.5px; font-weight: 600; color: var(--canvas-accent); } .canvas-page-with-sidebar .phd-resource-desc { font-size: 11px; color: var(--canvas-text-3); } /* "Coming soon" stub widget — roadmap-preview card, not a dead end */ .canvas-page-with-sidebar .widget-stub { flex: 1; display: flex; flex-direction: column; gap: 6px; padding: 18px 4px 8px; } .canvas-page-with-sidebar .widget-stub-icon { width: 32px; height: 32px; border-radius: 7px; background: var(--canvas-surface-2); color: var(--canvas-text-3); display: grid; place-items: center; } .canvas-page-with-sidebar .widget-stub-tag { font-size: 9.5px; font-family: var(--canvas-mono); text-transform: uppercase; letter-spacing: 0.08em; color: var(--canvas-text-4); font-weight: 600; margin-top: 8px; } .canvas-page-with-sidebar .widget-stub-title { font-size: 14px; font-weight: 600; color: var(--canvas-text); } .canvas-page-with-sidebar .widget-stub-desc { font-size: 12px; color: var(--canvas-text-3); line-height: 1.5; } .canvas-page-with-sidebar .widget-stub-plan { margin: 8px 0 0; padding-left: 18px; font-size: 12px; color: var(--canvas-text-3); line-height: 1.6; } .canvas-page-with-sidebar .widget-stub-plan li::marker { color: var(--canvas-accent); } /* Shared empty-state block inside widgets (Notion-style: airy, single CTA) */ .canvas-page-with-sidebar .widget-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 28px 16px; text-align: center; color: var(--canvas-text-3); flex: 1; } .canvas-page-with-sidebar .widget-empty-icon { width: 36px; height: 36px; border-radius: 8px; background: var(--canvas-surface-2); color: var(--canvas-text-3); display: grid; place-items: center; margin-bottom: 4px; } .canvas-page-with-sidebar .widget-empty-title { font-size: 13.5px; font-weight: 600; color: var(--canvas-text-2); } .canvas-page-with-sidebar .widget-empty-hint { font-size: 12px; color: var(--canvas-text-3); max-width: 240px; line-height: 1.5; } .canvas-page-with-sidebar .widget-empty-action { margin-top: 8px; } /* Cross-widget drop overlay — shows over the target widget body during drag */ .canvas-page-with-sidebar .canvas-drop-overlay { position: absolute; inset: -4px; background: var(--canvas-accent-glow); border: 2px dashed var(--canvas-accent); border-radius: 9px; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 13px; font-weight: 600; color: var(--canvas-accent); z-index: 5; pointer-events: none; } .canvas-page-with-sidebar .canvas-drop-active { outline: none; } /* Compact markdown rendering inside note rows */ .canvas-page-with-sidebar .canvas-md p { margin: 0 0 4px; } .canvas-page-with-sidebar .canvas-md p:last-child { margin-bottom: 0; } .canvas-page-with-sidebar .canvas-md h1, .canvas-page-with-sidebar .canvas-md h2, .canvas-page-with-sidebar .canvas-md h3 { font-size: 13px; margin: 4px 0 2px; font-weight: 600; } .canvas-page-with-sidebar .canvas-md ul, .canvas-page-with-sidebar .canvas-md ol { margin: 4px 0; padding-left: 18px; } .canvas-page-with-sidebar .canvas-md li { margin-bottom: 2px; } .canvas-page-with-sidebar .canvas-md code { background: var(--canvas-surface-2); padding: 1px 5px; border-radius: 3px; font-family: var(--canvas-mono); font-size: 11.5px; } .canvas-page-with-sidebar .canvas-md pre { background: var(--canvas-bg-2); border: 1px solid var(--canvas-border); border-radius: 5px; padding: 8px 10px; overflow-x: auto; font-family: var(--canvas-mono); font-size: 11.5px; margin: 4px 0; } .canvas-page-with-sidebar .canvas-md pre code { background: none; padding: 0; } .canvas-page-with-sidebar .canvas-md a { color: var(--canvas-accent); text-decoration: underline; text-underline-offset: 2px; } .canvas-page-with-sidebar .canvas-md strong { color: var(--canvas-text); font-weight: 600; } .canvas-page-with-sidebar .canvas-md blockquote { border-left: 2px solid var(--canvas-accent); margin: 4px 0; padding: 2px 10px; color: var(--canvas-text-2); } /* Edit-in-place */ .canvas-page-with-sidebar .inline-input { background: transparent; border: 1px solid var(--canvas-accent); border-radius: 4px; padding: 2px 5px; font-size: inherit; color: var(--canvas-text); font-family: inherit; width: 100%; outline: none; } /* Print: just the Notion page itself, no chrome */ @media print { .canvas-sidebar, .canvas-page-with-sidebar .floating-header, .canvas-page-with-sidebar .canvas-tabs, .canvas-page-with-sidebar .notion-toc, .canvas-page-with-sidebar .deliverable-insertables, .canvas-page-with-sidebar .canvas-shortcut-hint, .canvas-page-with-sidebar .page-header > div:last-child, .toast-stack, .canvas-modal-backdrop { display: none !important; } .canvas-page-with-sidebar, .canvas-main-area, .canvas-app-shell, .canvas-content, .canvas-page-with-sidebar .notion-deliverable-grid, .canvas-page-with-sidebar .notion-page-wrap { display: block !important; overflow: visible !important; margin: 0 !important; padding: 0 !important; background: #ffffff !important; color: #000 !important; } .canvas-page-with-sidebar .notion-page { background: #ffffff !important; border: none !important; box-shadow: none !important; padding: 0 !important; max-width: none !important; } .canvas-page-with-sidebar .notion-page-title { font-size: 28px; color: #000 !important; } .canvas-page-with-sidebar .notion-h2 { color: #000 !important; } .canvas-page-with-sidebar .notion-text { color: #000 !important; padding: 0 !important; margin: 0 !important; } .canvas-page-with-sidebar .check-pill, .canvas-page-with-sidebar .notion-callout { display: none !important; } } /* Floating shortcut hint — subtle, hides itself, hover-revealed */ .canvas-shortcut-hint { position: fixed; bottom: 16px; right: 20px; z-index: 50; display: flex; gap: 14px; padding: 8px 14px; border-radius: 999px; background: var(--canvas-surface); border: 1px solid var(--canvas-border); box-shadow: var(--canvas-shadow); font-size: 11.5px; color: var(--canvas-text-3); font-family: 'Inter', sans-serif; opacity: 0; transform: translateY(8px); transition: opacity 0.25s var(--canvas-ease), transform 0.25s var(--canvas-ease); pointer-events: none; } .canvas-shortcut-hint.visible { opacity: 1; transform: none; pointer-events: auto; } .canvas-shortcut-hint:not(.visible):hover { opacity: 0.6; transform: none; pointer-events: auto; } .canvas-shortcut-hint kbd { display: inline-block; font-family: var(--canvas-mono); font-size: 10px; padding: 1px 5px; border-radius: 3px; background: var(--canvas-surface-2); border: 1px solid var(--canvas-border-2); color: var(--canvas-text-2); margin-right: 2px; min-width: 14px; text-align: center; } @media (max-width: 768px) { .canvas-shortcut-hint { display: none; } } /* Toast */ .toast-stack { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); z-index: 1000; display: flex; flex-direction: column; gap: 8px; pointer-events: none; } .toast-stack .toast { background: #374151; border: 1px solid #4B5563; border-radius: 8px; padding: 10px 14px; font-size: 13px; display: flex; align-items: center; gap: 10px; box-shadow: 0 8px 24px rgba(0,0,0,0.4), 0 2px 6px rgba(0,0,0,0.3); animation: canvas-toast-in .25s cubic-bezier(.22,.9,.3,1); pointer-events: auto; color: #F9FAFB; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } body[data-canvas-theme="light"] .toast-stack .toast { background: #FFFFFF; color: #111827; border-color: #D1D5DB; box-shadow: 0 18px 48px rgba(20, 30, 50, 0.16); } .toast-stack .toast.success { border-left: 3px solid #10B981; } .toast-stack .toast.critic { border-left: 3px solid #A78BFA; } .toast-stack .toast.danger { border-left: 3px solid #DC2626; } @keyframes canvas-toast-in { from { opacity: 0; transform: translateY(8px) } to { opacity: 1; transform: none } } /* Spinner */ .canvas-page-with-sidebar .spinner, .canvas-modal-backdrop .spinner { width: 16px; height: 16px; border: 2px solid var(--canvas-surface-3); border-top-color: var(--canvas-accent); border-radius: 50%; animation: canvas-spin .8s linear infinite; } .canvas-page-with-sidebar .spinner.critic, .canvas-modal-backdrop .spinner.critic { border-top-color: var(--canvas-critic); } @keyframes canvas-spin { to { transform: rotate(360deg) } } /* Scrollbar */ .canvas-page-with-sidebar *::-webkit-scrollbar, .canvas-modal-backdrop *::-webkit-scrollbar { width: 8px; height: 8px; } .canvas-page-with-sidebar *::-webkit-scrollbar-track, .canvas-modal-backdrop *::-webkit-scrollbar-track { background: transparent; } .canvas-page-with-sidebar *::-webkit-scrollbar-thumb, .canvas-modal-backdrop *::-webkit-scrollbar-thumb { background: var(--canvas-border-2); border-radius: 4px; } .canvas-page-with-sidebar *::-webkit-scrollbar-thumb:hover, .canvas-modal-backdrop *::-webkit-scrollbar-thumb:hover { background: var(--canvas-text-3); }