620 lines
16 KiB
CSS
620 lines
16 KiB
CSS
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap');
|
|
@import './styles-test.css';
|
|
@import './styles/themes.css';
|
|
@import './styles/markdown.css';
|
|
@import './styles/syntax.css';
|
|
@import './styles/toc.css';
|
|
@import './styles/tokens.css';
|
|
@import './styles/_overlay-scrollbar.css';
|
|
@import './styles/codemirror.css';
|
|
|
|
/* Local-only fallbacks: use installed fonts if available */
|
|
@font-face {
|
|
font-family: 'gg sans';
|
|
font-style: normal;
|
|
font-weight: 100 900;
|
|
src: local('gg sans'), local('ggsans'), local('GG Sans');
|
|
font-display: swap;
|
|
}
|
|
|
|
@font-face {
|
|
font-family: 'Whitney';
|
|
font-style: normal;
|
|
font-weight: 100 900;
|
|
src: local('Whitney'), local('Whitney Book'), local('Whitney Medium'), local('Whitney Semibold'), local('Whitney Bold');
|
|
font-display: swap;
|
|
}
|
|
|
|
/* Excalidraw CSS variables (thème sombre) */
|
|
/* .excalidraw {
|
|
--color-primary: #ffffff;
|
|
--color-secondary: #333333;
|
|
--color-background: #121212;
|
|
--color-border: #444444;
|
|
--color-text: #ffffff;
|
|
--color-ui-element: #2d2d2d;
|
|
--color-selected: #007bff;
|
|
--color-hover: #333333;
|
|
--color-error: #ff4d4f;
|
|
--color-success: #52c41a;
|
|
} */
|
|
|
|
/* .excalidraw {
|
|
--color-background: #1e1e1e !important;
|
|
--color-text: white !important;
|
|
--color-ui-element: #2d2d2d !important;
|
|
} */
|
|
|
|
.md-attachment-figure {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 0.25rem;
|
|
}
|
|
|
|
/* Excalidraw host sizing to ensure canvas renders full size */
|
|
excalidraw-editor {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
min-height: 480px;
|
|
position: relative; /* anchor absolutely-positioned children if any */
|
|
}
|
|
|
|
/* Scoped minimal layout for Excalidraw internals */
|
|
excalidraw-editor .excalidraw {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
excalidraw-editor .excalidraw .excalidraw__canvas-container,
|
|
excalidraw-editor .excalidraw .layer-ui__wrapper {
|
|
position: absolute;
|
|
inset: 0;
|
|
}
|
|
|
|
/* Removed global .excalidraw override to avoid conflicting with Excalidraw internal styles */
|
|
|
|
.md-attachment-figure img {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.md-task-list {
|
|
list-style: none;
|
|
margin: 0 0 1rem 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.md-task-item {
|
|
list-style: none;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.md-task {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
.md-task-checkbox {
|
|
appearance: none;
|
|
width: 1.1rem;
|
|
height: 1.1rem;
|
|
border-radius: 0.35rem;
|
|
border: 2px solid var(--task-checkbox-border, #64748b);
|
|
background-color: transparent;
|
|
position: relative;
|
|
}
|
|
|
|
.md-task-item--done .md-task-checkbox {
|
|
border-color: var(--task-checkbox-checked-border, #22c55e);
|
|
background-color: var(--task-checkbox-checked-bg, #22c55e);
|
|
}
|
|
|
|
.md-task-item--done .md-task-label-text {
|
|
text-decoration: line-through;
|
|
color: var(--task-checkbox-done-text, #94a3b8);
|
|
}
|
|
|
|
.md-task-checkbox::after {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0.05rem;
|
|
left: 0.25rem;
|
|
width: 0.35rem;
|
|
height: 0.65rem;
|
|
border-right: 2px solid white;
|
|
border-bottom: 2px solid white;
|
|
transform: rotate(45deg);
|
|
opacity: 0;
|
|
}
|
|
|
|
.md-task-item--done .md-task-checkbox::after {
|
|
opacity: 1;
|
|
}
|
|
|
|
.md-external-link {
|
|
color: var(--external-link, #6366f1);
|
|
text-decoration: underline;
|
|
text-decoration-thickness: 2px;
|
|
text-underline-offset: 3px;
|
|
transition: color 0.2s ease, text-decoration-color 0.2s ease;
|
|
}
|
|
|
|
.md-external-link:hover,
|
|
.md-external-link:focus-visible {
|
|
color: var(--external-link-hover, #4338ca);
|
|
text-decoration-color: currentColor;
|
|
}
|
|
|
|
.md-external-link:focus-visible {
|
|
outline: 2px solid currentColor;
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.md-footnotes {
|
|
border-top: 1px solid color-mix(in srgb, var(--brand) 35%, rgba(148, 163, 184, 0.25));
|
|
padding-top: 1.5rem;
|
|
}
|
|
|
|
.md-footnotes header {
|
|
font-size: 0.75rem;
|
|
letter-spacing: 0.08em;
|
|
color: var(--footnotes-heading, #475569);
|
|
}
|
|
|
|
.md-footnotes ol {
|
|
counter-reset: footnote-counter;
|
|
margin: 0;
|
|
padding-left: 1.5rem;
|
|
}
|
|
|
|
.md-footnote-item {
|
|
position: relative;
|
|
color: var(--footnotes-text, color-mix(in srgb, var(--brand-800) 35%, #475569));
|
|
}
|
|
|
|
.md-footnote-item p {
|
|
margin: 0;
|
|
}
|
|
|
|
.md-footnote-ref {
|
|
font-size: 0.75rem;
|
|
margin-left: 0.15rem;
|
|
}
|
|
|
|
.md-footnote-ref a {
|
|
text-decoration: none;
|
|
}
|
|
|
|
.md-footnote-ref a:hover,
|
|
.md-footnote-ref a:focus-visible {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.md-wiki-link {
|
|
color: var(--wiki-link, #4f46e5);
|
|
text-decoration: underline;
|
|
text-decoration-thickness: 1px;
|
|
text-underline-offset: 3px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.md-wiki-link:hover,
|
|
.md-wiki-link:focus-visible {
|
|
color: var(--wiki-link-hover, #4338ca);
|
|
text-decoration-thickness: 2px;
|
|
}
|
|
|
|
.md-wiki-link.wikilink-orphan {
|
|
color: var(--wiki-link-orphan, #94a3b8);
|
|
text-decoration-style: dashed;
|
|
}
|
|
|
|
.md-wiki-link.wikilink-orphan:hover,
|
|
.md-wiki-link.wikilink-orphan:focus-visible {
|
|
color: var(--wiki-link-orphan-hover, #64748b);
|
|
}
|
|
|
|
/* Note preview overlay styles */
|
|
.note-preview-overlay {
|
|
z-index: 1000;
|
|
}
|
|
|
|
.cdk-overlay-backdrop {
|
|
background: rgba(0, 0, 0, 0.32);
|
|
}
|
|
|
|
.cdk-overlay-backdrop.cdk-overlay-backdrop-showing {
|
|
opacity: 1;
|
|
}
|
|
|
|
.md-math-inline {
|
|
font-family: "Cambria", "Times New Roman", serif;
|
|
background-color: rgba(148, 163, 184, 0.2);
|
|
padding: 0 0.25rem;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.md-math-block {
|
|
font-family: "Cambria", "Times New Roman", serif;
|
|
background-color: rgba(148, 163, 184, 0.15);
|
|
padding: 1rem;
|
|
margin: 1.5rem 0;
|
|
border-radius: 0.5rem;
|
|
text-align: center;
|
|
}
|
|
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
html, body {
|
|
height: auto;
|
|
overflow-y: auto;
|
|
-webkit-overflow-scrolling: touch;
|
|
}
|
|
|
|
.sr-only {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
padding: 0;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
clip: rect(0, 0, 0, 0);
|
|
white-space: nowrap;
|
|
border: 0;
|
|
}
|
|
|
|
&:root {
|
|
--external-link: #6366f1;
|
|
--external-link-hover: #4338ca;
|
|
--task-checkbox-border: #94a3b8;
|
|
--task-checkbox-checked-border: #22c55e;
|
|
--task-checkbox-checked-bg: #22c55e;
|
|
--task-checkbox-done-text: #94a3b8;
|
|
--btn-border-color: color-mix(in srgb, var(--border) 65%, transparent);
|
|
--btn-border-strong: var(--border);
|
|
--btn-hover-background: color-mix(in srgb, var(--bg-muted) 42%, transparent);
|
|
--btn-focus-ring: color-mix(in srgb, var(--border) 45%, transparent);
|
|
--btn-muted-text: var(--text-muted);
|
|
/* Scrollbar colors subtly follow theme brand/accent */
|
|
--scrollbar-thumb-color: color-mix(in oklab, var(--brand, var(--scrollbar-thumb, rgba(148, 163, 184, 0.45))) 22%, transparent);
|
|
--scrollbar-thumb-color-active: color-mix(in oklab, var(--brand, var(--scrollbar-thumb, rgba(148, 163, 184, 0.45))) 36%, transparent);
|
|
|
|
/* Theme accent + CodeMirror highlight tokens */
|
|
--color-accent: var(--primary, #3b82f6);
|
|
--cm-hl-bg: color-mix(in srgb, var(--color-accent) 28%, transparent);
|
|
--cm-hl-br: 3px;
|
|
|
|
/* Button design tokens */
|
|
--btn-radius: 0.75rem;
|
|
--btn-padding-y: .5rem;
|
|
--btn-padding-x: .75rem;
|
|
--btn-font: 500;
|
|
--btn-shadow: 0 2px 10px rgba(0,0,0,.06);
|
|
--btn-ring: 2px;
|
|
--btn-speed: 180ms;
|
|
|
|
--btn-bg: var(--color-accent);
|
|
--btn-fg: white;
|
|
--btn-bg-hover: color-mix(in srgb, var(--color-accent) 85%, white 15%);
|
|
--btn-bg-active: color-mix(in srgb, var(--color-accent) 75%, black 25%);
|
|
--btn-outline: color-mix(in srgb, var(--color-accent) 30%, transparent);
|
|
}
|
|
|
|
[data-theme="dark"],
|
|
.dark {
|
|
--external-link: #22d3ee;
|
|
--external-link-hover: #0ea5e9;
|
|
--task-checkbox-border: #64748b;
|
|
--task-checkbox-checked-border: #22c55e;
|
|
--task-checkbox-checked-bg: #15803d;
|
|
--task-checkbox-done-text: #64748b;
|
|
--btn-border-color: color-mix(in srgb, var(--border) 70%, transparent);
|
|
--btn-border-strong: color-mix(in srgb, var(--border) 88%, transparent);
|
|
--btn-hover-background: color-mix(in srgb, var(--bg-muted) 36%, transparent);
|
|
--btn-focus-ring: color-mix(in srgb, var(--border) 55%, transparent);
|
|
--btn-muted-text: var(--text-muted);
|
|
/* Dark-mode: slightly stronger mix for visibility on darker bg */
|
|
--scrollbar-thumb-color: color-mix(in oklab, var(--brand, var(--scrollbar-thumb, rgba(148, 163, 184, 0.35))) 28%, transparent);
|
|
--scrollbar-thumb-color-active: color-mix(in oklab, var(--brand, var(--scrollbar-thumb, rgba(148, 163, 184, 0.35))) 42%, transparent);
|
|
|
|
/* Dark theme adjustment */
|
|
--cm-hl-bg: color-mix(in srgb, var(--color-accent) 22%, transparent);
|
|
--btn-bg-hover: color-mix(in srgb, var(--color-accent) 80%, white 20%);
|
|
--btn-bg-active: color-mix(in srgb, var(--color-accent) 70%, black 30%);
|
|
}
|
|
|
|
@media (min-width: 1024px) {
|
|
body {
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Global native scrollbar fallback (for any container not using appScrollableOverlay) */
|
|
html, body {
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--scrollbar-thumb-color) transparent;
|
|
}
|
|
::-webkit-scrollbar { width: 10px; height: 10px; }
|
|
::-webkit-scrollbar-track { background: transparent; }
|
|
::-webkit-scrollbar-thumb {
|
|
background: var(--scrollbar-thumb-color);
|
|
border-radius: 9999px;
|
|
}
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: var(--scrollbar-thumb-color-active);
|
|
}
|
|
|
|
@layer components {
|
|
/* CodeMirror markdown highlight class - theme driven */
|
|
.cm-md-highlight {
|
|
background: var(--cm-hl-bg);
|
|
border-radius: var(--cm-hl-br, 3px);
|
|
transition: background var(--btn-speed) ease;
|
|
}
|
|
|
|
/* Theme specific accent overrides */
|
|
[data-theme="nimbus"] { --color-accent: #7c3aed; }
|
|
[data-theme="emerald"] { --color-accent: #10b981; }
|
|
|
|
/* Unified Button Utilities */
|
|
.btn {
|
|
@apply inline-flex items-center justify-center gap-2 select-none;
|
|
border-radius: var(--btn-radius);
|
|
padding: var(--btn-padding-y) var(--btn-padding-x);
|
|
font-weight: var(--btn-font);
|
|
box-shadow: var(--btn-shadow);
|
|
transition: transform var(--btn-speed) ease, background var(--btn-speed) ease, color var(--btn-speed) ease, border-color var(--btn-speed) ease, box-shadow var(--btn-speed) ease;
|
|
outline: none;
|
|
}
|
|
.btn:focus-visible { box-shadow: 0 0 0 var(--btn-ring) var(--btn-outline); }
|
|
.btn:active { transform: translateY(1px) scale(0.99); }
|
|
|
|
.btn-solid { background: var(--btn-bg); color: var(--btn-fg); }
|
|
.btn-solid:hover { background: var(--btn-bg-hover); }
|
|
.btn-solid:active { background: var(--btn-bg-active); }
|
|
|
|
.btn-outline { background: transparent; color: var(--btn-bg); border: 1px solid var(--btn-outline); }
|
|
.btn-outline:hover { background: color-mix(in srgb, var(--btn-bg) 8%, transparent); }
|
|
|
|
.btn-ghost { background: transparent; color: var(--btn-bg); }
|
|
.btn-ghost:hover { background: color-mix(in srgb, var(--btn-bg) 6%, transparent); }
|
|
|
|
.btn-sm { @apply text-sm; padding: .375rem .6rem; }
|
|
.btn-md { @apply text-base; }
|
|
.btn-lg { @apply text-lg; padding: .65rem 1rem; }
|
|
|
|
/* Adaptive scrollbar states */
|
|
.adaptive-scrollbar {
|
|
position: relative;
|
|
scrollbar-width: thin;
|
|
scrollbar-gutter: stable both-edges;
|
|
--scrollbar-thumb-transition: 240ms ease;
|
|
}
|
|
|
|
.adaptive-scrollbar[data-scroll-state="idle"] {
|
|
scrollbar-width: none;
|
|
scrollbar-color: transparent transparent;
|
|
}
|
|
|
|
.adaptive-scrollbar[data-scroll-state="mini"] {
|
|
scrollbar-color: color-mix(in srgb, var(--scrollbar-thumb-color) 80%, transparent) transparent;
|
|
}
|
|
|
|
.adaptive-scrollbar[data-scroll-state="active"] {
|
|
scrollbar-color: color-mix(in srgb, var(--scrollbar-thumb-color-active) 100%, transparent) transparent;
|
|
}
|
|
|
|
.adaptive-scrollbar::-webkit-scrollbar {
|
|
width: 10px;
|
|
height: 10px;
|
|
background-color: transparent;
|
|
}
|
|
|
|
.adaptive-scrollbar::-webkit-scrollbar-thumb {
|
|
border-radius: 9999px;
|
|
background-color: transparent;
|
|
box-shadow: inset 0 0 0 1px transparent;
|
|
transition: background-color var(--scrollbar-thumb-transition), box-shadow var(--scrollbar-thumb-transition), opacity var(--scrollbar-thumb-transition);
|
|
opacity: 0;
|
|
}
|
|
|
|
.adaptive-scrollbar[data-scroll-state="mini"]::-webkit-scrollbar-thumb {
|
|
background-color: var(--scrollbar-thumb-color);
|
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.adaptive-scrollbar[data-scroll-state="active"]::-webkit-scrollbar-thumb {
|
|
background-color: var(--scrollbar-thumb-color-active);
|
|
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18);
|
|
opacity: 1;
|
|
}
|
|
|
|
.adaptive-scrollbar::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
.calendar-compact {
|
|
/* @apply flex min-h-[180px] max-h-[200px] flex-col; */
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 180px;
|
|
max-height: 200px;
|
|
border: 1px solid #1C2740;
|
|
border-radius: 0.25rem;
|
|
background-color: #1C2740;
|
|
}
|
|
|
|
.calendar-compact .cal-month-view {
|
|
flex: 1 1 auto;
|
|
/* border: 1px solid #1C2740; */
|
|
/* border-radius: 0.25rem; */
|
|
/* background-color: #1C2740; */
|
|
}
|
|
|
|
.calendar-compact .cal-header {
|
|
/* @apply px-2 py-1; */
|
|
padding: 0.5rem;
|
|
}
|
|
|
|
.calendar-compact .cal-header .cal-header-title {
|
|
/* @apply text-sm; */
|
|
font-size: 0.875rem;
|
|
}
|
|
|
|
.calendar-compact .cal-cell {
|
|
min-height: 36px;
|
|
padding: 0.35rem;
|
|
border: 1px solid #1C2740;
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.calendar-compact .cal-day-number {
|
|
/* @apply text-xs; */
|
|
font-size: 0.75rem;
|
|
}
|
|
|
|
.calendar-compact .cal-event {
|
|
/* @apply h-0.5 rounded-full mt-[2px]; */
|
|
height: 0.5rem;
|
|
border-radius: 0.5rem;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.cal-event-created {
|
|
background-color: #22c55e;
|
|
}
|
|
|
|
.cal-event-updated {
|
|
background-color: #f97316;
|
|
}
|
|
|
|
.calendar-compact .cal-open-day-events {
|
|
/* @apply hidden; */
|
|
display: none;
|
|
}
|
|
|
|
/* Standardized Button Styles - Based on "Collapse all" design */
|
|
.btn-standard,
|
|
.btn-standard-sm,
|
|
.btn-standard-xs,
|
|
.btn-standard-icon {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 0.5rem;
|
|
border: 1px solid var(--btn-border-color);
|
|
background-color: transparent;
|
|
color: var(--text-main);
|
|
font-weight: 500;
|
|
line-height: 1.2;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
|
|
outline: none;
|
|
}
|
|
|
|
.btn-standard,
|
|
.btn-standard-primary,
|
|
.btn-standard-danger {
|
|
padding: 0.75rem 1.5rem;
|
|
border-radius: 0.75rem;
|
|
}
|
|
|
|
.btn-standard-sm {
|
|
padding: 0.5rem 1rem;
|
|
border-radius: 0.75rem;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.btn-standard-xs {
|
|
padding: 0.375rem 0.875rem;
|
|
border-radius: 0.625rem;
|
|
font-size: 0.75rem;
|
|
}
|
|
|
|
.btn-standard-icon {
|
|
padding: 0.5rem;
|
|
border-radius: 0.625rem;
|
|
color: var(--btn-muted-text);
|
|
gap: 0.25rem;
|
|
min-width: auto;
|
|
}
|
|
|
|
.btn-standard:hover,
|
|
.btn-standard-sm:hover,
|
|
.btn-standard-xs:hover,
|
|
.btn-standard-icon:hover {
|
|
background-color: var(--btn-hover-background);
|
|
border-color: var(--btn-border-strong);
|
|
color: var(--text-main);
|
|
}
|
|
|
|
.btn-standard:focus-visible,
|
|
.btn-standard-sm:focus-visible,
|
|
.btn-standard-xs:focus-visible,
|
|
.btn-standard-icon:focus-visible {
|
|
box-shadow: 0 0 0 2px var(--btn-focus-ring);
|
|
}
|
|
|
|
.btn-standard-primary {
|
|
border: 1px solid color-mix(in srgb, var(--brand) 60%, transparent);
|
|
background-color: color-mix(in srgb, var(--brand) 15%, transparent);
|
|
color: color-mix(in srgb, var(--brand) 90%, #ffffff);
|
|
}
|
|
|
|
.btn-standard-primary:hover {
|
|
background-color: color-mix(in srgb, var(--brand) 25%, transparent);
|
|
border-color: var(--brand);
|
|
}
|
|
|
|
.btn-standard-primary:focus-visible {
|
|
box-shadow: 0 0 0 2px color-mix(in srgb, var(--brand) 45%, transparent);
|
|
}
|
|
|
|
.btn-standard-danger {
|
|
border: 1px solid color-mix(in srgb, var(--danger) 60%, transparent);
|
|
background-color: color-mix(in srgb, var(--danger) 12%, transparent);
|
|
color: color-mix(in srgb, var(--danger) 92%, #ffffff);
|
|
}
|
|
|
|
.btn-standard-danger:hover {
|
|
background-color: color-mix(in srgb, var(--danger) 22%, transparent);
|
|
border-color: var(--danger);
|
|
}
|
|
|
|
.btn-standard-danger:focus-visible {
|
|
box-shadow: 0 0 0 2px color-mix(in srgb, var(--danger) 38%, transparent);
|
|
}
|
|
|
|
.btn-standard-icon:hover {
|
|
color: var(--text-main);
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
/* Mobile animations */
|
|
@keyframes fadeIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(8px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.animate-fadeIn {
|
|
animation: fadeIn 0.3s ease-out forwards;
|
|
}
|
|
}
|