From 8dc0dfd452422a9efb55f1c4693c0abb007cad62 Mon Sep 17 00:00:00 2001 From: Yvv Date: Sun, 1 Mar 2026 03:27:11 +0100 Subject: [PATCH] Palettes variees, logo stamp croque, search/date modernises - Palettes : Chagrine bleu lavande + ambre + rose ancien (moins aquatique), Grave ocre rouge + ardoise (plus lumineux), Zen vert franc + sienne + canard (pas de pastels glauques), Peps secondary indigo - Logo : icone dans stamp carre rotate(-10deg), separe du texte, hover -16deg - Login : logo stamp rotate -10deg, subtitle epure - Search : UInput/USelect remplaces par champs custom accent-soft + icone - Dates : icone clock + opacity 0.7 - Badges : UBadge remplace par pills custom uppercase accent Co-Authored-By: Claude Opus 4.6 --- frontend/app/app.vue | 37 ++++- frontend/app/assets/css/moods.css | 178 ++++++++++++------------- frontend/app/composables/useMood.ts | 6 +- frontend/app/pages/decisions/index.vue | 128 +++++++++++++++--- frontend/app/pages/documents/index.vue | 127 +++++++++++++++--- frontend/app/pages/login.vue | 36 ++--- frontend/app/pages/mandates/index.vue | 122 ++++++++++++++--- 7 files changed, 452 insertions(+), 182 deletions(-) diff --git a/frontend/app/app.vue b/frontend/app/app.vue index e6f7378..ba0fd62 100644 --- a/frontend/app/app.vue +++ b/frontend/app/app.vue @@ -90,8 +90,12 @@ function isActive(to: string) { @@ -266,15 +270,38 @@ function isActive(to: string) { text-decoration: none; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.75rem; +} + +.app-header__logo-stamp { + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 2rem; + background: var(--mood-accent); + color: var(--mood-accent-text); + border-radius: 8px; + transform: rotate(-10deg); + transition: transform 0.2s ease; + flex-shrink: 0; +} + +.app-header__logo:hover .app-header__logo-stamp { + transform: rotate(-16deg) scale(1.08); } .app-header__logo-icon { - font-size: 1.375rem; - color: var(--mood-accent); + font-size: 1.125rem; transform: scaleX(-1); } +.app-header__logo-text { + display: flex; + align-items: baseline; + gap: 0; +} + .app-header__logo-g { font-size: 1.5rem; font-weight: 800; diff --git a/frontend/app/assets/css/moods.css b/frontend/app/assets/css/moods.css index d7cb0ac..6a474a7 100644 --- a/frontend/app/assets/css/moods.css +++ b/frontend/app/assets/css/moods.css @@ -5,10 +5,10 @@ /* -------------------------------------------------------------------------- Peps — Chaud, colore, tonique (Light) - Palette: corail / ocre / bleu electrique / vert vif + Palette: corail vif / ocre / indigo / vert franc -------------------------------------------------------------------------- */ .mood-peps { - --mood-bg: #faf9f6; + --mood-bg: #faf8f5; --mood-surface: #ffffff; --mood-surface-hover: #fdf2ec; --mood-text: #1e1410; @@ -17,12 +17,12 @@ --mood-accent-soft: rgba(212, 74, 16, 0.08); --mood-accent-text: #ffffff; --mood-border: #e8d8c8; - --mood-secondary: #2874a6; - --mood-tertiary: #c4841d; + --mood-secondary: #4a5ec0; + --mood-tertiary: #c07820; --mood-success: #1a8c3e; --mood-warning: #c47d0a; --mood-error: #c23028; - --mood-gradient: linear-gradient(145deg, #fdf8f0 0%, #ffffff 40%, #f0f6fb 100%); + --mood-gradient: linear-gradient(145deg, #fdf8f0 0%, #ffffff 40%, #f0f4fb 100%); --mood-shadow: rgba(180, 80, 20, 0.07); --mood-input-bg: #ffffff; --mood-input-border: #d4c0aa; @@ -30,8 +30,8 @@ --mood-status-prepa: #b8600e; --mood-status-prepa-bg: rgba(184, 96, 14, 0.12); - --mood-status-vote: #2874a6; - --mood-status-vote-bg: rgba(40, 116, 166, 0.10); + --mood-status-vote: #4a5ec0; + --mood-status-vote-bg: rgba(74, 94, 192, 0.10); --mood-status-vigueur: #1a8c3e; --mood-status-vigueur-bg: rgba(26, 140, 62, 0.10); --mood-status-clos: #6e5844; @@ -39,108 +39,108 @@ } /* -------------------------------------------------------------------------- - Zen — Foret profonde, vegetal et mineral (Light) - Palette: vert sombre / brun chaud / bleu ardoise / terre + Zen — Vegetal lumineux, nature vivante (Light) + Palette: vert franc / terre sienne / bleu canard / bois chaud -------------------------------------------------------------------------- */ .mood-zen { - --mood-bg: #f0f4ef; - --mood-surface: #fafcf9; - --mood-surface-hover: #e4ece0; - --mood-text: #0e1a0c; - --mood-text-muted: #3a5634; - --mood-accent: #1a6838; - --mood-accent-soft: rgba(26, 104, 56, 0.08); + --mood-bg: #f4f6f0; + --mood-surface: #fbfcf8; + --mood-surface-hover: #eaf0e4; + --mood-text: #1a2418; + --mood-text-muted: #5a7050; + --mood-accent: #2e8b48; + --mood-accent-soft: rgba(46, 139, 72, 0.09); --mood-accent-text: #ffffff; - --mood-border: #a0c098; - --mood-secondary: #6b5838; - --mood-tertiary: #3a6878; - --mood-success: #146830; - --mood-warning: #8a6018; - --mood-error: #a03030; - --mood-gradient: linear-gradient(145deg, #eaf2e6 0%, #fafcf9 40%, #f0ece4 100%); - --mood-shadow: rgba(26, 80, 40, 0.08); - --mood-input-bg: #fafcf9; - --mood-input-border: #90b088; - --mood-input-focus: #1a6838; + --mood-border: #b8d0a8; + --mood-secondary: #8a6030; + --mood-tertiary: #2a7888; + --mood-success: #268040; + --mood-warning: #a87818; + --mood-error: #b83838; + --mood-gradient: linear-gradient(145deg, #f0f5ea 0%, #fbfcf8 40%, #f4efe6 100%); + --mood-shadow: rgba(40, 100, 50, 0.07); + --mood-input-bg: #fbfcf8; + --mood-input-border: #a8c898; + --mood-input-focus: #2e8b48; - --mood-status-prepa: #8a6018; - --mood-status-prepa-bg: rgba(138, 96, 24, 0.10); - --mood-status-vote: #3a6878; - --mood-status-vote-bg: rgba(58, 104, 120, 0.10); - --mood-status-vigueur: #146830; - --mood-status-vigueur-bg: rgba(20, 104, 48, 0.10); - --mood-status-clos: #506848; - --mood-status-clos-bg: rgba(80, 104, 72, 0.08); + --mood-status-prepa: #a87818; + --mood-status-prepa-bg: rgba(168, 120, 24, 0.11); + --mood-status-vote: #2a7888; + --mood-status-vote-bg: rgba(42, 120, 136, 0.10); + --mood-status-vigueur: #268040; + --mood-status-vigueur-bg: rgba(38, 128, 64, 0.10); + --mood-status-clos: #607858; + --mood-status-clos-bg: rgba(96, 120, 88, 0.08); } /* -------------------------------------------------------------------------- - Chagrine — Profond, electrique, bleu dominant (Dark) - Palette: bleu electrique / cyan / magenta / or + Chagrine — Nuit profonde, reflets varies (Dark) + Palette: bleu lavande / ambre chaud / rose ancien / vert d'eau -------------------------------------------------------------------------- */ .mood-chagrine { - --mood-bg: #0c1018; - --mood-surface: #121824; - --mood-surface-hover: #1a2438; - --mood-text: #d8e4f0; - --mood-text-muted: #7898c0; - --mood-accent: #4088d8; - --mood-accent-soft: rgba(64, 136, 216, 0.12); + --mood-bg: #0e1018; + --mood-surface: #151a28; + --mood-surface-hover: #1c2640; + --mood-text: #dce0ec; + --mood-text-muted: #8898b8; + --mood-accent: #6488d8; + --mood-accent-soft: rgba(100, 136, 216, 0.12); --mood-accent-text: #ffffff; - --mood-border: #1e3050; - --mood-secondary: #38c8c8; - --mood-tertiary: #d870a0; - --mood-success: #38d080; - --mood-warning: #e0b040; - --mood-error: #e06060; - --mood-gradient: linear-gradient(145deg, #0c1018 0%, #121824 40%, #0c1420 100%); - --mood-shadow: rgba(40, 100, 200, 0.15); - --mood-input-bg: #121824; - --mood-input-border: #283c58; - --mood-input-focus: #4088d8; + --mood-border: #222e48; + --mood-secondary: #d0a040; + --mood-tertiary: #c87090; + --mood-success: #48c87a; + --mood-warning: #d8a838; + --mood-error: #d86060; + --mood-gradient: linear-gradient(145deg, #0e1018 0%, #151a28 40%, #101420 100%); + --mood-shadow: rgba(60, 100, 180, 0.12); + --mood-input-bg: #151a28; + --mood-input-border: #2a3858; + --mood-input-focus: #6488d8; - --mood-status-prepa: #e0b040; - --mood-status-prepa-bg: rgba(224, 176, 64, 0.15); - --mood-status-vote: #38c8c8; - --mood-status-vote-bg: rgba(56, 200, 200, 0.14); - --mood-status-vigueur: #38d080; - --mood-status-vigueur-bg: rgba(56, 208, 128, 0.14); - --mood-status-clos: #6080a8; - --mood-status-clos-bg: rgba(96, 128, 168, 0.12); + --mood-status-prepa: #d8a838; + --mood-status-prepa-bg: rgba(216, 168, 56, 0.14); + --mood-status-vote: #6488d8; + --mood-status-vote-bg: rgba(100, 136, 216, 0.14); + --mood-status-vigueur: #48c87a; + --mood-status-vigueur-bg: rgba(72, 200, 122, 0.14); + --mood-status-clos: #7888a8; + --mood-status-clos-bg: rgba(120, 136, 168, 0.10); } /* -------------------------------------------------------------------------- - Grave — Chaud, mineral, lumineux (Dark) - Palette: ambre / cuivre / bleu acier / vert oxyde + Grave — Ambre mineral, ocre lumineux (Dark) + Palette: ambre dore / ocre rouge / bleu ardoise / vert mousse -------------------------------------------------------------------------- */ .mood-grave { - --mood-bg: #12110e; - --mood-surface: #1a1814; - --mood-surface-hover: #24201a; - --mood-text: #e8e0d0; - --mood-text-muted: #a09880; - --mood-accent: #d09828; - --mood-accent-soft: rgba(208, 152, 40, 0.10); - --mood-accent-text: #12110e; - --mood-border: #302c24; - --mood-secondary: #5898c8; - --mood-tertiary: #c87848; - --mood-success: #48c870; + --mood-bg: #131210; + --mood-surface: #1c1a16; + --mood-surface-hover: #28241c; + --mood-text: #ece4d4; + --mood-text-muted: #a89870; + --mood-accent: #d8a030; + --mood-accent-soft: rgba(216, 160, 48, 0.11); + --mood-accent-text: #131210; + --mood-border: #342e24; + --mood-secondary: #6898b8; + --mood-tertiary: #c07040; + --mood-success: #58c870; --mood-warning: #d0a030; --mood-error: #d05050; - --mood-gradient: linear-gradient(145deg, #12110e 0%, #1a1814 40%, #141618 100%); + --mood-gradient: linear-gradient(145deg, #131210 0%, #1c1a16 40%, #16181c 100%); --mood-shadow: rgba(180, 130, 40, 0.10); - --mood-input-bg: #1a1814; - --mood-input-border: #3a3428; - --mood-input-focus: #d09828; + --mood-input-bg: #1c1a16; + --mood-input-border: #3c3428; + --mood-input-focus: #d8a030; - --mood-status-prepa: #c87848; - --mood-status-prepa-bg: rgba(200, 120, 72, 0.15); - --mood-status-vote: #5898c8; - --mood-status-vote-bg: rgba(88, 152, 200, 0.14); - --mood-status-vigueur: #48c870; - --mood-status-vigueur-bg: rgba(72, 200, 112, 0.14); - --mood-status-clos: #787060; - --mood-status-clos-bg: rgba(120, 112, 96, 0.12); + --mood-status-prepa: #c07040; + --mood-status-prepa-bg: rgba(192, 112, 64, 0.15); + --mood-status-vote: #6898b8; + --mood-status-vote-bg: rgba(104, 152, 184, 0.14); + --mood-status-vigueur: #58c870; + --mood-status-vigueur-bg: rgba(88, 200, 112, 0.14); + --mood-status-clos: #807860; + --mood-status-clos-bg: rgba(128, 120, 96, 0.12); } /* ========================================================================== diff --git a/frontend/app/composables/useMood.ts b/frontend/app/composables/useMood.ts index 1528c95..c6bcf24 100644 --- a/frontend/app/composables/useMood.ts +++ b/frontend/app/composables/useMood.ts @@ -13,9 +13,9 @@ const STORAGE_KEY = 'glibredecision_mood' const moods: Mood[] = [ { id: 'peps', label: 'Peps', description: 'Chaud et tonique', icon: 'i-lucide-sun', color: '#d44a10', isDark: false }, - { id: 'zen', label: 'Zen', description: 'Foret profonde', icon: 'i-lucide-leaf', color: '#1a6838', isDark: false }, - { id: 'chagrine', label: 'Chagrine', description: 'Bleu electrique', icon: 'i-lucide-moon', color: '#4088d8', isDark: true }, - { id: 'grave', label: 'Grave', description: 'Mineral et lumineux', icon: 'i-lucide-shield', color: '#d09828', isDark: true }, + { id: 'zen', label: 'Zen', description: 'Nature vivante', icon: 'i-lucide-leaf', color: '#2e8b48', isDark: false }, + { id: 'chagrine', label: 'Chagrine', description: 'Nuit profonde', icon: 'i-lucide-moon', color: '#6488d8', isDark: true }, + { id: 'grave', label: 'Grave', description: 'Ambre mineral', icon: 'i-lucide-shield', color: '#d8a030', isDark: true }, ] const currentMood: Ref = ref('peps') diff --git a/frontend/app/pages/decisions/index.vue b/frontend/app/pages/decisions/index.vue index f5b64d8..13f7ed5 100644 --- a/frontend/app/pages/decisions/index.vue +++ b/frontend/app/pages/decisions/index.vue @@ -105,27 +105,28 @@ function formatDate(dateStr: string): string { > @@ -175,14 +176,15 @@ function formatDate(dateStr: string): string {
- + {{ typeLabel(decision.decision_type) }} - + {{ decision.steps.length }} etape{{ decision.steps.length !== 1 ? 's' : '' }} + {{ formatDate(decision.created_at) }}
@@ -305,9 +307,13 @@ function formatDate(dateStr: string): string { } .decision-card__date { + display: inline-flex; + align-items: center; + gap: 0.25rem; font-size: 0.75rem; color: var(--mood-text-muted); margin-left: auto; + opacity: 0.7; } @media (min-width: 640px) { @@ -316,6 +322,86 @@ function formatDate(dateStr: string): string { } } +.decision-card__type-badge { + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 3px 10px; + border-radius: 20px; + background: var(--mood-accent-soft); + color: var(--mood-accent); +} + +/* --- Modern search / sort / action --- */ +.search-field { + flex: 1; + min-width: 10rem; + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.625rem 1rem; + background: var(--mood-accent-soft); + border-radius: 12px; + transition: box-shadow 0.15s ease; +} +.search-field:focus-within { + box-shadow: 0 0 0 2.5px var(--mood-accent-soft); +} +.search-field__icon { + color: var(--mood-text-muted); + opacity: 0.5; + font-size: 0.875rem; + flex-shrink: 0; +} +.search-field__input { + flex: 1; + background: none; + font-size: 0.9375rem; + color: var(--mood-text); + min-width: 0; +} +.search-field__input::placeholder { + color: var(--mood-text-muted); + opacity: 0.4; +} + +.sort-select { + padding: 0.625rem 1rem; + font-size: 0.875rem; + font-weight: 600; + color: var(--mood-text); + background: var(--mood-accent-soft); + border-radius: 12px; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + min-width: 5.5rem; +} + +.action-btn { + display: inline-flex; + align-items: center; + gap: 0.375rem; + padding: 0.625rem 1.25rem; + font-size: 0.875rem; + font-weight: 700; + color: var(--mood-accent-text); + background: var(--mood-accent); + border-radius: 20px; + cursor: pointer; + text-decoration: none; + transition: transform 0.12s ease, box-shadow 0.12s ease; + white-space: nowrap; +} +.action-btn:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px var(--mood-shadow); +} +.action-btn:active { + transform: translateY(0); +} + .toolbox-section-title { font-size: 0.8125rem; font-weight: 700; diff --git a/frontend/app/pages/documents/index.vue b/frontend/app/pages/documents/index.vue index e328c5e..337b8d0 100644 --- a/frontend/app/pages/documents/index.vue +++ b/frontend/app/pages/documents/index.vue @@ -163,27 +163,28 @@ async function createDocument() { > @@ -228,15 +229,16 @@ async function createDocument() {
- + {{ typeLabel(doc.doc_type) }} - + v{{ doc.version }} {{ doc.items_count }} item{{ doc.items_count !== 1 ? 's' : '' }} + {{ formatDate(doc.updated_at) }}
@@ -433,9 +435,13 @@ async function createDocument() { } .doc-card__date { + display: inline-flex; + align-items: center; + gap: 0.25rem; font-size: 0.75rem; color: var(--mood-text-muted); margin-left: auto; + opacity: 0.7; } @media (min-width: 640px) { @@ -473,4 +479,83 @@ async function createDocument() { font-size: 0.8125rem; color: var(--mood-text-muted); } + +/* --- Modern search / sort / action --- */ +.search-field { + flex: 1; + min-width: 10rem; + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.625rem 1rem; + background: var(--mood-accent-soft); + border-radius: 12px; + transition: box-shadow 0.15s ease; +} +.search-field:focus-within { + box-shadow: 0 0 0 2.5px var(--mood-accent-soft); +} +.search-field__icon { + color: var(--mood-text-muted); + opacity: 0.5; + font-size: 0.875rem; + flex-shrink: 0; +} +.search-field__input { + flex: 1; + background: none; + font-size: 0.9375rem; + color: var(--mood-text); + min-width: 0; +} +.search-field__input::placeholder { + color: var(--mood-text-muted); + opacity: 0.4; +} + +.sort-select { + padding: 0.625rem 1rem; + font-size: 0.875rem; + font-weight: 600; + color: var(--mood-text); + background: var(--mood-accent-soft); + border-radius: 12px; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + min-width: 5.5rem; +} + +.action-btn { + display: inline-flex; + align-items: center; + gap: 0.375rem; + padding: 0.625rem 1.25rem; + font-size: 0.875rem; + font-weight: 700; + color: var(--mood-accent-text); + background: var(--mood-accent); + border-radius: 20px; + cursor: pointer; + transition: transform 0.12s ease, box-shadow 0.12s ease; + white-space: nowrap; +} +.action-btn:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px var(--mood-shadow); +} +.action-btn:active { + transform: translateY(0); +} + +.doc-card__type-badge { + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 3px 10px; + border-radius: 20px; + background: var(--mood-accent-soft); + color: var(--mood-accent); +} diff --git a/frontend/app/pages/login.vue b/frontend/app/pages/login.vue index 050806f..f57807c 100644 --- a/frontend/app/pages/login.vue +++ b/frontend/app/pages/login.vue @@ -62,8 +62,7 @@ onMounted(() => {

Connexion

@@ -173,26 +172,14 @@ onMounted(() => { font-size: 1.75rem; color: var(--mood-accent-text); background: var(--mood-accent); - border-radius: 16px; + border-radius: 14px; margin-bottom: 1rem; + transform: rotate(-10deg); } .login-card__logo-icon { transform: scaleX(-1); } -.login-card__title { - font-size: 1.5rem; - font-weight: 800; - color: var(--mood-text); - margin: 0; -} - -@media (min-width: 640px) { - .login-card__title { - font-size: 1.75rem; - } -} - .login-card__subtitle { font-size: 0.8125rem; color: var(--mood-text-muted); @@ -204,13 +191,18 @@ onMounted(() => { font-size: 0.9375rem; } } -.login-card__g { - font-style: italic; - font-weight: 700; + +.login-card__title { + font-size: 1.5rem; + font-weight: 800; + color: var(--mood-text); + margin: 0; } -.login-card__paren { - font-weight: 300; - opacity: 0.5; + +@media (min-width: 640px) { + .login-card__title { + font-size: 1.75rem; + } } /* Steps */ diff --git a/frontend/app/pages/mandates/index.vue b/frontend/app/pages/mandates/index.vue index fa933c8..654bba7 100644 --- a/frontend/app/pages/mandates/index.vue +++ b/frontend/app/pages/mandates/index.vue @@ -140,27 +140,28 @@ async function handleCreate() { > @@ -248,9 +249,9 @@ async function handleCreate() {
- + {{ typeLabel(mandate.mandate_type) }} - + {{ mandate.steps.length }} etape{{ mandate.steps.length !== 1 ? 's' : '' }} @@ -550,4 +551,83 @@ async function handleCreate() { font-size: 0.8125rem; color: var(--mood-text-muted); } + +.mandate-card__type-badge { + font-size: 0.6875rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 3px 10px; + border-radius: 20px; + background: var(--mood-accent-soft); + color: var(--mood-accent); +} + +/* --- Modern search / sort / action --- */ +.search-field { + flex: 1; + min-width: 10rem; + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.625rem 1rem; + background: var(--mood-accent-soft); + border-radius: 12px; + transition: box-shadow 0.15s ease; +} +.search-field:focus-within { + box-shadow: 0 0 0 2.5px var(--mood-accent-soft); +} +.search-field__icon { + color: var(--mood-text-muted); + opacity: 0.5; + font-size: 0.875rem; + flex-shrink: 0; +} +.search-field__input { + flex: 1; + background: none; + font-size: 0.9375rem; + color: var(--mood-text); + min-width: 0; +} +.search-field__input::placeholder { + color: var(--mood-text-muted); + opacity: 0.4; +} + +.sort-select { + padding: 0.625rem 1rem; + font-size: 0.875rem; + font-weight: 600; + color: var(--mood-text); + background: var(--mood-accent-soft); + border-radius: 12px; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + min-width: 5.5rem; +} + +.action-btn { + display: inline-flex; + align-items: center; + gap: 0.375rem; + padding: 0.625rem 1.25rem; + font-size: 0.875rem; + font-weight: 700; + color: var(--mood-accent-text); + background: var(--mood-accent); + border-radius: 20px; + cursor: pointer; + transition: transform 0.12s ease, box-shadow 0.12s ease; + white-space: nowrap; +} +.action-btn:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px var(--mood-shadow); +} +.action-btn:active { + transform: translateY(0); +}