diff --git a/.workbench/Screenshot_5.png b/.workbench/Screenshot_5.png new file mode 100644 index 0000000..25f5b39 Binary files /dev/null and b/.workbench/Screenshot_5.png differ diff --git a/.workbench/Screenshot_6.png b/.workbench/Screenshot_6.png new file mode 100644 index 0000000..4770812 Binary files /dev/null and b/.workbench/Screenshot_6.png differ diff --git a/.workbench/Screenshot_7.png b/.workbench/Screenshot_7.png new file mode 100644 index 0000000..bcf25ad Binary files /dev/null and b/.workbench/Screenshot_7.png differ diff --git a/wwwroot/icons/exclamation.svg b/wwwroot/icons/exclamation.svg new file mode 100644 index 0000000..ce5eada --- /dev/null +++ b/wwwroot/icons/exclamation.svg @@ -0,0 +1,4 @@ + + diff --git a/wwwroot/icons/eye.svg b/wwwroot/icons/eye.svg new file mode 100644 index 0000000..7e9da41 --- /dev/null +++ b/wwwroot/icons/eye.svg @@ -0,0 +1,2 @@ + + diff --git a/wwwroot/icons/warning.svg b/wwwroot/icons/warning.svg new file mode 100644 index 0000000..cf7068e --- /dev/null +++ b/wwwroot/icons/warning.svg @@ -0,0 +1,2 @@ + + diff --git a/wwwroot/poc-detail-drawer.html b/wwwroot/poc-detail-drawer.html index 1d8ef28..b7d72fe 100644 --- a/wwwroot/poc-detail-drawer.html +++ b/wwwroot/poc-detail-drawer.html @@ -143,7 +143,7 @@ opacity: 0; visibility: hidden; transition: opacity 200ms ease, visibility 200ms ease; - z-index: 1000; + z-index: 900; } swp-detail-drawer-overlay.open { @@ -164,7 +164,7 @@ transition: transform 200ms ease; display: flex; flex-direction: column; - z-index: 1001; + z-index: 1000; /* Drawer 1 - top */ } swp-detail-drawer.open { @@ -555,7 +555,7 @@ opacity 200ms ease; display: flex; flex-direction: column; - z-index: 1000; + z-index: 990; /* Drawer 2 - middle */ } swp-journal-panel.open { @@ -652,6 +652,18 @@ background: var(--color-text-secondary); } + /* Tab Content Container */ + swp-journal-tab-content { + display: none; + flex-direction: column; + flex: 1; + overflow: hidden; + } + + swp-journal-tab-content.active { + display: flex; + } + /* Tab Content Header */ swp-journal-tab-header { display: flex; @@ -730,11 +742,16 @@ padding: 4px 10px; font-size: 11px; font-weight: 600; - color: #92400e; - background: color-mix(in srgb, var(--b-color-amber) 20%, var(--b-mix)); + color: var(--b-color-blue); + background: color-mix(in srgb, var(--b-color-blue) 15%, var(--b-mix)); border-radius: 4px; } + swp-journal-entry-type.farveformel { + color: var(--color-teal); + background: color-mix(in srgb, var(--color-teal) 15%, var(--b-mix)); + } + swp-journal-entry-date { font-size: 12px; color: var(--color-text-secondary); @@ -761,6 +778,56 @@ border-radius: 12px; } + /* Tag Colors - Journal Panel */ + swp-journal-tag.tag-note, + swp-journal-tag:contains('Fri note') { + background: color-mix(in srgb, var(--b-color-blue) 15%, var(--b-mix)); + border-color: var(--b-color-blue); + color: var(--b-color-blue); + } + swp-journal-tag.tag-sensitiv { + background: color-mix(in srgb, #8b5cf6 15%, var(--b-mix)); + border-color: #8b5cf6; + color: #7c3aed; + } + swp-journal-tag.tag-allergi { + background: color-mix(in srgb, var(--b-color-red) 15%, var(--b-mix)); + border-color: var(--b-color-red); + color: var(--b-color-red); + } + swp-journal-tag.tag-praference { + background: color-mix(in srgb, var(--color-teal) 15%, var(--b-mix)); + border-color: var(--color-teal); + color: var(--color-teal); + } + swp-journal-tag.tag-anbefaling { + background: color-mix(in srgb, var(--b-color-amber) 15%, var(--b-mix)); + border-color: var(--b-color-amber); + color: #b45309; + } + + /* Farveformel Tags */ + swp-journal-tag.tag-farveformel { + background: color-mix(in srgb, var(--color-teal) 15%, var(--b-mix)); + border-color: var(--color-teal); + color: var(--color-teal); + } + swp-journal-tag.tag-kold-tone { + background: color-mix(in srgb, var(--b-color-blue) 15%, var(--b-mix)); + border-color: var(--b-color-blue); + color: var(--b-color-blue); + } + swp-journal-tag.tag-toning { + background: color-mix(in srgb, #8b5cf6 15%, var(--b-mix)); + border-color: #8b5cf6; + color: #7c3aed; + } + swp-journal-tag.tag-balayage { + background: color-mix(in srgb, var(--b-color-amber) 15%, var(--b-mix)); + border-color: var(--b-color-amber); + color: #b45309; + } + swp-journal-entry-delete { padding: 4px 6px; font-size: 14px; @@ -781,6 +848,71 @@ font-size: 13px; color: var(--color-text); line-height: 1.5; + white-space: pre-line; + } + + swp-journal-entry-text .mono { + font-family: var(--font-mono); + } + + /* Entry Footer - Dato, Synlighed & Markering */ + swp-journal-entry-footer { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--color-border); + } + + swp-journal-entry-footer swp-journal-entry-date { + font-size: 12px; + color: var(--color-text-secondary); + } + + swp-journal-entry-icons { + display: flex; + align-items: center; + gap: 12px; + } + + swp-journal-entry-visibility, + swp-journal-entry-marking { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 11px; + color: var(--color-text-secondary); + } + + swp-journal-entry-visibility .entry-icon, + swp-journal-entry-marking .entry-icon { + width: 18px; + height: 18px; + filter: invert(22%) sepia(14%) saturate(1042%) hue-rotate(164deg) brightness(102%) contrast(85%); + } + + swp-journal-entry-marking.hidden { + display: none; + } + + /* Preview Entry */ + swp-journal-entry.preview { + border: 2px dashed var(--color-teal); + opacity: 1; + transform: translateY(0); + transition: opacity 200ms ease, transform 200ms ease, max-height 300ms ease; + max-height: 2000px; + } + + swp-journal-entry.preview.hidden { + opacity: 0; + transform: translateY(-20px); + max-height: 0; + margin: 0; + padding: 0; + overflow: hidden; + border: none; } /* Journal Profile Section */ @@ -1413,6 +1545,401 @@ swp-status-option.opt-cancelled { color: var(--color-text-secondary); } swp-status-option.opt-cancelled swp-status-dot { background: var(--color-text-secondary); } + + /* ========================================== + ADD NOTE PANEL + ========================================== */ + swp-add-note-panel { + position: fixed; + top: 0; + right: 340px; /* Same as journal - starts behind it */ + bottom: 0; + width: 440px; + background: var(--color-surface); + border-left: 1px solid var(--color-border); + box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1); + transform: translateX(0); /* Behind journal panel */ + visibility: hidden; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + visibility 0ms 250ms; + display: flex; + flex-direction: column; + z-index: 980; /* Drawer 3 - bottom */ + } + + swp-add-note-panel.open { + transform: translateX(-100%); /* Slide out to the left */ + visibility: visible; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + visibility 0ms 0ms; + } + + swp-add-note-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 20px; + border-bottom: 1px solid var(--color-border); + background: var(--color-background-alt); + } + + swp-add-note-title { + font-size: 16px; + font-weight: 600; + color: var(--color-text); + } + + swp-add-note-close { + cursor: pointer; + padding: 4px 8px; + border-radius: 4px; + font-size: 18px; + color: var(--color-text-secondary); + transition: background 150ms ease; + } + + swp-add-note-close:hover { + background: var(--color-background-hover); + } + + swp-add-note-content { + flex: 1; + overflow-y: auto; + padding: 20px; + display: flex; + flex-direction: column; + gap: 20px; + } + + swp-add-note-desc { + font-size: 13px; + color: var(--color-text-secondary); + line-height: 1.4; + } + + swp-add-note-field { + display: flex; + flex-direction: column; + gap: 8px; + } + + swp-add-note-label { + font-size: 12px; + color: var(--color-text-secondary); + } + + /* Tags */ + swp-add-note-tags { + display: flex; + flex-wrap: wrap; + gap: 8px; + } + + swp-add-note-tag-option { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + font-size: 13px; + border-radius: 16px; + border: 1px solid var(--color-border); + cursor: pointer; + transition: all 150ms ease; + } + + swp-add-note-tag-option::before { + content: ''; + width: 8px; + height: 8px; + border-radius: 50%; + border: 1px solid var(--color-border); + transition: all 150ms ease; + } + + swp-add-note-tag-option:hover { + background: var(--color-background-hover); + } + + swp-add-note-tag-option.selected { + background: color-mix(in srgb, var(--b-color-blue) 12%, var(--b-mix)); + border-color: var(--b-color-blue); + } + + /* Tag Colors - Add Note Panel */ + swp-add-note-tag-option[data-tag="note"].selected { + background: color-mix(in srgb, var(--b-color-blue) 15%, var(--b-mix)); + border-color: var(--b-color-blue); + color: var(--b-color-blue); + } + swp-add-note-tag-option[data-tag="sensitiv"].selected { + background: color-mix(in srgb, #8b5cf6 15%, var(--b-mix)); + border-color: #8b5cf6; + color: #7c3aed; + } + swp-add-note-tag-option[data-tag="allergi"].selected { + background: color-mix(in srgb, var(--b-color-red) 15%, var(--b-mix)); + border-color: var(--b-color-red); + color: var(--b-color-red); + } + swp-add-note-tag-option[data-tag="praference"].selected { + background: color-mix(in srgb, var(--color-teal) 15%, var(--b-mix)); + border-color: var(--color-teal); + color: var(--color-teal); + } + swp-add-note-tag-option[data-tag="anbefaling"].selected { + background: color-mix(in srgb, var(--b-color-amber) 15%, var(--b-mix)); + border-color: var(--b-color-amber); + color: #b45309; + } + /* Farveformel tags */ + swp-add-note-tag-option[data-tag="farveformel"].selected { + background: color-mix(in srgb, var(--color-teal) 15%, var(--b-mix)); + border-color: var(--color-teal); + color: var(--color-teal); + } + swp-add-note-tag-option[data-tag="kold-tone"].selected { + background: color-mix(in srgb, var(--b-color-blue) 15%, var(--b-mix)); + border-color: var(--b-color-blue); + color: var(--b-color-blue); + } + swp-add-note-tag-option[data-tag="toning"].selected { + background: color-mix(in srgb, #8b5cf6 15%, var(--b-mix)); + border-color: #8b5cf6; + color: #7c3aed; + } + swp-add-note-tag-option[data-tag="balayage"].selected { + background: color-mix(in srgb, var(--b-color-amber) 15%, var(--b-mix)); + border-color: var(--b-color-amber); + color: #b45309; + } + + swp-add-note-tag-option.selected::before { + background: var(--b-color-blue); + border-color: var(--b-color-blue); + } + swp-add-note-tag-option[data-tag="note"].selected::before { + background: var(--b-color-blue); + border-color: var(--b-color-blue); + } + swp-add-note-tag-option[data-tag="sensitiv"].selected::before { + background: #8b5cf6; + border-color: #8b5cf6; + } + swp-add-note-tag-option[data-tag="allergi"].selected::before { + background: var(--b-color-red); + border-color: var(--b-color-red); + } + swp-add-note-tag-option[data-tag="praference"].selected::before { + background: var(--color-teal); + border-color: var(--color-teal); + } + swp-add-note-tag-option[data-tag="anbefaling"].selected::before { + background: var(--b-color-amber); + border-color: var(--b-color-amber); + } + /* Farveformel tags ::before */ + swp-add-note-tag-option[data-tag="farveformel"].selected::before { + background: var(--color-teal); + border-color: var(--color-teal); + } + swp-add-note-tag-option[data-tag="kold-tone"].selected::before { + background: var(--b-color-blue); + border-color: var(--b-color-blue); + } + swp-add-note-tag-option[data-tag="toning"].selected::before { + background: #8b5cf6; + border-color: #8b5cf6; + } + swp-add-note-tag-option[data-tag="balayage"].selected::before { + background: var(--b-color-amber); + border-color: var(--b-color-amber); + } + + swp-add-note-tip { + font-size: 11px; + color: var(--color-teal); + font-style: italic; + } + + /* Textarea */ + swp-add-note-content textarea { + width: 100%; + min-height: 120px; + padding: 12px; + font-family: inherit; + font-size: 13px; + border: 1px solid var(--color-border); + border-radius: 6px; + resize: vertical; + line-height: 1.5; + } + + swp-add-note-content textarea:focus { + outline: none; + border-color: var(--color-teal); + } + + /* Dropdowns */ + swp-add-note-dropdowns { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + } + + swp-add-note-dropdown-group { + display: flex; + flex-direction: column; + gap: 6px; + } + + swp-add-note-dropdown-group select { + padding: 10px 12px; + font-size: 13px; + border: 1px solid var(--color-border); + border-radius: 6px; + background: var(--color-surface); + cursor: pointer; + } + + swp-add-note-dropdown-group select:focus { + outline: none; + border-color: var(--color-teal); + } + + swp-add-note-help { + font-size: 11px; + color: var(--color-teal); + } + + /* Footer */ + swp-add-note-footer { + display: flex; + gap: 8px; + padding: 16px 20px; + border-top: 1px solid var(--color-border); + } + + swp-add-note-btn { + flex: 1; + padding: 10px 16px; + font-size: 13px; + font-weight: 500; + border-radius: 6px; + cursor: pointer; + text-align: center; + transition: all 150ms ease; + } + + swp-add-note-btn.primary { + background: var(--color-teal); + color: white; + border: none; + } + + swp-add-note-btn.primary:hover { + background: #00796b; + } + + swp-add-note-btn.secondary { + background: var(--color-surface); + border: 1px solid var(--color-border); + color: var(--color-text); + } + + swp-add-note-btn.secondary:hover { + background: var(--color-background-hover); + } + + /* ========================================== + FARVEFORMEL PANEL (extends add-note styles) + ========================================== */ + swp-farveformel-panel { + position: fixed; + top: 0; + right: 340px; + bottom: 0; + width: 440px; + background: var(--color-surface); + border-left: 1px solid var(--color-border); + box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1); + transform: translateX(0); + visibility: hidden; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + visibility 0ms 250ms; + display: flex; + flex-direction: column; + z-index: 980; + } + + swp-farveformel-panel.open { + transform: translateX(-100%); + visibility: visible; + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + visibility 0ms 0ms; + } + + /* Farveformel-specific: 2-column grid layout */ + swp-add-note-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + } + + swp-add-note-field.full-width { + grid-column: 1 / -1; + } + + /* Input styling for farveformel */ + swp-farveformel-panel input[type="text"] { + padding: 10px 12px; + font-size: 13px; + border: 1px solid var(--color-border); + border-radius: 6px; + background: var(--color-surface); + } + + /* Monospace for formula fields */ + swp-farveformel-panel input#ffFormel, + swp-farveformel-panel input#ffBlandingsforhold { + font-family: var(--font-mono); + } + + swp-farveformel-panel input[type="text"]:focus { + outline: none; + border-color: var(--color-teal); + } + + swp-farveformel-panel select { + padding: 10px 12px; + font-size: 13px; + border: 1px solid var(--color-border); + border-radius: 6px; + background: var(--color-surface); + cursor: pointer; + } + + swp-farveformel-panel select:focus { + outline: none; + border-color: var(--color-teal); + } + + swp-farveformel-panel textarea { + width: 100%; + min-height: 100px; + padding: 12px; + font-family: inherit; + font-size: 13px; + border: 1px solid var(--color-border); + border-radius: 6px; + background: var(--color-surface); + resize: vertical; + line-height: 1.5; + } + + swp-farveformel-panel textarea:focus { + outline: none; + border-color: var(--color-teal); + }
@@ -1469,54 +1996,141 @@