From 561249ba06e7ba38658f1aadde7e6b369302bc22 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Mon, 20 Apr 2026 14:37:10 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20migrer=20custom=5Fviews.css=20vers=20sy?= =?UTF-8?q?st=C3=A8me=20variables=20CSS=20th=C3=A8me=20s=C3=A9mantiques=20?= =?UTF-8?q?avec=20tokens=20d=C3=A9di=C3=A9s=20(--special-view-panel-bg/--s?= =?UTF-8?q?pecial-view-border/--special-view-divider/--special-view-shadow?= =?UTF-8?q?/--special-view-muted/--special-view-strong/--special-view-chip?= =?UTF-8?q?-*),=20suppression=20hardcoded=20colors/backgrounds=20dark=20mo?= =?UTF-8?q?de=20au=20profit=20color-mix()=20dynamiques,=20refactoring=20st?= =?UTF-8?q?yles=20notes/todos=20avec=20border-radius=20unifi=C3=A9s=20(12-?= =?UTF-8?q?14px),=20nettoyage=20code=20dupliqu=C3=A9=20(note-input-collaps?= =?UTF-8?q?ed,=20sidebar=20styles),=20et=20am=C3=A9lioration=20coh=C3=A9re?= =?UTF-8?q?nce=20vis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shaarli-pro/css/custom_views.css | 2376 +----------------------------- shaarli-pro/css/style.css | 343 +---- 2 files changed, 102 insertions(+), 2617 deletions(-) diff --git a/shaarli-pro/css/custom_views.css b/shaarli-pro/css/custom_views.css index 0c05dc4..5d4b3bc 100644 --- a/shaarli-pro/css/custom_views.css +++ b/shaarli-pro/css/custom_views.css @@ -2,6 +2,20 @@ Special Views for Todos and Notes ========================================= */ +/* Theme tokens for custom views */ +:root { + --special-view-panel-bg: var(--bg-card); + --special-view-panel-alt: color-mix(in srgb, var(--bg-card) 85%, var(--bg-body)); + --special-view-border: var(--border); + --special-view-divider: var(--border-light); + --special-view-shadow: var(--shadow-md); + --special-view-muted: var(--text-secondary); + --special-view-strong: var(--text-main); + --special-view-chip-bg: color-mix(in srgb, var(--primary) 12%, transparent); + --special-view-chip-hover: color-mix(in srgb, var(--primary) 22%, transparent); + --special-view-chip-text: var(--text-main); +} + /* --- Layout Wrapper (injected by JS) --- */ .special-view-wrapper { display: flex; @@ -16,10 +30,7 @@ body.view-todo .content-container { padding: 2rem; background-color: var(--bg-body); min-height: 100vh; -} - -[data-theme="dark"] body.view-todo .content-container { - background-color: #20293a; + /* Adjust for header */ } body.view-todo #linklist { @@ -27,40 +38,6 @@ body.view-todo #linklist { /* Show default list when wrapper is not active */ } -/* Sidebar */ -.todo-sidebar { - width: 280px; - background-color: var(--bg-sidebar); - border-right: 1px solid var(--border); - padding: 1rem; - display: flex; - flex-direction: column; - flex-shrink: 0; -} - -[data-theme="dark"] .todo-sidebar { - background-color: #1e293b; - border-color: #334155; -} - -.create-task-btn { - width: 100%; - padding: 0.75rem 1rem; - background-color: var(--primary-color, #2563eb); - color: white; - border: none; - border-radius: 2rem; - font-weight: 500; - display: flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - cursor: pointer; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); - transition: transform 0.2s, background-color 0.2s; - margin-bottom: 1.5rem; -} - .create-task-btn:hover { background-color: var(--primary-dark, #1d4ed8); transform: translateY(-1px); @@ -71,79 +48,42 @@ body.view-todo #linklist { margin-bottom: 0.25rem; border-radius: 0.5rem; cursor: pointer; - color: var(--text-color, #334155); + color: var(--special-view-strong); display: flex; align-items: center; gap: 0.75rem; transition: background-color 0.2s; } -[data-theme="dark"] .todo-list-item { - color: #cbd5e1; -} - .todo-list-item:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -[data-theme="dark"] .todo-list-item:hover { - background-color: rgba(255, 255, 255, 0.05); + background-color: color-mix(in srgb, var(--special-view-strong) 8%, transparent); } .todo-list-item.active { background-color: rgba(37, 99, 235, 0.1); color: var(--primary-color, #2563eb); font-weight: 600; -} - -/* Main Task Area */ -.todo-main { - flex: 1; - padding: 2rem; - overflow-y: auto; - background-color: var(--bg-body); -} - -[data-theme="dark"] .todo-main { - background-color: #20293a; -} - -.todo-main-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; -} - -.todo-main-header h2 { - font-size: 1.5rem; - font-weight: 600; margin: 0; } /* Todo Item */ .todo-item { padding: 1rem; - border-bottom: 1px solid var(--border-color, #e2e8f0); + border-bottom: 1px solid var(--special-view-divider); display: flex; align-items: center; - /* keep aligned */ gap: 1rem; transition: background-color 0.2s; } -[data-theme="dark"] .todo-item { - border-bottom-color: #334155; -} - .todo-item:hover { - background-color: rgba(0, 0, 0, 0.02); + background-color: color-mix(in srgb, var(--special-view-strong) 5%, transparent); } .todo-checkbox { width: 20px; height: 20px; - border: 2px solid var(--text-light, #94a3b8); + border: 2px solid var(--special-view-muted); border-radius: 50%; cursor: pointer; display: flex; @@ -153,8 +93,8 @@ body.view-todo #linklist { } .todo-checkbox.checked { - background-color: var(--primary-color, #2563eb); - border-color: var(--primary-color, #2563eb); + background-color: var(--primary); + border-color: var(--primary); color: white; } @@ -167,14 +107,10 @@ body.view-todo #linklist { .todo-title { font-size: 1rem; - color: var(--text-color, #0f172a); + color: var(--special-view-strong); font-weight: 400; } -[data-theme="dark"] .todo-title { - color: #f1f5f9; -} - .todo-item.completed .todo-title { text-decoration: line-through; color: var(--text-light, #94a3b8); @@ -185,30 +121,22 @@ body.view-todo #linklist { align-items: center; gap: 0.5rem; font-size: 0.75rem; - color: var(--text-light, #64748b); + color: var(--special-view-muted); } .todo-badge { padding: 0.125rem 0.5rem; border-radius: 1rem; - background-color: rgba(0, 0, 0, 0.05); + background-color: var(--special-view-chip-bg); font-size: 0.7rem; } -[data-theme="dark"] .todo-badge { - background-color: rgba(255, 255, 255, 0.1); -} - .due-date { display: flex; align-items: center; gap: 0.25rem; } -.due-date.overdue { - color: var(--danger-color, #ef4444); -} - /* --- NOTES VIEW --- */ /* Wrapper */ @@ -219,11 +147,6 @@ body.view-archive .content-container { min-height: 100vh; } -[data-theme="dark"] body.view-notes .content-container, -[data-theme="dark"] body.view-archive .content-container { - background-color: #20293a; -} - /* Tool Bar / Input Area */ .notes-top-bar { display: flex; @@ -234,21 +157,13 @@ body.view-archive .content-container { padding-right: 0; } -.notes-top-bar-inner { - width: 800px; - max-width: 100%; - display: flex; - align-items: flex-start; - gap: 12px; -} - .note-input-container { width: 800px; max-width: 100%; - background-color: var(--background-secondary, #ffffff); - border-radius: 8px; - border: 1px solid #000; - box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.3), 0 2px 6px 2px rgba(60, 64, 67, 0.15); + background-color: var(--special-view-panel-bg); + border-radius: 12px; + border: 1px solid var(--special-view-border); + box-shadow: var(--special-view-shadow); transition: box-shadow 0.2s; overflow: hidden; } @@ -257,28 +172,12 @@ body.view-archive .content-container { max-height: 72vh; } -[data-theme="dark"] .note-input-container { - background-color: #20293a; - border: 1px solid var(--border); - box-shadow: none; -} - .note-input-collapsed { display: flex; align-items: center; padding: 12px 16px; cursor: text; - color: var(--note-card-fg, var(--text-light, #80868b)); - font-weight: 500; - font-size: 1rem; - padding: 12px 16px; - cursor: text; - color: var(--note-card-fg, var(--text-light, #80868b)); - font-weight: 500; - font-size: 1rem; - padding: 12px 16px; - cursor: text; - color: var(--note-card-fg, var(--text-light, #80868b)); + color: var(--special-view-muted); font-weight: 500; font-size: 1rem; } @@ -287,357 +186,15 @@ body.view-archive .content-container { cursor: default; } -.note-input-expanded { - display: flex; - flex-direction: column; - gap: 10px; - padding: 12px 16px 10px; - max-height: 72vh; -} - -.note-input-expanded-actions { - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; - margin-top: 2px; - flex-wrap: wrap; -} - -.note-input-expanded .note-formatting-bar, -.note-modal .note-formatting-bar { - width: 100%; - border-radius: 10px; - padding: 6px 8px; -} - -.todo-draft-expanded { - gap: 8px; -} - -.todo-draft-list { - display: flex; - flex-direction: column; - gap: 6px; - max-height: 42vh; - overflow: auto; - padding-right: 2px; -} - -.todo-draft-row { - display: grid; - grid-template-columns: 26px minmax(0, 1fr) 32px; - gap: 8px; - align-items: center; - padding: 2px 0; - border-radius: 8px; -} - -.todo-draft-row.is-checked { - opacity: 0.75; -} - -.todo-draft-row .todo-item-text { - padding: 5px 4px; - font-size: 0.95rem; - background-color: transparent; - border: none !important; - outline: none !important; - box-shadow: none !important; -} - -[data-theme="dark"] .todo-draft-row .todo-item-text { - background-color: transparent; -} - -.todo-draft-add-btn { - border: none; - background: none; - color: inherit; - opacity: 0.8; - cursor: pointer; - display: inline-flex; - align-items: center; - gap: 8px; - width: fit-content; - border-radius: 8px; - padding: 6px 8px; - margin-left: -2px; -} - -.todo-draft-add-btn:hover { - opacity: 1; - background: rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .todo-draft-add-btn:hover { - background: rgba(255, 255, 255, 0.14); -} - -.note-input-title { - width: 100%; - border: none !important; - outline: none !important; - box-shadow: none !important; - background-color: transparent; - color: inherit; - font-size: 1.05rem; - font-weight: 500; - padding: 0; -} - -[data-theme="dark"] .note-input-title { - background-color: transparent; -} - -.note-input-description-source { - width: 100%; - border: none !important; - outline: none !important; - box-shadow: none !important; - background-color: transparent; - color: inherit; - padding: 0; - resize: none; - min-height: 120px; - max-height: 44vh; - overflow: auto; - display: block; - font-size: 0.95rem; - line-height: 1.5; -} - -.note-input-description-source:focus { - outline: none; -} - -[data-theme="dark"] .note-input-description-source { - border: none !important; - background-color: transparent; -} - -.note-input-container.is-enhanced .note-input-description-source { - display: none; -} - -.note-formatting-bar { - display: none; - align-items: center; - gap: 4px; - padding: 6px 12px; - border-radius: 24px; - background: rgba(0, 0, 0, 0.04); - border: 1px solid rgba(0, 0, 0, 0.08); - width: fit-content; - max-width: 100%; - overflow-x: auto; - margin: 4px 0; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .note-formatting-bar { - background: rgba(255, 255, 255, 0.06); - border-color: rgba(255, 255, 255, 0.12); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.note-formatting-bar.open { - display: inline-flex; - animation: fadeIn 0.15s ease; -} - -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(-4px); - } - - to { - opacity: 1; - transform: translateY(0); - } -} - -.note-format-btn { - appearance: none; - background: transparent; - border: none; - color: inherit; - height: 32px; - min-width: 32px; - padding: 0 8px; - border-radius: 16px; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - font-weight: 600; - font-size: 0.85rem; - opacity: 0.85; - flex: 0 0 auto; - transition: all 0.15s ease; -} - -.note-format-btn:hover { - opacity: 1; - background: rgba(0, 0, 0, 0.08); - transform: scale(1.05); -} - -[data-theme="dark"] .note-format-btn:hover { - background: rgba(255, 255, 255, 0.14); -} - -.note-format-btn:active { - transform: scale(0.95); -} - -.note-format-sep { - width: 1px; - height: 16px; - background: rgba(0, 0, 0, 0.12); - margin: 0 4px; - flex: 0 0 auto; -} - -[data-theme="dark"] .note-format-sep { - background: rgba(255, 255, 255, 0.15); -} - -.note-input-actions-left { - display: flex; - align-items: center; - gap: 2px; - flex-wrap: wrap; -} - -.note-input-actions-left>button { - background: transparent; - border: none; - color: inherit; - opacity: 0.9; - width: 32px; - height: 32px; - border-radius: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - padding: 0; -} - -.note-input-actions-left>button:disabled { - cursor: default; - opacity: 0.35; -} - -.note-input-actions-left>button:hover:not(:disabled) { - opacity: 1; - background: rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .note-input-actions-left>button:hover:not(:disabled) { - background: rgba(255, 255, 255, 0.14); -} - -.note-input-close-btn { - background: transparent; - border: none; - color: inherit; - font-weight: 600; - border-radius: 8px; - padding: 6px 10px; - cursor: pointer; -} - -.note-input-close-btn:hover { - background: rgba(136, 136, 136, 0.1); -} - -[data-theme="dark"] .note-input-close-btn:hover { - background: rgba(255, 255, 255, 0.14); -} - -.note-input-placeholder { - flex: 1; -} - -.note-input-actions { - display: flex; - gap: 16px; -} - -.note-input-type-actions { - gap: 6px; -} - -.note-input-actions button { - background: none; - border: none; - color: inherit; - opacity: 0.9; - width: 32px; - height: 32px; - border-radius: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - padding: 0; - transition: background-color 0.2s, color 0.2s; -} - -.note-input-actions button:hover { - background-color: rgba(136, 136, 136, 0.1); - color: var(--text-color); -} - -[data-theme="dark"] .note-input-actions button:hover { - color: #e8eaed; -} - -/* Tools (View Toggle) */ -.notes-tools { - position: absolute; - right: 0; - top: 50%; - transform: translateY(-50%); - display: flex; - gap: 0.5rem; -} - -.icon-btn { - background: none; - border: none; - cursor: pointer; - color: var(--text-light, #5f6368); - width: 40px; - height: 40px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - transition: background-color 0.2s; -} - .icon-btn:hover { background-color: rgba(136, 136, 136, 0.1); } .icon-btn.active { - color: var(--primary-color, #202124); - background-color: rgba(136, 136, 136, 0.1); + color: var(--primary); + background-color: var(--special-view-chip-bg); } -[data-theme="dark"] .icon-btn { - color: #9aa0a6; -} - -[data-theme="dark"] .icon-btn.active { - color: #e8eaed; -} - -/* --- LOGIC: Masonry vs List --- */ .notes-masonry { column-count: 4; column-gap: 16px; @@ -652,19 +209,18 @@ body.view-archive .content-container { -webkit-column-break-inside: avoid; page-break-inside: avoid; column-span: none; - border-radius: 12px; + border-radius: 14px; overflow: hidden; - border: 1px solid #000; + border: 1px solid var(--special-view-border); + background: var(--special-view-panel-bg); + box-shadow: var(--special-view-shadow); } .note-card { - border-radius: 12px; + border-radius: 14px; overflow: hidden; - border: 1px solid #000; -} - -[data-theme="dark"] .note-card { - border-color: #dedfe2; + border: 1px solid var(--special-view-border); + background: var(--special-view-panel-bg); } .note-card .note-inner { @@ -673,89 +229,6 @@ body.view-archive .content-container { padding-right: 58px; } -.note-pin-corner { - position: absolute; - top: 10px; - right: 10px; - width: auto; - height: auto; - display: inline-flex; - align-items: center; - justify-content: center; - text-decoration: none; - color: var(--note-card-fg, currentColor); - background: transparent; - border: none; - z-index: 4; - opacity: 0.92; - transition: transform 0.15s ease, opacity 0.15s ease, color 0.15s ease; -} - -.note-pin-corner i { - font-size: 1.35rem; -} - -.note-pin-corner:hover { - transform: scale(1.06); - opacity: 1; -} - -.note-pin-corner.active { - color: var(--note-card-fg, currentColor); -} - -[data-theme="dark"] .note-pin-corner { - background: transparent; - border: none; -} - -[data-theme="dark"] .note-pin-corner.active { - color: var(--note-card-fg, currentColor); -} - -@media (max-width: 1200px) { - .notes-masonry { - column-count: 3; - } -} - -@media (max-width: 800px) { - .notes-masonry { - column-count: 2; - } -} - -@media (max-width: 500px) { - .notes-masonry { - column-count: 1; - } -} - -.notes-list-view { - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; - width: 600px; - max-width: 100%; - margin: 0 auto; -} - -.notes-list-view .note-card { - width: 100%; -} - -.note-modal-overlay { - position: fixed; - inset: 0; - display: none; - align-items: center; - justify-content: center; - padding: 24px; - background: rgba(0, 0, 0, 0.55); - z-index: 1000; -} - .note-modal-overlay.open { display: flex; } @@ -764,25 +237,15 @@ body.view-archive .content-container { width: min(720px, 92vw); max-height: 86vh; overflow: hidden; - border-radius: 8px; - background: var(--background-secondary, #ffffff); - border: 1px solid #000; + border-radius: 14px; + background: var(--special-view-panel-bg); + border: 1px solid var(--special-view-border); box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); color: inherit; display: flex; flex-direction: column; } -body.note-modal-open { - overflow: hidden; -} - -[data-theme="dark"] .note-modal { - background: #202124; - border-color: #dedfe2; - box-shadow: 0 14px 28px rgba(0, 0, 0, 0.5), 0 10px 10px rgba(0, 0, 0, 0.4); -} - .note-modal-header { display: flex; align-items: flex-start; @@ -792,94 +255,6 @@ body.note-modal-open { flex-shrink: 0; } -.note-modal .note-title { - font-size: 1.6rem; - line-height: 1.35; - margin: 0; - color: inherit; - font-weight: 500; -} - -.note-modal-title-input { - width: 100%; - border: 0; - outline: none; - background: transparent; - color: inherit; - padding: 0; -} - -.note-modal-content { - flex: 1; - overflow-y: auto; - padding: 6px 20px 10px; -} - -.note-modal-description-preview { - width: 100%; - min-height: 200px; - max-height: 58vh; - overflow: auto; - cursor: text; - padding: 2px 0; -} - -.note-modal-description-source { - width: 100%; - border: none; - background: transparent; - color: inherit; - padding: 2px 0; - resize: none; - min-height: 200px; - max-height: 58vh; - overflow: auto; - outline: none; - display: block; - font-size: 0.95rem; - line-height: 1.5; -} - -.note-modal-description-source:focus { - outline: none; -} - -[data-theme="dark"] .note-modal-description-source { - border: none; -} - -.note-modal-overlay.is-enhanced .note-modal-description-source { - display: none; -} - -.note-modal-overlay .note-modal-description-preview { - display: block; -} - -.note-modal-overlay .note-modal-description-source { - display: none; -} - -.note-modal-overlay.note-modal-editing .note-modal-description-preview { - display: none; -} - -.note-modal-overlay.note-modal-editing .note-modal-description-source { - display: block; -} - -.note-modal .note-body * { - color: inherit; -} - -.note-modal-tags { - display: flex; - flex-wrap: wrap; - gap: 8px; - padding: 0 20px 12px; - flex-shrink: 0; -} - .note-modal-tags.is-empty { display: none; } @@ -888,8 +263,8 @@ body.note-modal-open { display: inline-flex; align-items: center; gap: 0.25rem; - background: var(--tag-bg); - color: var(--tag-text); + background: var(--special-view-chip-bg); + color: var(--special-view-chip-text); border-radius: 999px; padding: 0.25rem 0.5rem; font-size: 0.75rem; @@ -908,7 +283,7 @@ body.note-modal-open { height: 1.1rem; border: none; border-radius: 999px; - background: rgba(0, 0, 0, 0.12); + background: var(--special-view-chip-hover); color: currentColor; cursor: pointer; padding: 0; @@ -916,10 +291,6 @@ body.note-modal-open { font-size: 0.8rem; } -[data-theme="dark"] .note-modal-tags .note-tag-remove-btn { - background: rgba(255, 255, 255, 0.18); -} - .note-modal-actions { display: flex; align-items: center; @@ -931,377 +302,26 @@ body.note-modal-open { flex-wrap: wrap; } -[data-theme="dark"] .note-modal-actions { - background: transparent; -} - -.note-modal-actions-left { - display: flex; - align-items: center; - gap: 2px; - flex-wrap: wrap; -} - -.note-modal-actions-left>button, -.note-modal-actions-left>a, -.note-modal-actions-left>.note-modal-color-picker>button { - background: transparent; - border: none; - color: inherit; - opacity: 0.9; - width: 32px; - height: 32px; - border-radius: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - text-decoration: none; -} - -.note-modal-actions-left>button:hover, -.note-modal-actions-left>a:hover, -.note-modal-actions-left>.note-modal-color-picker>button:hover { - opacity: 1; - background: rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .note-modal-actions-left>button:hover, -[data-theme="dark"] .note-modal-actions-left>a:hover, -[data-theme="dark"] .note-modal-actions-left>.note-modal-color-picker>button:hover { - background: rgba(255, 255, 255, 0.14); -} - -.note-modal-close-btn { - background: transparent; - border: none; - color: inherit; - font-weight: 600; - border-radius: 8px; - padding: 6px 10px; - cursor: pointer; -} - -.note-modal-close-btn:hover { - background: rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .note-modal-close-btn:hover { - background: rgba(255, 255, 255, 0.14); -} - -.note-modal-pin-toggle { - background: transparent; - border: none; - color: inherit; - opacity: 0.85; - width: 34px; - height: 34px; - border-radius: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - flex-shrink: 0; -} - .note-modal-pin-toggle:hover, .note-modal-pin-toggle.active { - opacity: 1; - background-color: rgba(0, 0, 0, 0.08); -} - -[data-theme="dark"] .note-modal-pin-toggle:hover, -[data-theme="dark"] .note-modal-pin-toggle.active { background-color: rgba(255, 255, 255, 0.14); } .note-body { font-size: 0.875rem; line-height: 1.4; - color: var(--text-color, #202124); + color: var(--special-view-strong); word-wrap: break-word; display: block; overflow: hidden; max-height: 360px; } -[data-theme="dark"] .note-body { - color: #e8eaed; -} - .note-body p, .note-modal-content p { margin: 0 0 0.5rem; } -.note-body ul, -.note-body ol, -.note-modal-content ul, -.note-modal-content ol { - margin: 0 0 0.5rem 1.2rem; - padding: 0; -} - -.note-body li, -.note-modal-content li { - margin: 0 0 0.3rem; -} - -.note-body blockquote, -.note-modal-content blockquote { - margin: 0.2rem 0 0.6rem; - padding: 0.2rem 0.75rem; - border-left: 3px solid rgba(0, 0, 0, 0.22); - opacity: 0.9; -} - -[data-theme="dark"] .note-body blockquote, -[data-theme="dark"] .note-modal-content blockquote { - border-left-color: rgba(255, 255, 255, 0.28); -} - -.note-body code, -.note-modal-content code { - font-family: Consolas, "Courier New", monospace; - background: rgba(0, 0, 0, 0.08); - border-radius: 4px; - padding: 0.05rem 0.35rem; - font-size: 0.86em; -} - -[data-theme="dark"] .note-body code, -[data-theme="dark"] .note-modal-content code { - background: rgba(255, 255, 255, 0.12); -} - -.md-code-block { - margin: 0.4rem 0 0.7rem; - background: rgba(0, 0, 0, 0.08); - border-radius: 8px; - overflow: auto; -} - -.md-code-block code { - display: block; - padding: 0.65rem 0.75rem; - background: none; - border-radius: 0; -} - -[data-theme="dark"] .md-code-block { - background: rgba(255, 255, 255, 0.12); -} - -.md-spacer { - height: 0.35rem; -} - -.md-todo-list { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - gap: 0.3rem; -} - -.md-todo-item { - display: flex; - align-items: center; - gap: 0.55rem; -} - -.md-todo-item.is-checked { - opacity: 0.72; -} - -.md-todo-item.is-checked .md-todo-text { - text-decoration: line-through; -} - -.md-todo-box { - width: 15px; - height: 15px; - border: 2px solid currentColor; - border-radius: 4px; - display: inline-flex; - align-items: center; - justify-content: center; - opacity: 0.7; - flex: 0 0 auto; -} - -.md-todo-box i { - font-size: 13px; - opacity: 0; -} - -.md-todo-item.is-checked .md-todo-box i { - opacity: 1; -} - -@media (max-width: 900px) { - .notes-top-bar { - flex-direction: column; - align-items: stretch; - gap: 10px; - } - - .notes-tools { - position: static; - transform: none; - justify-content: flex-end; - width: 100%; - } -} - -/* Tags */ -.note-tags { - display: flex; - flex-wrap: wrap; - gap: 6px; - margin-top: 4px; -} - -.note-tag { - display: inline-flex; - align-items: center; - gap: 0.25rem; - background: var(--tag-bg, #f1f3f4); - padding: 0.25rem 0.5rem; - border-radius: 999px; - font-size: 0.75rem; - font-weight: 500; - color: var(--tag-text, #3c4043); -} - -[data-theme="dark"] .note-tag { - background: var(--tag-bg, #3c4043); - color: var(--tag-text, #e8eaed); -} - -.note-tag-text { - line-height: 1.2; -} - -.note-tag-remove-btn { - display: inline-flex; - align-items: center; - justify-content: center; - width: 1.1rem; - height: 1.1rem; - border: none; - border-radius: 999px; - background: rgba(0, 0, 0, 0.12); - color: currentColor; - cursor: pointer; - padding: 0; - line-height: 1; - font-size: 0.8rem; -} - -[data-theme="dark"] .note-tag-remove-btn { - background: rgba(255, 255, 255, 0.18); -} - -.note-tag:hover, -.note-modal-tags .note-tag:hover { - background: var(--primary); - color: white; -} - -.note-tag:hover .note-tag-remove-btn, -.note-modal-tags .note-tag:hover .note-tag-remove-btn { - background: rgba(255, 255, 255, 0.22); -} - -.note-hover-actions { - display: flex; - align-items: center; - gap: 2px; - margin-top: 12px; - margin-left: -6px; - color: var(--note-card-fg, currentColor); - opacity: 0; - transition: opacity 0.2s cubic-bezier(0.4, 0.0, 0.2, 1); - position: relative; - z-index: 2; - min-height: 34px; -} - -[data-theme="dark"] .note-hover-actions { - color: var(--note-card-fg, currentColor); -} - -/* Show actions on hover */ -.note-card:hover .note-hover-actions { - opacity: 1; -} - -/* Always show actions on touch devices? (Can't detect easily here, but opacity 1 is safer for UX if no hover) */ -@media (hover: none) { - .note-hover-actions { - opacity: 1; - } -} - -.note-hover-actions>button, -.note-hover-actions>a, -.note-hover-actions>div>button { - background: transparent; - border: none; - width: 32px; - height: 32px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - color: inherit; - cursor: pointer; - font-size: 1.15rem; - transition: background-color 0.15s, color 0.15s, opacity 0.15s; - text-decoration: none; - opacity: 0.7; -} - -.note-hover-actions>button:hover, -.note-hover-actions>a:hover, -.note-hover-actions>div>button:hover { - background-color: rgba(0, 0, 0, 0.08); - color: inherit; - opacity: 1; -} - -[data-theme="dark"] .note-hover-actions>button:hover, -[data-theme="dark"] .note-hover-actions>a:hover, -[data-theme="dark"] .note-hover-actions>div>button:hover { - background-color: rgba(255, 255, 255, 0.14); - color: inherit; -} - -.bookmark-palette { - display: inline-flex; - align-items: center; - position: relative; - color: var(--text-muted); -} - -.bookmark-palette>button { - background: none; - border: none; - width: 36px; - height: 36px; - border-radius: 0.375rem; - display: flex; - align-items: center; - justify-content: center; - color: inherit; - cursor: pointer; - font-size: 1.1rem; - transition: background-color 0.2s, color 0.2s; -} - .bookmark-palette>button:hover { background: var(--primary-light); color: var(--primary); @@ -1312,8 +332,8 @@ body.note-modal-open { position: absolute; left: 0; bottom: calc(100% + 8px); - background: var(--background-secondary, #ffffff); - border: 1px solid rgba(0, 0, 0, 0.12); + background: var(--special-view-panel-bg); + border: 1px solid var(--special-view-border); border-radius: 12px; padding: 12px; box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22); @@ -1327,1307 +347,25 @@ body.note-modal-open { -webkit-backdrop-filter: blur(10px); } -[data-theme="dark"] .palette-popup { - background: #202124; - border-color: rgba(255, 255, 255, 0.16); -} - .palette-popup.open { display: block; } -.palette-section { - display: flex; - flex-direction: column; - gap: 10px; -} - -.palette-section-title { - font-size: 0.75rem; - line-height: 1; - font-weight: 600; - letter-spacing: 0.04em; - text-transform: uppercase; - color: rgba(0, 0, 0, 0.62); -} - -[data-theme="dark"] .palette-section-title { - color: rgba(255, 255, 255, 0.72); -} - -.palette-divider { - height: 1px; - background: rgba(0, 0, 0, 0.10); - margin: 10px 0; -} - -[data-theme="dark"] .palette-divider { - background: rgba(255, 255, 255, 0.12); -} - -.palette-row { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - -.palette-row-colors { - flex-wrap: nowrap; - overflow-x: hidden; - overflow-y: hidden; - padding-bottom: 4px; - scrollbar-width: thin; -} - -.palette-row-colors::-webkit-scrollbar { - height: 8px; -} - -.palette-row-colors::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.18); - border-radius: 10px; -} - -[data-theme="dark"] .palette-row-colors::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.18); -} - -.palette-row-backgrounds { - display: grid; - grid-template-columns: repeat(auto-fill, 28px); - gap: 10px; - justify-content: start; -} - -.palette-row+.palette-row { - margin-top: 10px; -} - -.palette-btn { - width: 28px; - height: 28px; - border-radius: 50%; - border: 1px solid rgba(0, 0, 0, 0.18); - cursor: pointer; - padding: 0; - background-position: center bottom; - background-size: cover; - flex: 0 0 auto; - transition: transform 0.12s ease, box-shadow 0.12s ease, border-color 0.12s ease; -} - -[data-theme="dark"] .palette-btn { - border-color: rgba(255, 255, 255, 0.22); -} - -.palette-btn.is-active { - outline: 2px solid var(--primary-color, #2563eb); - outline-offset: 2px; -} - -.palette-btn:hover { - transform: translateY(-1px); - box-shadow: 0 6px 14px rgba(0, 0, 0, 0.18); -} - -[data-theme="dark"] .palette-btn:hover { - box-shadow: 0 8px 18px rgba(0, 0, 0, 0.45); -} - -.palette-btn:focus-visible { - outline: 2px solid var(--primary-color, #2563eb); - outline-offset: 2px; -} - -.palette-btn-bg-none { - display: flex; - align-items: center; - justify-content: center; -} - -.note-modal-color-picker { - position: relative; -} - -.palette-popup.note-modal-palette { - bottom: auto; - top: calc(100% + 8px); -} - -.bg-studio-panel { - position: fixed; - z-index: 1200; - width: min(420px, calc(100vw - 24px)); - border-radius: 20px; - background: rgba(255, 255, 255, 0.92); - border: 1px solid var(--border, #d1d5db); - box-shadow: 0 20px 50px rgba(15, 23, 42, 0.22); - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - color: var(--text-main, #0f172a); - padding: 16px; -} - -[data-theme="dark"] .bg-studio-panel { - background: rgba(31, 37, 41, 0.92); - border-color: #2A3238; - box-shadow: 0 28px 70px rgba(0, 0, 0, 0.55); - color: rgba(255, 255, 255, 0.92); -} - -.bg-studio-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - margin-bottom: 12px; -} - -.bg-studio-title { - font-size: 18px; - font-weight: 600; - letter-spacing: 0.01em; -} - -.bg-studio-close { - width: 34px; - height: 34px; - border-radius: 12px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - color: inherit; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.bg-studio-close:hover { - background: rgba(15, 23, 42, 0.10); -} - -[data-theme="dark"] .bg-studio-close { - border-color: rgba(255, 255, 255, 0.12); - background: rgba(255, 255, 255, 0.06); -} - -[data-theme="dark"] .bg-studio-close:hover { - background: rgba(255, 255, 255, 0.10); -} - -.bg-studio-gallery { - display: grid; - grid-auto-flow: column; - grid-template-rows: repeat(2, 102px); - grid-auto-columns: 84px; - gap: 12px; - overflow-x: auto; - overflow-y: hidden; - padding: 2px 2px 10px; - margin-bottom: 12px; - overscroll-behavior: contain; - scrollbar-width: thin; -} - -.bg-studio-gallery::-webkit-scrollbar { - height: 10px; -} - -.bg-studio-gallery::-webkit-scrollbar-thumb { - background: rgba(15, 23, 42, 0.20); - border-radius: 10px; -} - -[data-theme="dark"] .bg-studio-gallery::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.18); -} - -.bg-studio-thumb { - width: 84px; - height: 72px; - border-radius: 12px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - background-position: center bottom; - background-size: cover; - cursor: pointer; - padding: 0; - position: relative; - transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; - flex: 0 0 auto; - overflow: hidden; - isolation: isolate; -} - -.bg-studio-thumb:hover { - transform: translateY(-2px); - box-shadow: 0 12px 30px rgba(15, 23, 42, 0.28); -} - -.bg-studio-thumb.is-active { - border: 3px solid #3b82f6; - box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.22); -} - -.bg-studio-thumb:focus-visible { - outline: 3px solid rgba(59, 130, 246, 0.9); - outline-offset: 3px; -} - -.bg-studio-thumb-color, -.bg-studio-thumb-solid { - position: absolute; - inset: 0; - border-radius: 12px; -} - -.bg-studio-thumb-solid { - background: linear-gradient(135deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.02)); -} - -.bg-studio-tile { - display: grid; - grid-template-rows: 72px auto; - gap: 6px; - width: 84px; -} - -.bg-studio-thumb-label { - font-size: 0.72rem; - line-height: 1.1; - text-align: center; - color: var(--text-muted, rgba(15, 23, 42, 0.62)); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -[data-theme="dark"] .bg-studio-thumb-label { - color: rgba(255, 255, 255, 0.72); -} - -.bg-studio-rows { - display: grid; - grid-template-columns: 1fr; - gap: 10px; - margin-bottom: 12px; -} - -.bg-studio-row { - display: grid; - grid-template-columns: auto minmax(0, 1fr); - align-items: center; - gap: 12px; -} - -.bg-studio-row-heading { - display: inline-flex; - align-items: center; - gap: 8px; -} - -.bg-studio-row-label { - min-width: 108px; - font-size: 0.9rem; - font-weight: 600; - color: inherit; -} - -.bg-studio-filters { - display: flex; - align-items: center; - gap: 8px; - min-width: 0; - width: 100%; - overflow-x: auto; - overflow-y: hidden; -} - -.bg-studio-filter-btn { - width: 30px; - height: 30px; - border-radius: 8px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - color: inherit; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.bg-studio-filter-btn.is-active { - border-color: rgba(59, 130, 246, 0.9); - color: #60a5fa; -} - -[data-theme="dark"] .bg-studio-filter-btn { - border-color: rgba(255, 255, 255, 0.16); - background: rgba(255, 255, 255, 0.06); -} - -.bg-studio-reset { - width: 28px; - height: 28px; - border-radius: 999px; - border: 1px solid rgba(15, 23, 42, 0.18); - background: linear-gradient(180deg, #ffffff, #f3f4f6); - color: #111827; - font-size: 0.82rem; - font-weight: 600; - cursor: pointer; - box-shadow: 0 1px 2px rgba(15, 23, 42, 0.16); - transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.bg-studio-reset i { - font-size: 16px; - color: inherit; -} - -.bg-studio-reset:hover { - border-color: rgba(59, 130, 246, 0.5); - background: linear-gradient(180deg, #ffffff, #e9eefb); - box-shadow: 0 6px 14px rgba(59, 130, 246, 0.2); - transform: translateY(-1px); -} - -.bg-studio-reset:focus-visible { - outline: 2px solid rgba(59, 130, 246, 0.9); - outline-offset: 2px; -} - -[data-theme="dark"] .bg-studio-reset { - border-color: rgba(255, 255, 255, 0.2); - background: linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.08)); - color: rgba(255, 255, 255, 0.92); - box-shadow: none; -} - -[data-theme="dark"] .bg-studio-reset:hover { - border-color: rgba(96, 165, 250, 0.65); - background: linear-gradient(180deg, rgba(96, 165, 250, 0.26), rgba(96, 165, 250, 0.16)); - box-shadow: 0 8px 16px rgba(2, 6, 23, 0.45); -} - -.bg-studio-search { - display: flex; - align-items: center; - gap: 10px; - width: 100%; - padding: 10px 12px; - border-radius: 14px; - border: 1px solid var(--border, rgba(15, 23, 42, 0.16)); - background: rgba(15, 23, 42, 0.05); - margin-bottom: 12px; - transition: border-color 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease; -} - -.bg-studio-search:focus-within { - border-color: rgba(59, 130, 246, 0.55); - box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18); -} - -.bg-studio-search i { - color: var(--text-muted, rgba(15, 23, 42, 0.62)); -} - -.bg-studio-search-input { - flex: 1; - border: 0 !important; - background: transparent !important; - box-shadow: none !important; - border-radius: 0; - color: inherit; - outline: none; - font-size: 0.95rem; - -webkit-appearance: none; - appearance: none; - caret-color: currentColor; -} - -.bg-studio-search-input:focus, -.bg-studio-search-input:focus-visible { - outline: none; - box-shadow: none; -} - -.bg-studio-search-input::-webkit-search-cancel-button { - -webkit-appearance: none; - appearance: none; -} - -.bg-studio-search-input::placeholder { - color: var(--text-muted, rgba(15, 23, 42, 0.52)); -} - -[data-theme="dark"] .bg-studio-search { - border-color: rgba(255, 255, 255, 0.18); - background: rgba(255, 255, 255, 0.08); -} - -[data-theme="dark"] .bg-studio-search:focus-within { - border-color: rgba(96, 165, 250, 0.75); - background: rgba(15, 23, 42, 0.34); - box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.2); -} - -[data-theme="dark"] .bg-studio-search i { - color: rgba(255, 255, 255, 0.82); -} - -[data-theme="dark"] .bg-studio-search-input { - color: rgba(255, 255, 255, 0.95); -} - -[data-theme="dark"] .bg-studio-search-input::placeholder { - color: rgba(255, 255, 255, 0.62); -} - -.bg-studio-clear { - width: 28px; - height: 28px; - border-radius: 999px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - color: inherit; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; -} - -[data-theme="dark"] .bg-studio-clear { - border-color: rgba(255, 255, 255, 0.16); - background: rgba(255, 255, 255, 0.06); -} - -.spacer { - flex: 1; -} - -/* Pushes action buttons to left/right if needed, currently all left? Keep aligns left mostly. */ - -.note-body img { - max-width: 100%; - height: auto; - border-radius: 4px; - margin-top: 4px; - /* If we extracted cover, hide first img? */ -} - -/* --- COLORS --- */ -/* Reference: Keep Colors */ -/* Default */ -.note-card.note-color-default { - background-color: var(--bg-body); - border-color: #000; - --note-card-fg: var(--text-main, #111827); -} - -[data-theme="dark"] .note-card.note-color-default { - background-color: #20293a; - border-color: #dedfe2; - --note-card-fg: #dbe7ff; -} - -/* Red */ -.note-card.note-color-red { - background-color: #f28b82; - border-color: transparent; - --note-card-fg: #2f1714; -} - -[data-theme="dark"] .note-card.note-color-red { - background-color: #f28b82; - border-color: transparent; - --note-card-fg: #2f1714; -} - -/* Orange */ -.note-card.note-color-orange { - background-color: #fbbc04; - border-color: transparent; - --note-card-fg: #3d2a00; -} - -[data-theme="dark"] .note-card.note-color-orange { - background-color: #fbbc04; - border-color: transparent; - --note-card-fg: #3d2a00; -} - -/* Yellow */ -.note-card.note-color-yellow { - background-color: #fff475; - border-color: transparent; - --note-card-fg: #383100; -} - -[data-theme="dark"] .note-card.note-color-yellow { - background-color: #fff475; - border-color: transparent; - --note-card-fg: #383100; -} - -/* Green */ -.note-card.note-color-green { - background-color: #ccff90; - border-color: transparent; - --note-card-fg: #203400; -} - -[data-theme="dark"] .note-card.note-color-green { - background-color: #ccff90; - border-color: transparent; - --note-card-fg: #203400; -} - -/* Teal */ -.note-card.note-color-teal { - background-color: #a7ffeb; - border-color: transparent; - --note-card-fg: #08342d; -} - -[data-theme="dark"] .note-card.note-color-teal { - background-color: #a7ffeb; - border-color: transparent; - --note-card-fg: #08342d; -} - -/* Blue */ -.note-card.note-color-blue { - background-color: #cbf0f8; - border-color: transparent; - --note-card-fg: #113541; -} - -[data-theme="dark"] .note-card.note-color-blue { - background-color: #cbf0f8; - border-color: transparent; - --note-card-fg: #113541; -} - -/* Dark Blue */ -.note-card.note-color-darkblue { - background-color: #aecbfa; - border-color: transparent; - --note-card-fg: #102645; -} - -[data-theme="dark"] .note-card.note-color-darkblue { - background-color: #aecbfa; - border-color: transparent; - --note-card-fg: #102645; -} - -/* Purple */ -.note-card.note-color-purple { - background-color: #d7aefb; - border-color: transparent; - --note-card-fg: #2f1845; -} - -[data-theme="dark"] .note-card.note-color-purple { - background-color: #d7aefb; - border-color: transparent; - --note-card-fg: #2f1845; -} - -/* Pink */ -.note-card.note-color-pink { - background-color: #fdcfe8; - border-color: transparent; - --note-card-fg: #4a1d34; -} - -[data-theme="dark"] .note-card.note-color-pink { - background-color: #fdcfe8; - border-color: transparent; - --note-card-fg: #4a1d34; -} - -/* Brown */ -.note-card.note-color-brown { - background-color: #e6c9a8; - border-color: transparent; - --note-card-fg: #3c2714; -} - -[data-theme="dark"] .note-card.note-color-brown { - background-color: #e6c9a8; - border-color: transparent; - --note-card-fg: #3c2714; -} - -/* Grey */ -.note-card.note-color-grey { - background-color: #e8eaed; - border-color: transparent; - --note-card-fg: #2a2d31; -} - -.note-card.note-has-bg, -.note-modal.note-has-bg, -.note-input-container.note-has-bg, -.link-outer.note-has-bg { - background-image: linear-gradient(rgba(0, 0, 0, 0.16), rgba(0, 0, 0, 0.16)), var(--note-bg-image); - background-size: cover; - background-position: center bottom; -} - -.note-card.todo-card.note-has-bg[data-font-color="auto"] { - --note-card-fg: rgba(255, 255, 255, 0.92); - color: var(--note-card-fg); - background-image: linear-gradient(rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.42)), var(--note-bg-image); - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55); - background-image: linear-gradient(rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.42)), var(--note-bg-image); - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55); -} - -.note-card .note-title, -.note-card .note-body, -.note-card .note-tag, .note-card .note-hover-actions button, .note-card .note-hover-actions a { color: inherit; } .note-card[class*="note-color-"] { - color: var(--note-card-fg, #202124); - border: 1px solid #000; + color: var(--note-card-fg, var(--special-view-strong)); + border: 1px solid var(--special-view-border); } -[data-theme="dark"] .note-card[class*="note-color-"] { - border: 1px solid #dedfe2; -} - -.link-outer { - color: var(--note-card-fg, inherit); -} - -.link-outer .link-title, -.link-outer .link-description { - color: var(--note-card-fg, inherit); -} - -/* --- NOTES: Vue Masonry/Grid (multi-colonnes, largeur variable) --- */ -.notes-masonry .note-card.note-has-bg { - /* Les cartes masonry ont des largeurs variables selon les breakpoints: - - >1200px: ~25% (4 colonnes) - - 800-1200px: ~33% (3 colonnes) - - 500-800px: ~50% (2 colonnes) - - <500px: 100% (1 colonne) - On utilise 'cover' avec un focus sur le centre pour garder l'essentiel visible */ - background-size: cover; - background-position: center bottom; - /* Pour les petites cartes en masonry, on s'assure que l'image couvre bien */ - min-height: 120px; -} - -/* --- NOTES: Vue Liste (600px max, centré) --- */ -.notes-list-view .note-card.note-has-bg { - /* Vue liste: largeur fixe de 600px, cards plus larges qu'en masonry - On peut utiliser cover mais avec une position légèrement ajustée */ - background-size: cover; - background-position: center bottom; - /* Les cards en liste sont souvent plus hautes, on adapte */ - min-height: 100px; -} - -/* --- NOTES: Modal (min(720px, 92vw)) --- */ -.note-modal.note-has-bg { - /* Modal plus large (jusqu'à 720px), on privilégie une couverture complète - avec une légère obscurcissement pour la lisibilité du texte */ - background-size: cover; - background-position: center bottom; - /* L'overlay gradient est déjà présent dans la règle de base */ -} - -/* --- BOOKMARKS: Vue Grid (minmax(320px, 1fr)) --- */ -.view-grid .link-outer.note-has-bg { - /* Grid bookmarks: cards de minimum 320px, layout en grille - Les cards sont généralement carrées ou rectangulaires selon le contenu */ - background-size: cover; - background-position: center bottom; - /* S'assurer que le background couvre bien la card avec le padding existant */ - background-origin: padding-box; -} - -/* --- BOOKMARKS: Vue Liste (1 colonne, thumbnail latéral) --- */ -.view-list .link-outer.note-has-bg { - /* List view: cards en pleine largeur avec layout flex et thumbnail de 300px - On ajuste pour que le background couvre toute la hauteur malgré le thumbnail */ - background-size: cover; - background-position: center bottom; - /* Le thumbnail a son propre mask gradient, on s'assure que le background - couvre bien toute la card derrière le contenu */ - background-origin: padding-box; -} - -/* --- BOOKMARKS: Vue Compact (liste dense, pas de thumbnail) --- */ -.view-compact .link-outer.note-has-bg { - /* Compact view: cards très compactes sans thumbnail, hauteur réduite (~60px) - On utilise contain ou une taille spécifique pour éviter que l'image - soit trop étirée sur une si petite hauteur */ - background-size: 200% auto; - background-position: center bottom; - /* Réduire l'opacité du gradient pour plus de visibilité sur petites cards */ - background-image: linear-gradient(rgba(0, 0, 0, 0.08), rgba(0, 0, 0, 0.08)), var(--note-bg-image); -} - -/* Responsive: sur petits écrans, ajuster les backgrounds */ -@media (max-width: 768px) { - - /* En mobile, les cards sont plus étroites, on ajuste */ - .notes-masonry .note-card.note-has-bg, - .view-grid .link-outer.note-has-bg { - background-size: cover; - background-position: center bottom; - } - - /* Vue liste en mobile: thumbnail passe en haut */ - .view-list .link-outer.note-has-bg { - background-size: cover; - background-position: center bottom; - } -} - -/* ========================================= - Note Filter Effects (8 CSS filters) - ========================================= */ - -/* 1. Glassmorphism - Effet verre givré */ -.note-card.note-filter-glass, -.note-modal.note-filter-glass, -.link-outer.note-filter-glass { - background: rgba(255, 255, 255, 0.25) !important; - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); -} - -[data-theme="dark"] .note-card.note-filter-glass, -[data-theme="dark"] .note-modal.note-filter-glass, -[data-theme="dark"] .link-outer.note-filter-glass { - background: rgba(0, 0, 0, 0.35) !important; - border: 1px solid rgba(255, 255, 255, 0.15); -} - -/* 2. Vignette - Coins sombres */ -.note-card.note-filter-vignette::after, -.note-modal.note-filter-vignette::after, -.link-outer.note-filter-vignette::after { - content: ""; - position: absolute; - inset: 0; - border-radius: inherit; - pointer-events: none; - background: radial-gradient(circle, transparent 50%, rgba(0, 0, 0, 0.4) 100%); - z-index: 1; -} - -.note-card.note-filter-vignette, -.note-modal.note-filter-vignette, -.link-outer.note-filter-vignette { - position: relative; -} - -/* 3. Ligné - Papier ligné */ -.note-card.note-filter-lined, -.note-modal.note-filter-lined, -.link-outer.note-filter-lined { - background-image: repeating-linear-gradient(transparent, - transparent 29px, - rgba(0, 0, 0, 0.1) 30px) !important; -} - -[data-theme="dark"] .note-card.note-filter-lined, -[data-theme="dark"] .note-modal.note-filter-lined, -[data-theme="dark"] .link-outer.note-filter-lined { - background-image: repeating-linear-gradient(transparent, - transparent 29px, - rgba(255, 255, 255, 0.1) 30px) !important; -} - -/* 4. Quadrillé - Grid */ -.note-card.note-filter-grid, -.note-modal.note-filter-grid, -.link-outer.note-filter-grid { - background-image: - linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px), - linear-gradient(90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) !important; - background-size: 20px 20px !important; -} - -[data-theme="dark"] .note-card.note-filter-grid, -[data-theme="dark"] .note-modal.note-filter-grid, -[data-theme="dark"] .link-outer.note-filter-grid { - background-image: - linear-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1px), - linear-gradient(90deg, rgba(255, 255, 255, 0.1) 1px, transparent 1px) !important; -} - -/* 5. Noise - Texture granuleuse */ -.note-card.note-filter-noise, -.note-modal.note-filter-noise, -.link-outer.note-filter-noise { - position: relative; -} - -.note-card.note-filter-noise::before, -.note-modal.note-filter-noise::before, -.link-outer.note-filter-noise::before { - content: ""; - position: absolute; - inset: 0; - border-radius: inherit; - pointer-events: none; - opacity: 0.5; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); - mix-blend-mode: overlay; - z-index: 1; -} - -/* 6. Points - Bullet journal dotted */ -.note-card.note-filter-dots, -.note-modal.note-filter-dots, -.link-outer.note-filter-dots { - background-image: radial-gradient(rgba(0, 0, 0, 0.2) 1px, transparent 1px) !important; - background-size: 20px 20px !important; -} - -[data-theme="dark"] .note-card.note-filter-dots, -[data-theme="dark"] .note-modal.note-filter-dots, -[data-theme="dark"] .link-outer.note-filter-dots { - background-image: radial-gradient(rgba(255, 255, 255, 0.2) 1px, transparent 1px) !important; -} - -/* 7. Rayures - Stripes diagonales */ -.note-card.note-filter-stripes, -.note-modal.note-filter-stripes, -.link-outer.note-filter-stripes { - background-image: repeating-linear-gradient(45deg, - transparent, - transparent 10px, - rgba(0, 0, 0, 0.05) 10px, - rgba(0, 0, 0, 0.05) 20px) !important; -} - -[data-theme="dark"] .note-card.note-filter-stripes, -[data-theme="dark"] .note-modal.note-filter-stripes, -[data-theme="dark"] .link-outer.note-filter-stripes { - background-image: repeating-linear-gradient(45deg, - transparent, - transparent 10px, - rgba(255, 255, 255, 0.05) 10px, - rgba(255, 255, 255, 0.05) 20px) !important; -} - -/* ========================================= - Filter-specific row layout for palette - ========================================= */ -.palette-row-filters { - display: grid; - grid-template-columns: repeat(4, 28px); - gap: 10px; - justify-content: start; -} - -.palette-btn-filter, -.palette-btn-filter-none { - display: flex; - align-items: center; - justify-content: center; - background: rgba(15, 23, 42, 0.05); -} - -.palette-btn-filter i, -.palette-btn-filter-none i { - font-size: 1rem; - color: var(--text-color, #334155); -} - -[data-theme="dark"] .palette-btn-filter, -[data-theme="dark"] .palette-btn-filter-none { - background: rgba(255, 255, 255, 0.1); -} - -[data-theme="dark"] .palette-btn-filter i, -[data-theme="dark"] .palette-btn-filter-none i { - color: #e8eaed; -} - -/* ========================================= - Custom Color Picker Panel - ========================================= */ -.color-picker-panel { - position: fixed; - z-index: 1300; - width: min(320px, calc(100vw - 24px)); - border-radius: 20px; - background: rgba(255, 255, 255, 0.95); - border: 1px solid var(--border, #d1d5db); - box-shadow: 0 20px 60px rgba(15, 23, 42, 0.35); - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); - color: var(--text-main, #0f172a); - padding: 20px; - display: none; -} - -.color-picker-panel.open { - display: block; -} - -[data-theme="dark"] .color-picker-panel { - background: rgba(31, 37, 41, 0.95); - border-color: #2A3238; - box-shadow: 0 28px 80px rgba(0, 0, 0, 0.65); - color: rgba(255, 255, 255, 0.95); -} - -.color-picker-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - margin-bottom: 16px; -} - -.color-picker-title { - font-size: 16px; - font-weight: 600; - letter-spacing: 0.01em; -} - -.color-picker-close { - width: 32px; - height: 32px; - border-radius: 10px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - color: inherit; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - transition: background 0.15s ease; -} - -.color-picker-close:hover { - background: rgba(15, 23, 42, 0.12); -} - -[data-theme="dark"] .color-picker-close { - border-color: rgba(255, 255, 255, 0.16); - background: rgba(255, 255, 255, 0.08); -} - -[data-theme="dark"] .color-picker-close:hover { - background: rgba(255, 255, 255, 0.14); -} - -.color-picker-body { - display: flex; - flex-direction: column; - gap: 16px; -} - -.color-picker-gradient { - width: 100%; - height: 140px; - border-radius: 12px; - overflow: hidden; - position: relative; - border: 1px solid rgba(15, 23, 42, 0.12); -} - -[data-theme="dark"] .color-picker-gradient { - border-color: rgba(255, 255, 255, 0.12); -} - -.color-picker-gradient-inner { - width: 100%; - height: 100%; - position: relative; - background: linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(210, 100%, 50%)); - cursor: crosshair; -} - -.color-picker-cursor { - position: absolute; - width: 16px; - height: 16px; - border: 2px solid white; - border-radius: 50%; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4), inset 0 0 0 1px rgba(0, 0, 0, 0.2); - transform: translate(-50%, -50%); - pointer-events: none; -} - -.color-picker-hue { - width: 100%; -} - -.color-picker-hue-slider { - width: 100%; - height: 12px; - border-radius: 6px; - -webkit-appearance: none; - appearance: none; - background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); - outline: none; - cursor: pointer; -} - -.color-picker-hue-slider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 18px; - height: 18px; - border-radius: 50%; - background: white; - border: 2px solid rgba(15, 23, 42, 0.3); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); - cursor: pointer; -} - -.color-picker-hue-slider::-moz-range-thumb { - width: 18px; - height: 18px; - border-radius: 50%; - background: white; - border: 2px solid rgba(15, 23, 42, 0.3); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); - cursor: pointer; -} - -.color-picker-preview-row { - display: flex; - align-items: center; - gap: 12px; -} - -.color-picker-preview { - width: 48px; - height: 48px; - border-radius: 12px; - border: 1px solid rgba(15, 23, 42, 0.12); - background: #3b82f6; - flex-shrink: 0; -} - -[data-theme="dark"] .color-picker-preview { - border-color: rgba(255, 255, 255, 0.12); -} - -.color-picker-inputs { - flex: 1; -} - -.color-picker-input-group { - display: flex; - flex-direction: column; - gap: 4px; -} - -.color-picker-input-group label { - font-size: 11px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.04em; - color: rgba(15, 23, 42, 0.6); -} - -[data-theme="dark"] .color-picker-input-group label { - color: rgba(255, 255, 255, 0.6); -} - -.color-picker-input-group input { - width: 100%; - padding: 8px 12px; - border-radius: 8px; - border: 1px solid rgba(15, 23, 42, 0.16); - background: rgba(15, 23, 42, 0.05); - color: inherit; - font-size: 14px; - font-family: monospace; - text-transform: uppercase; - outline: none; - transition: border-color 0.15s ease; -} - -.color-picker-input-group input:focus { - border-color: #3b82f6; -} - -[data-theme="dark"] .color-picker-input-group input { - border-color: rgba(255, 255, 255, 0.16); - background: rgba(255, 255, 255, 0.08); -} - -.color-picker-footer { - display: flex; - justify-content: flex-end; - gap: 8px; - margin-top: 16px; - padding-top: 16px; - border-top: 1px solid rgba(15, 23, 42, 0.1); -} - -[data-theme="dark"] .color-picker-footer { - border-color: rgba(255, 255, 255, 0.12); -} - -.color-picker-btn { - padding: 8px 16px; - border-radius: 8px; - font-size: 13px; - font-weight: 600; - cursor: pointer; - transition: all 0.15s ease; - border: none; -} - -.color-picker-btn-secondary { - background: rgba(15, 23, 42, 0.08); - color: inherit; -} - -.color-picker-btn-secondary:hover { - background: rgba(15, 23, 42, 0.14); -} - -[data-theme="dark"] .color-picker-btn-secondary { - background: rgba(255, 255, 255, 0.1); -} - -[data-theme="dark"] .color-picker-btn-secondary:hover { - background: rgba(255, 255, 255, 0.16); -} - -.color-picker-btn-primary { - background: #3b82f6; - color: white; -} - -.color-picker-btn-primary:hover { - background: #2563eb; -} - -/* ========================================= - Smaller swatches for Colors and Font sections - ========================================= */ -.bg-studio-swatches { - display: grid; - grid-template-columns: repeat(6, 22px); - grid-auto-rows: 22px; - gap: 6px; - min-width: 0; - width: 100%; - overflow: hidden; -} - -.bg-studio-swatch { - width: 22px; - height: 22px; - border-radius: 999px; - border: 1px solid rgba(15, 23, 42, 0.22); - cursor: pointer; - padding: 0; - transition: transform 0.12s ease, box-shadow 0.12s ease; - flex: 0 0 auto; - display: inline-flex; - align-items: center; - justify-content: center; -} - -.bg-studio-swatch i { - font-size: 14px; - color: rgba(15, 23, 42, 0.6); - pointer-events: none; -} - -[data-theme="dark"] .bg-studio-swatch i { - color: rgba(255, 255, 255, 0.7); -} - -.bg-studio-swatch:hover { - transform: scale(1.12); - box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3); -} - -.bg-studio-swatch.is-active { - border: 2px solid rgba(255, 255, 255, 0.95); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); -} - -.bg-studio-swatch-custom { - background: linear-gradient(135deg, rgba(15, 23, 42, 0.08), rgba(15, 23, 42, 0.04)); -} - -[data-theme="dark"] .bg-studio-swatch-custom { - background: linear-gradient(135deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.06)); -} - -.bg-studio-swatch-custom:hover { - background: linear-gradient(135deg, rgba(59, 130, 246, 0.15), rgba(59, 130, 246, 0.08)); -} - -[data-theme="dark"] .bg-studio-swatch { - border-color: rgba(255, 255, 255, 0.28); -} - -/* Font swatches - slightly smaller */ -.bg-studio-swatches-font { - grid-template-columns: repeat(6, 20px); - grid-auto-rows: 20px; - gap: 5px; -} - -.bg-studio-swatches-font .bg-studio-swatch { - width: 20px; - height: 20px; -} - -.bg-studio-swatches-font .bg-studio-swatch i { - font-size: 12px; -} - -/* Custom note color style */ -.note-card.note-color-custom, -.note-modal.note-color-custom { - border-color: #000; -} - -[data-theme="dark"] .note-card.note-color-custom, -[data-theme="dark"] .note-modal.note-color-custom { - border-color: #dedfe2; -} - -/* Ensure Font section is properly sized */ -.bg-studio-row { - display: grid; - grid-template-columns: auto minmax(0, 1fr); - align-items: center; - gap: 10px; -} - -/* --- ARCHIVE VIEW --- */ /* Ensure archive view uses same background as notes view */ body.view-archive .content-container { background-color: var(--bg-body) !important; } -[data-theme="dark"] body.view-archive .content-container { - background-color: #20293a !important; -} - /* Archive Title */ .archive-title-container { text-align: center; @@ -2637,7 +375,7 @@ body.view-archive .content-container { .archive-title { font-size: 1.75rem; font-weight: 600; - color: var(--text-color, #202124); + color: var(--special-view-strong); margin: 0; display: flex; align-items: center; @@ -2647,23 +385,15 @@ body.view-archive .content-container { .archive-title i { font-size: 1.5rem; - color: var(--primary-color, #2563eb); -} - -[data-theme="dark"] .archive-title { - color: #e8eaed; + color: var(--primary); } .archive-subtitle { font-size: 0.875rem; - color: var(--text-light, #5f6368); + color: var(--special-view-muted); margin: 0.25rem 0 0 0; } -[data-theme="dark"] .archive-subtitle { - color: #9aa0a6; -} - /* Archive top bar adjustments */ .archive-top-bar { flex-direction: column; diff --git a/shaarli-pro/css/style.css b/shaarli-pro/css/style.css index 4cffe72..f566b80 100644 --- a/shaarli-pro/css/style.css +++ b/shaarli-pro/css/style.css @@ -49,6 +49,12 @@ --overlay-bg: rgba(0, 0, 0, 0.5); --selection-bg: rgba(239, 68, 68, 0.15); --selection-border: #ef4444; + + --surface-frosted: color-mix(in srgb, var(--bg-card) 85%, transparent); + --surface-soft: color-mix(in srgb, var(--bg-card) 92%, var(--bg-body)); + --chip-border-color: color-mix(in srgb, var(--primary) 30%, transparent); + --chip-hover-bg: color-mix(in srgb, var(--primary) 18%, transparent); + --focus-ring-color: color-mix(in srgb, var(--primary) 35%, transparent); } [data-theme="dark"] { @@ -89,6 +95,13 @@ --overlay-bg: rgba(0, 0, 0, 0.7); --selection-bg: rgba(239, 68, 68, 0.25); + --selection-border: #ef4444; + + --surface-frosted: color-mix(in srgb, var(--bg-card) 85%, transparent); + --surface-soft: color-mix(in srgb, var(--bg-card) 92%, #0a0f1e); + --chip-border-color: color-mix(in srgb, var(--primary) 45%, transparent); + --chip-hover-bg: color-mix(in srgb, var(--primary) 28%, transparent); + --focus-ring-color: color-mix(in srgb, var(--primary) 45%, transparent); } /* ===== Reset & Base ===== */ @@ -3345,7 +3358,7 @@ select:focus { } .page-edit .bookmark-editor-sublabel a { - color: #8fb8ff; + color: color-mix(in srgb, var(--primary) 70%, #ffffff); } .page-edit .toastui-editor-defaultUI, @@ -3353,31 +3366,24 @@ select:focus { .page-edit .toastui-editor-ww-container, .page-edit .toastui-editor-toolbar, .page-edit .toastui-editor-mode-switch { - background: var(--bookmark-input-bg); -} - -.page-edit .toastui-editor-defaultUI { - border: 0; + background: var(--toastui-panel-surface); + color: var(--bookmark-text-main); + border-color: var(--toastui-border); } .page-edit .toastui-editor-toolbar { - border-bottom: 1px solid var(--bookmark-input-border); + border-bottom: 1px solid var(--toastui-border); + box-shadow: inset 0 -1px 0 var(--toastui-border); } .page-edit .toastui-editor-toolbar button { - border: 0; - background-color: transparent; - box-shadow: none; + color: var(--bookmark-text-main); } .page-edit .toastui-editor-toolbar button:hover, .page-edit .toastui-editor-toolbar button.active, .page-edit .toastui-editor-toolbar button:focus-visible { - background-color: rgba(126, 168, 255, 0.16); -} - -.page-edit .toastui-editor-toolbar-margin { - margin-bottom: 0.5rem; + background-color: var(--toastui-tab-hover); } .page-edit .toastui-editor-toolbar-icons { @@ -3385,7 +3391,7 @@ select:focus { } .page-edit .toastui-editor-toolbar-divider { - background-color: var(--bookmark-input-border); + background-color: var(--toastui-border); } .page-edit .toastui-editor-mode-switch .tab-item { @@ -3394,167 +3400,14 @@ select:focus { .page-edit .toastui-editor-md-tab-container, .page-edit .toastui-editor-mode-switch { - border-top: 1px solid var(--bookmark-input-border); + border-top: 1px solid var(--toastui-border); } -[data-theme="dark"] .page-add .toastui-editor-defaultUI, -[data-theme="dark"] .page-add .toastui-editor-md-container, -[data-theme="dark"] .page-add .toastui-editor-ww-container, -[data-theme="dark"] .page-edit .toastui-editor-defaultUI, -[data-theme="dark"] .page-edit .toastui-editor-md-container, -[data-theme="dark"] .page-edit .toastui-editor-ww-container { - background: var(--toastui-panel-surface, #0a1429) !important; - color: var(--bookmark-text-main, var(--text-main)) !important; - border-color: var(--toastui-border, #1f3560) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar, -[data-theme="dark"] .page-add .toastui-editor-mode-switch, -[data-theme="dark"] .page-edit .toastui-editor-toolbar, -[data-theme="dark"] .page-edit .toastui-editor-mode-switch { - background: var(--toastui-toolbar-bg, linear-gradient(180deg, rgba(28, 49, 86, 0.95) 0%, rgba(14, 26, 47, 0.96) 100%)) !important; - border-color: var(--toastui-border, #1f3560) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar, -[data-theme="dark"] .page-edit .toastui-editor-toolbar { - border-bottom: 1px solid var(--toastui-border, #1f3560) !important; - box-shadow: inset 0 -1px 0 rgba(9, 12, 23, 0.6) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-md-tab-container, -[data-theme="dark"] .page-add .toastui-editor-mode-switch, -[data-theme="dark"] .page-edit .toastui-editor-md-tab-container, -[data-theme="dark"] .page-edit .toastui-editor-mode-switch { - border-top: 1px solid var(--toastui-border, #1f3560) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-mode-switch .tab-item, -[data-theme="dark"] .page-edit .toastui-editor-mode-switch .tab-item { - background: transparent !important; - color: var(--bookmark-text-muted, var(--text-secondary)) !important; - border-radius: 6px; - padding: 0.45rem 0.8rem; - transition: background-color 0.2s ease, color 0.2s ease; -} - -[data-theme="dark"] .page-add .toastui-editor-mode-switch .tab-item.active, -[data-theme="dark"] .page-add .toastui-editor-mode-switch .tab-item.selected, -[data-theme="dark"] .page-edit .toastui-editor-mode-switch .tab-item.active, -[data-theme="dark"] .page-edit .toastui-editor-mode-switch .tab-item.selected { - background: var(--toastui-tab-hover, rgba(112, 160, 255, 0.24)) !important; - color: var(--bookmark-text-main, var(--text-main)) !important; - box-shadow: 0 4px 18px rgba(23, 40, 72, 0.55); -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button { - color: #e2e9ff !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button:hover, -[data-theme="dark"] .page-add .toastui-editor-toolbar button.active, -[data-theme="dark"] .page-add .toastui-editor-toolbar button:focus-visible, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button:hover, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button.active, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button:focus-visible { - background-color: rgba(118, 164, 255, 0.26) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button:hover .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-add .toastui-editor-toolbar button.active .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-add .toastui-editor-toolbar button:focus-visible .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button:hover .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button.active .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button:focus-visible .toastui-editor-toolbar-icons { - opacity: 1 !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-icons, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-icons { - opacity: 0.85 !important; - filter: none !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-icons::before, -[data-theme="dark"] .page-add .toastui-editor-toolbar-icons::after, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-icons::before, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-icons::after { - filter: none !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button.toastui-editor-toolbar-icons, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button.toastui-editor-toolbar-icons { - filter: none !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button svg, -[data-theme="dark"] .page-add .toastui-editor-toolbar button svg *, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button svg, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button svg * { - fill: rgba(255, 255, 255, 0.85) !important; - stroke: rgba(255, 255, 255, 0.85) !important; - opacity: 1 !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-divider, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-divider { - background-color: rgba(255, 255, 255, 0.12) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar *, -[data-theme="dark"] .page-edit .toastui-editor-toolbar * { - background-color: transparent; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-group, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-group { - background: transparent !important; - border-color: rgba(255, 255, 255, 0.12) !important; - box-shadow: none !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-group:not(:last-child), -[data-theme="dark"] .page-edit .toastui-editor-toolbar-group:not(:last-child) { - border-right-color: rgba(255, 255, 255, 0.12) !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar-item, -[data-theme="dark"] .page-edit .toastui-editor-toolbar-item { - background-color: transparent !important; - border-color: transparent !important; - box-shadow: none !important; -} - -[data-theme="dark"] .page-add .toastui-editor-toolbar button, -[data-theme="dark"] .page-edit .toastui-editor-toolbar button { - background-color: transparent !important; - border-color: transparent !important; -} - -[data-theme="dark"] .page-add .toastui-editor-contents, -[data-theme="dark"] .page-add .toastui-editor-contents *, -[data-theme="dark"] .page-edit .toastui-editor-contents, -[data-theme="dark"] .page-edit .toastui-editor-contents * { - color: var(--bookmark-text-main, var(--text-main)) !important; -} - -.page-edit .bookmark-tags-input { - min-height: 48px; - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 0.5rem; - padding: 0.5rem; - border-radius: 12px; - border: 1px solid var(--bookmark-input-border); - background: var(--bookmark-input-bg); - transition: border-color 0.2s ease, box-shadow 0.2s ease; -} - -.page-edit .bookmark-tags-input:focus-within { - border-color: var(--bookmark-input-focus); - box-shadow: 0 0 0 3px var(--bookmark-input-focus-ring); +.page-edit .toastui-editor-mode-switch .tab-item.active, +.page-edit .toastui-editor-mode-switch .tab-item.selected { + background: var(--toastui-tab-hover); + color: var(--bookmark-text-main); + box-shadow: 0 4px 18px var(--toastui-border); } .page-edit .bookmark-tags-list { @@ -3570,7 +3423,7 @@ select:focus { height: 34px; padding: 0 0.4rem 0 0.8rem; border-radius: 999px; - border: 1px solid rgba(191, 203, 255, 0.12); + border: 1px solid color-mix(in srgb, var(--primary) 32%, transparent); background: var(--bookmark-tag-bg); color: var(--bookmark-tag-text); font-size: 0.95rem; @@ -3608,7 +3461,7 @@ select:focus { .page-edit .bookmark-tag-remove:focus-visible { outline: none; - box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2); + box-shadow: 0 0 0 2px var(--focus-ring-color); } .page-edit .bookmark-tags-text-input { @@ -3621,11 +3474,6 @@ select:focus { padding: 0.45rem 0.4rem; } -.page-edit .bookmark-tags-text-input:focus { - outline: none; - box-shadow: none; -} - .page-edit .bookmark-toggle-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); @@ -3646,7 +3494,7 @@ select:focus { .page-edit .bookmark-toggle-item input[type="checkbox"] { width: 18px; height: 18px; - accent-color: #7ea8ff; + accent-color: var(--primary); } .page-edit .bookmark-editor-footer { @@ -3665,7 +3513,7 @@ select:focus { .page-edit .bookmark-editor-footer .btn-primary { background: var(--bookmark-save-bg); border-color: transparent; - box-shadow: 0 10px 22px rgba(77, 130, 240, 0.35); + box-shadow: 0 10px 22px var(--primary); } .page-edit .bookmark-editor-footer .btn-primary:hover { @@ -3673,128 +3521,35 @@ select:focus { } .page-edit .bookmark-editor-footer .btn-danger { - background: #c84e4e; + background: var(--danger); border-color: transparent; } .page-edit .bookmark-editor-footer .btn-danger:hover { - background: #dd5a5a; -} - -@media (max-width: 991px) { - .page-edit .editlinkform-col { - max-width: 100%; - padding-inline: 0; - } - - .page-edit .bookmark-editor-header, - .page-edit .bookmark-editor-card .card-body, - .page-edit .bookmark-editor-footer { - padding: 1rem; - } - - .page-edit .bookmark-toggle-grid { - grid-template-columns: 1fr; - } - - .page-edit .bookmark-tags-input { - gap: 0.4rem; - } - - .page-edit .bookmark-tag-pill { - height: 32px; - font-size: 0.9rem; - } - - .page-edit .bookmark-editor-footer { - flex-wrap: wrap; - justify-content: stretch; - } - - .page-edit .bookmark-editor-footer .btn, - .page-edit .bookmark-editor-footer a.btn { - flex: 1 1 calc(50% - 0.4rem); - } -} - -@media (max-width: 640px) { - .page-edit .bookmark-tags-text-input { - min-width: 120px; - } - - .page-edit .bookmark-editor-footer .btn, - .page-edit .bookmark-editor-footer a.btn { - flex: 1 1 100%; - } -} - -/* ===== Bulk Creation + Edit (final overrides) ===== */ -.page-add .page-add-actions { - margin: 1.25rem 0 1rem; - color: var(--text-secondary); -} - -.page-add .page-add-bulk-toggle { - min-height: 42px; - border-radius: 10px; -} - -.page-add .batch-private-wrap { - display: inline-flex; - align-items: center; - gap: 0.45rem; -} - -.page-add .batch-private-checkbox { - width: 18px; - height: 18px; - accent-color: var(--primary); -} - -.page-add .batch-private-label { - margin: 0; - color: var(--text-main); + background: color-mix(in srgb, var(--danger) 85%, #ffffff); } .page-edit { --bookmark-panel-bg: var(--bg-card); - --bookmark-panel-border: var(--border); - --bookmark-panel-soft: var(--bg-card-hover); - --bookmark-input-bg: var(--bg-body); + --bookmark-panel-border: color-mix(in srgb, var(--border) 85%, transparent); + --bookmark-panel-soft: color-mix(in srgb, var(--bg-card) 88%, var(--bg-body)); + --bookmark-input-bg: color-mix(in srgb, var(--bg-body) 80%, var(--bg-card)); --bookmark-input-border: var(--border); --bookmark-input-focus: var(--primary); - --bookmark-input-focus-ring: rgba(59, 130, 246, 0.2); + --bookmark-input-focus-ring: color-mix(in srgb, var(--primary) 35%, transparent); --bookmark-text-main: var(--text-main); --bookmark-text-muted: var(--text-secondary); - --bookmark-tag-bg: var(--tag-bg); - --bookmark-tag-bg-hover: var(--primary-light); - --bookmark-tag-text: var(--tag-text); - --bookmark-tag-remove-bg: rgba(17, 24, 39, 0.1); - --bookmark-tag-remove-bg-hover: rgba(17, 24, 39, 0.2); - --bookmark-save-bg: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%); -} - -[data-theme="dark"] .page-edit { - --bookmark-panel-bg: #121c30; - --bookmark-panel-border: #25324a; - --bookmark-panel-soft: #1a2640; - --bookmark-input-bg: #0c1528; - --bookmark-input-border: #334769; - --bookmark-input-focus: #70a0ff; - --bookmark-input-focus-ring: rgba(112, 160, 255, 0.25); - --bookmark-text-main: #eaf1ff; - --bookmark-text-muted: #9fb1d4; - --bookmark-tag-bg: #2f2f90; - --bookmark-tag-bg-hover: #3939a6; - --bookmark-tag-text: #cfdaff; - --bookmark-tag-remove-bg: rgba(255, 255, 255, 0.16); - --bookmark-tag-remove-bg-hover: rgba(255, 255, 255, 0.26); - --bookmark-save-bg: linear-gradient(135deg, #6fa8ff 0%, #4d82f0 100%); - --toastui-panel-bg: #101d38; - --toastui-panel-surface: #0a1429; - --toastui-toolbar-bg: linear-gradient(180deg, rgba(28, 49, 86, 0.95) 0%, rgba(14, 26, 47, 0.96) 100%); - --toastui-border: #1f3560; - --toastui-tab-hover: rgba(112, 160, 255, 0.24); + --bookmark-tag-bg: color-mix(in srgb, var(--primary) 12%, transparent); + --bookmark-tag-bg-hover: color-mix(in srgb, var(--primary) 18%, transparent); + --bookmark-tag-text: var(--text-main); + --bookmark-tag-remove-bg: color-mix(in srgb, var(--text-main) 10%, transparent); + --bookmark-tag-remove-bg-hover: color-mix(in srgb, var(--text-main) 18%, transparent); + --bookmark-save-bg: linear-gradient(135deg, var(--primary) 0%, color-mix(in srgb, var(--primary) 75%, #ffffff) 100%); + --toastui-panel-bg: var(--surface-soft); + --toastui-panel-surface: var(--surface-frosted); + --toastui-toolbar-bg: linear-gradient(180deg, color-mix(in srgb, var(--bg-card) 92%, transparent) 0%, color-mix(in srgb, var(--bg-card) 78%, transparent) 100%); + --toastui-border: color-mix(in srgb, var(--border) 110%, transparent); + --toastui-tab-hover: color-mix(in srgb, var(--primary) 25%, transparent); } .page-edit .bookmark-editor-card {