:root { --radius: 10px; --shadow: 0 1px 3px rgba(16, 24, 40, 0.08); --code-bg: #1e293b; --code-fg: #e2e8f0; --secondary: #8b5cf6; } /* ── Dark (default) ──────────────────────────────────── */ html, [data-theme="dark"] { --bg: #1a1b1e; --surface: #26272b; --border: #3a3b40; --text: #e4e4e7; --muted: #9ca3af; --primary: #7dd3fc; --primary-bg: #0c4a6e; --primary-dark: #075985; --on-primary: #7dd3fc; --secondary: #f59e0b; --danger: #f87171; --input-bg: #1a1b1e; --bg-hover: #2b2c31; } /* ── Light ───────────────────────────────────────────── */ [data-theme="light"] { --bg: #f5f7fb; --surface: #ffffff; --border: #e4e8f0; --text: #1b2430; --muted: #6b7688; --primary: #3b82f6; --primary-bg: #3b82f6; --primary-dark: #2563eb; --on-primary: #ffffff; --secondary: #8b5cf6; --danger: #ef4444; --input-bg: #ffffff; --bg-hover: #f3f5f9; } /* ── Summer ──────────────────────────────────────────── */ [data-theme="summer"] { --bg: #fff8f0; --surface: #fff0e0; --border: #ffd0a0; --text: #4a3528; --muted: #9a8070; --primary: #f08040; --primary-bg: #e06830; --primary-dark: #c05020; --on-primary: #fff8f0; --secondary: #14b8a6; --danger: #c04030; --input-bg: #ffffff; --bg-hover: #ffe0c0; } /* ── Max Summer ───────────────────────────────────────── */ [data-theme="max-summer"] { --bg: #fffdf5; --surface: #fff9e8; --border: #ffe082; --text: #212121; --muted: #757575; --primary: #e53935; --primary-bg: #d32f2f; --primary-dark: #b71c1c; --on-primary: #fffdf5; --secondary: #f59e0b; --danger: #c62828; --input-bg: #fffefa; --bg-hover: #fff3c8; } /* ── Autumn ──────────────────────────────────────────── */ [data-theme="autumn"] { --bg: #f4f1ec; --surface: #eae5de; --border: #d4c8bc; --text: #3d3228; --muted: #8a7a6a; --primary: #d59b6a; --primary-bg: #d59b6a; --primary-dark: #c0834a; --on-primary: #f4f1ec; --secondary: #7a9e6e; --danger: #c04040; --input-bg: #ffffff; --bg-hover: #e0d8ce; } /* ── Dracula ─────────────────────────────────────────── */ [data-theme="dracula"] { --bg: #0c0c1e; --surface: #12122a; --border: #222; --text: #eee; --muted: #aaa; --primary: #7c6af7; --primary-bg: #4a3a9a; --primary-dark: #6a5aba; --on-primary: #eee; --secondary: #ff79c6; --danger: #f87272; --input-bg: #1a1a3a; --bg-hover: #2a2a4e; } /* ── Nord ────────────────────────────────────────────── */ [data-theme="nord"] { --bg: #2e3440; --surface: #3b4252; --border: #4c566a; --text: #eceff4; --muted: #b0b9ca; --primary: #88c0d0; --primary-bg: #5e81ac; --primary-dark: #81a1c1; --on-primary: #eceff4; --secondary: #d08770; --danger: #bf616a; --input-bg: #3b4252; --bg-hover: #434c5e; } /* ── Tokyo Night ─────────────────────────────────────── */ [data-theme="tokyo-night"] { --bg: #1a1b26; --surface: #1f2335; --border: #2f3549; --text: #c0caf5; --muted: #787c99; --primary: #7aa2f7; --primary-bg: #3d59a1; --primary-dark: #5470b8; --on-primary: #a9b1d6; --secondary: #e0af68; --danger: #f7768e; --input-bg: #1f2335; --bg-hover: #292e42; } /* ── Catppuccin ──────────────────────────────────────── */ [data-theme="catppuccin"] { --bg: #1e1e2e; --surface: #26263a; --border: #313150; --text: #cdd6f4; --muted: #9399b2; --primary: #cba6f7; --primary-bg: #7350a0; --primary-dark: #8b6bc0; --on-primary: #cdd6f4; --secondary: #94e2d5; --danger: #f38ba8; --input-bg: #26263a; --bg-hover: #313150; } /* ── One Dark ────────────────────────────────────────── */ [data-theme="one-dark"] { --bg: #21252b; --surface: #282c34; --border: #333842; --text: #dcdfe4; --muted: #9196a0; --primary: #61afef; --primary-bg: #2b5780; --primary-dark: #3a6ea0; --on-primary: #61afef; --secondary: #98c379; --danger: #e06c75; --input-bg: #282c34; --bg-hover: #333842; } /* ── Sunset ──────────────────────────────────────────── */ [data-theme="sunset"] { --bg: #1c1018; --surface: #251420; --border: #352030; --text: #fce7f3; --muted: #b090a0; --primary: #f472b6; --primary-bg: #831843; --primary-dark: #9d174d; --on-primary: #f9a8d4; --secondary: #fb923c; --danger: #f87171; --input-bg: #251420; --bg-hover: #352030; } /* ── Urban Slate ─────────────────────────────────────── */ [data-theme="urban-slate"] { --bg: #eef0f3; --surface: #ffffff; --border: #d4d8de; --text: #2b3038; --muted: #6b7480; --primary: #4a6a8a; --primary-bg: #3d5a75; --primary-dark: #2f4a60; --on-primary: #ffffff; --secondary: #c68a3c; --danger: #c0392b; --input-bg: #ffffff; --bg-hover: #e2e6ec; } /* ── Frozen Mist ─────────────────────────────────────── */ [data-theme="frozen-mist"] { --bg: #eef0f2; --surface: #fcfcfd; --border: #dfe3e8; --text: #33383e; --muted: #828a94; --primary: #c96f3a; --primary-bg: #b85f2e; --primary-dark: #9c4f24; --on-primary: #ffffff; --secondary: #4a8a96; --danger: #c0392b; --input-bg: #ffffff; --bg-hover: #e3e7ec; } /* ── Yacht ───────────────────────────────────────────── */ [data-theme="yacht"] { --bg: #e9edf2; --surface: #ffffff; --border: #ccd4de; --text: #26303c; --muted: #6d7986; --primary: #33517a; --primary-bg: #2a4466; --primary-dark: #1f3550; --on-primary: #ffffff; --secondary: #b06a3c; --danger: #b24436; --input-bg: #ffffff; --bg-hover: #dde3ea; } /* ── Copper ──────────────────────────────────────────── */ [data-theme="copper"] { --bg: #f3ede6; --surface: #fdfaf5; --border: #e0d3c2; --text: #3a2f26; --muted: #8c7f70; --primary: #b5653b; --primary-bg: #a5552f; --primary-dark: #8a4625; --on-primary: #ffffff; --secondary: #3b9a9c; --danger: #c0392b; --input-bg: #ffffff; --bg-hover: #e9dfd2; } /* ── Marina ──────────────────────────────────────────── */ [data-theme="marina"] { --bg: #eaf0f4; --surface: #ffffff; --border: #d2dde5; --text: #24303c; --muted: #6f7f8c; --primary: #1f4e6e; --primary-bg: #1a425c; --primary-dark: #12344a; --on-primary: #ffffff; --secondary: #4a97a6; --danger: #b2432f; --input-bg: #ffffff; --bg-hover: #dee7ee; } /* ── Neptune ─────────────────────────────────────────── */ [data-theme="neptune"] { --bg: #e7f1f4; --surface: #ffffff; --border: #cde0e6; --text: #1f2f36; --muted: #6d838c; --primary: #2f7fa0; --primary-bg: #276f8e; --primary-dark: #1e5c77; --on-primary: #ffffff; --secondary: #d98a4a; --danger: #c0392b; --input-bg: #ffffff; --bg-hover: #d9e8ec; } /* ── Sapphire ────────────────────────────────────────── */ [data-theme="sapphire"] { --bg: #eef0f6; --surface: #ffffff; --border: #dcdde8; --text: #2d3440; --muted: #787f8e; --primary: #5a73a6; --primary-bg: #4d6395; --primary-dark: #3d5078; --on-primary: #ffffff; --secondary: #c06a52; --danger: #c0553d; --input-bg: #ffffff; --bg-hover: #e2e4ee; } /* ── Tropical ────────────────────────────────────────── */ [data-theme="tropical"] { --bg: #f2efe6; --surface: #fdfaf2; --border: #e0d9c2; --text: #28302e; --muted: #7d8680; --primary: #e76f51; --primary-bg: #d95f41; --primary-dark: #c04e33; --on-primary: #ffffff; --secondary: #32a09c; --danger: #c0392b; --input-bg: #ffffff; --bg-hover: #e9e4d4; } /* ── Gossamer ────────────────────────────────────────── */ [data-theme="gossamer"] { --bg: #eceef1; --surface: #ffffff; --border: #d8dce2; --text: #2c3238; --muted: #77808a; --primary: #3aa6a0; --primary-bg: #2f918b; --primary-dark: #257771; --on-primary: #ffffff; --secondary: #d0783c; --danger: #d0563a; --input-bg: #ffffff; --bg-hover: #e0e4e9; } * { box-sizing: border-box; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; background: var(--bg); color: var(--text); font-size: 15px; line-height: 1.5; transition: background 0.2s, color 0.2s; } .muted { color: var(--muted); } .topbar { display: flex; align-items: center; gap: 16px; padding: 12px 20px; background: var(--surface); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 10; } .brand { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 18px; } .brand-logo { height: 65px; width: auto; object-fit: contain; } .search { flex: 1; max-width: 520px; padding: 9px 14px; border: 1px solid var(--border); border-radius: 8px; font-size: 14px; background: var(--input-bg); color: var(--text); } .search:focus { outline: 2px solid var(--primary); background: var(--input-bg); } .topbar-right { display: flex; align-items: center; gap: 10px; margin-left: auto; } .user-select { padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--input-bg); color: var(--text); } .btn { padding: 8px 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); cursor: pointer; font-size: 14px; font-weight: 500; } .btn:hover { background: var(--bg-hover); } .btn.primary { background: var(--primary-bg); border-color: var(--primary-bg); color: var(--on-primary); } .btn.primary:hover { background: var(--primary-dark); border-color: var(--primary-dark); } .btn.danger { color: var(--danger); border-color: var(--danger); } .btn.ghost { background: transparent; border-color: transparent; } .layout { display: grid; grid-template-columns: 1fr 300px; gap: 20px; max-width: 1080px; margin: 20px auto; padding: 0 20px; } .col-main h2 { margin-top: 0; font-size: 20px; } .col-side { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; height: fit-content; } .col-side h3 { margin-top: 0; } .note-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .note-item { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 16px; cursor: pointer; box-shadow: var(--shadow); } .note-item:hover { border-color: var(--primary); } .note-title { font-weight: 600; color: var(--secondary); } .note-meta { color: var(--muted); font-size: 12px; margin-top: 2px; } .note-tags { color: var(--primary); font-size: 12px; margin-top: 4px; } .note-snippet { color: var(--text); font-size: 13px; line-height: 1.45; margin-top: 6px; overflow: hidden; } .note-snippet p { margin: 0 0 0.3em; } .note-snippet p:last-child { margin-bottom: 0; } .note-snippet ul, .note-snippet ol { margin: 0.2em 0; padding-left: 1.4em; } .note-snippet code { background: var(--code-bg); color: var(--code-fg); padding: 1px 4px; border-radius: 4px; font-size: 0.9em; } .note-snippet a { color: var(--secondary); text-decoration: underline; } .note-snippet img { max-width: 40px; max-height: 40px; object-fit: cover; border-radius: 4px; vertical-align: middle; } .note-snippet h1, .note-snippet h2, .note-snippet h3 { margin: 0.3em 0; font-size: 1em; color: var(--secondary); } .note-snippet blockquote { border-left: 3px solid var(--secondary); margin: 0.3em 0; padding-left: 10px; color: var(--muted); } .note-item { display: flex; align-items: flex-start; gap: 12px; } .note-body { flex: 1; min-width: 0; } .note-thumb { width: 56px; height: 56px; object-fit: cover; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); flex-shrink: 0; } .attach-count { color: var(--muted); margin-left: 8px; } .note-common { border-left: 3px solid var(--secondary); }.common-badge { display: inline-block; background: color-mix(in srgb, var(--secondary) 18%, transparent); color: var(--secondary); border-radius: 10px; padding: 0 7px; font-size: 11px; margin-right: 2px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; } .common-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--muted); cursor: pointer; } .common-toggle input { accent-color: var(--secondary); cursor: pointer; } .tag-cloud { display: flex; flex-wrap: wrap; gap: 6px; } .tag-chip { background: color-mix(in srgb, var(--primary) 12%, transparent); color: var(--primary); border: none; border-radius: 16px; padding: 4px 12px; font-size: 13px; cursor: pointer; } .tag-chip:hover { background: color-mix(in srgb, var(--primary) 22%, transparent); } .editor-wrap { max-width: 900px; margin: 20px auto; padding: 0 20px; } .editor-topbar { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; } .spacer { flex: 1; } .toolbar { display: flex; flex-wrap: wrap; gap: 4px; padding: 8px; background: var(--surface); border: 1px solid var(--border); border-bottom: none; border-radius: var(--radius) var(--radius) 0 0; } .tool-btn { padding: 6px 10px; border: none; background: transparent; border-radius: 6px; cursor: pointer; font-size: 13px; color: var(--text); } .tool-btn:hover { background: var(--bg-hover); } .sep { width: 1px; background: var(--border); margin: 4px 6px; } .editor { background: var(--surface); border: 1px solid var(--border); border-radius: 0 0 var(--radius) var(--radius); padding: 16px 20px; min-height: 60vh; } .editor .ProseMirror { min-height: 55vh; outline: none; } .editor h1, .editor h2, .editor h3 { margin: 0.5em 0 0.25em; color: var(--secondary); } .editor p { margin: 0.4em 0; } .editor pre { background: var(--code-bg); color: var(--code-fg); padding: 12px; border-radius: 8px; overflow-x: auto; } .editor code { background: color-mix(in srgb, var(--border) 55%, transparent); padding: 1px 4px; border-radius: 4px; font-size: 0.9em; } .editor pre code { background: none; padding: 0; } .editor blockquote { border-left: 3px solid var(--secondary); margin: 0.5em 0; padding-left: 12px; color: var(--muted); } .editor a { color: var(--secondary); text-decoration: underline; cursor: pointer; } .editor img { max-width: 100%; } .editor-split { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--border); border-top: none; border-radius: 0 0 var(--radius) var(--radius); overflow: hidden; } .editor-split .editor { border: none; border-right: 1px solid var(--border); border-radius: 0; } .editor-split .preview { background: var(--surface); padding: 16px 20px; min-height: 60vh; overflow-y: auto; line-height: 1.6; } .editor-split.preview-hidden { grid-template-columns: 1fr; } .editor-split.preview-hidden .preview { display: none; } .editor-split.preview-hidden .editor { border-right: none; } .preview-toggle.active { color: var(--primary); } .preview h1, .preview h2, .preview h3, .preview h4 { margin: 0.5em 0 0.25em; color: var(--secondary); } .preview h1 { font-size: 1.6em; } .preview h2 { font-size: 1.35em; } .preview h3 { font-size: 1.15em; } .preview p { margin: 0.4em 0; } .preview ul, .preview ol { padding-left: 1.5em; margin: 0.4em 0; } .preview pre { background: var(--code-bg); color: var(--code-fg); padding: 12px; border-radius: 8px; overflow-x: auto; } .preview code { background: color-mix(in srgb, var(--border) 55%, transparent); padding: 1px 4px; border-radius: 4px; font-size: 0.9em; } .preview pre code { background: none; padding: 0; } .preview blockquote { border-left: 3px solid var(--secondary); margin: 0.5em 0; padding-left: 12px; color: var(--muted); } .preview a { color: var(--secondary); text-decoration: underline; } .preview hr { border: none; border-top: 1px solid var(--border); margin: 1em 0; } .preview img { max-width: 100%; } .preview table { border-collapse: collapse; } .preview th, .preview td { border: 1px solid var(--border); padding: 4px 8px; } .status { margin-top: 10px; color: var(--muted); font-size: 13px; min-height: 20px; } .editor-hint { margin-top: 12px; padding: 10px 14px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); font-size: 13px; color: var(--muted); line-height: 1.6; } .editor-hint p { margin: 0.25em 0; } .editor-hint code { background: color-mix(in srgb, var(--border) 55%, transparent); padding: 1px 4px; border-radius: 4px; font-size: 0.9em; } .help-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px 24px; line-height: 1.6; } .help-card h1 { margin-top: 0; } .help-card h2 { margin-top: 1.5em; margin-bottom: 0.4em; font-size: 18px; color: var(--secondary); } .help-card p { margin: 0.4em 0; color: var(--text); } .help-card code { background: color-mix(in srgb, var(--border) 55%, transparent); padding: 1px 4px; border-radius: 4px; font-size: 0.9em; } .help-table { border-collapse: collapse; width: 100%; max-width: 480px; margin-top: 8px; } .help-table th, .help-table td { text-align: left; padding: 6px 12px; border: 1px solid var(--border); font-size: 14px; } .help-table th { background: var(--bg); color: var(--muted); font-weight: 600; } .help-table code { white-space: nowrap; } .tools-row { display: flex; align-items: center; gap: 12px; margin-top: 8px; flex-wrap: wrap; } .tools-row .muted { min-height: 1.2em; } .tools-head { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .tools-head h1 { margin: 0; } .tools-logo { height: 40px; width: auto; } .login-card { display: flex; flex-direction: column; gap: 12px; max-width: 340px; margin: 10vh auto; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 28px; box-shadow: var(--shadow); text-align: center; } .login-logo { width: 56px; height: 56px; border-radius: 12px; margin: 0 auto; object-fit: cover; } .login-card input { padding: 10px 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--input-bg); color: var(--text); } .error { color: var(--danger); font-size: 13px; min-height: 18px; } .overlay { position: fixed; inset: 0; background: rgba(15, 23, 42, 0.4); display: flex; align-items: center; justify-content: center; z-index: 100; } .modal { background: var(--surface); border-radius: var(--radius); padding: 20px; width: 90%; max-width: 520px; max-height: 80vh; overflow-y: auto; } .history-list { list-style: none; padding: 0; margin: 0 0 16px; } .history-list li { padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; } /* ── Theme selector ──────────────────────────────────── */ .theme-selector { position: relative; } .theme-btn { display: flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font-size: 13px; font-family: inherit; cursor: pointer; transition: background 0.15s; } .theme-btn:hover { background: var(--bg-hover); } .theme-label { color: var(--muted); } .chevron { font-size: 9px; color: var(--muted); } .theme-popover { position: absolute; top: calc(100% + 6px); right: 0; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 12px 30px rgba(0, 0, 0, 0.25); padding: 10px; min-width: 200px; z-index: 60; } .theme-pop-header { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.6px; margin-bottom: 8px; padding: 0 4px; } .theme-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; } .theme-section { grid-column: 1 / -1; font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.6px; margin: 6px 4px 2px; padding-top: 6px; border-top: 1px solid var(--border); } .theme-section:first-child { border-top: none; padding-top: 0; margin-top: 0; } .theme-option { display: flex; align-items: center; gap: 8px; padding: 7px 8px; border: 1px solid transparent; border-radius: 6px; background: var(--bg); cursor: pointer; font-family: inherit; font-size: 13px; color: var(--text); transition: background 0.12s, border-color 0.12s; } .theme-option:hover { border-color: var(--border); } .theme-option.active { border-color: var(--primary); } .theme-swatch { display: flex; gap: 2px; flex-shrink: 0; } .theme-dot { width: 10px; height: 10px; border-radius: 2px; } .mode-row { display: flex; gap: 4px; margin-bottom: 8px; background: var(--bg); padding: 3px; border-radius: 8px; border: 1px solid var(--border); } .mode-btn { flex: 1; padding: 5px 0; border: none; border-radius: 6px; background: transparent; color: var(--muted); font-family: inherit; font-size: 12px; cursor: pointer; transition: background 0.12s, color 0.12s; } .mode-btn.active { background: var(--primary-bg); color: var(--on-primary); font-weight: 600; } .auto-panel { display: flex; flex-direction: column; gap: 6px; } .auto-label { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .6px; } .auto-panel select { width: 100%; padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; background: var(--input-bg); color: var(--text); font-family: inherit; font-size: 13px; } .hidden { display: none !important; } @media (max-width: 720px) { .layout { grid-template-columns: 1fr; } .topbar { flex-wrap: wrap; } .search { max-width: none; order: 3; flex-basis: 100%; } .theme-popover { right: -60px; } }