/* ========================================================================== UL Trésorerie CGT (OCA\ULTresorerie) — Feuille de style Nextcloud 34 ========================================================================== */ :root { --ul-cgt-red: #d32f2f; --ul-cgt-red-dark: #991b1b; --ul-cgt-red-soft: #fef2f2; --ul-green-paid: #15803d; --ul-green-paid-hover: #166534; --ul-green-soft: #dcfce7; --ul-orange-alert: #d97706; --ul-orange-soft: #fffbeb; --ul-gray-empty: #f3f4f6; --ul-gray-empty-hover: #e5e7eb; --ul-border: #d1d5db; --ul-text-main: #111827; --ul-text-muted: #4b5563; --ul-bg-surface: #ffffff; --ul-bg-app: #f8fafc; } .hidden { display: none !important; } .ul-print-only { display: none; } /* Disposition principale dans Nextcloud */ .ul-app-wrapper { display: flex; width: 100%; height: calc(100vh - 50px); overflow: hidden; background-color: var(--ul-bg-app); color: var(--ul-text-main); font-family: var(--font-face, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif); } /* ========================================================================== Barre latérale gauche (#app-navigation) ========================================================================== */ #app-navigation { width: 290px; min-width: 290px; background: var(--ul-bg-surface); border-right: 1px solid var(--ul-border); display: flex; flex-direction: column; padding: 14px; box-sizing: border-box; overflow-y: auto; transition: width 0.2s ease, min-width 0.2s ease, padding 0.2s ease; } .ul-app-wrapper.ul-sidebar-collapsed #app-navigation { width: 0 !important; min-width: 0 !important; padding-left: 0 !important; padding-right: 0 !important; border-right: none !important; overflow: hidden !important; } .ul-brand-header { display: flex; flex-direction: column; background: #ffffff; border: 1px solid #e2e8f0; border-top: 4px solid var(--ul-cgt-red); border-radius: 8px; margin-bottom: 14px; overflow: hidden; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); flex-shrink: 0; } .ul-brand-banner-box { padding: 8px 8px 6px 10px; background: #ffffff; display: flex; align-items: center; justify-content: space-between; gap: 6px; } .ul-brand-banner-img { max-width: 205px; width: 100%; height: auto; max-height: 46px !important; object-fit: contain; display: block; } .ul-sidebar-close-btn { background: #f1f5f9; border: 1px solid #cbd5e1; border-radius: 6px; width: 28px; height: 28px; min-width: 28px; font-size: 16px; font-weight: 800; line-height: 1; color: #334155; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; padding: 0; transition: background-color 0.15s ease, color 0.15s ease; } .ul-sidebar-close-btn:hover { background: #fee2e2; border-color: #fca5a5; color: var(--ul-cgt-red-dark); } .ul-btn-toggle-sidebar { background: #f8fafc; border: 1px solid var(--ul-border); border-radius: 6px; width: 34px; height: 34px; min-width: 34px; font-size: 16px; font-weight: 700; color: #1e293b; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; padding: 0; transition: background-color 0.15s ease, border-color 0.15s ease; } .ul-btn-toggle-sidebar:hover { background: #fee2e2; border-color: #fca5a5; color: var(--ul-cgt-red-dark); } .ul-brand-subtitle-bar { display: flex; align-items: center; justify-content: center; gap: 6px; background: linear-gradient(135deg, var(--ul-cgt-red), var(--ul-cgt-red-dark)); color: #ffffff; font-size: 11.5px; font-weight: 700; padding: 5px 10px; letter-spacing: 0.02em; } .ul-nav-section-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ul-text-muted); margin: 10px 6px 6px; } .ul-nav-list { list-style: none; padding: 0; margin: 0 0 12px 0; } .ul-nav-item, .ul-filter-item { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 10px; border-radius: 6px; color: var(--ul-text-main); text-decoration: none; font-size: 13px; font-weight: 500; transition: background-color 0.15s ease; margin-bottom: 3px; } .ul-nav-item { justify-content: flex-start; } .ul-nav-item:hover, .ul-filter-item:hover { background-color: #f1f5f9; } .ul-nav-item.active { background-color: #fee2e2; color: var(--ul-cgt-red-dark); font-weight: 700; } .ul-filter-item.active { background-color: #e2e8f0; font-weight: 700; } .ul-counter { background: #e5e7eb; color: #1f2937; font-size: 11.5px; font-weight: 700; padding: 2px 7px; border-radius: 999px; min-width: 22px; text-align: center; } .ul-counter-green { background: var(--ul-green-soft); color: var(--ul-green-paid); } .ul-counter-orange { background: #ffedd5; color: #c2410c; } .ul-counter-red { background: #fee2e2; color: #b91c1c; } .ul-nav-summary-card { background: #f8fafc; border: 1px solid var(--ul-border); border-radius: 8px; padding: 10px 12px; margin-top: auto; margin-bottom: 12px; font-size: 12.5px; } .ul-summary-row { display: flex; justify-content: space-between; padding: 3px 0; } .ul-summary-total { border-top: 1px solid var(--ul-border); margin-top: 6px; padding-top: 6px; font-size: 13.5px; color: var(--ul-green-paid); } .ul-nav-actions { display: flex; flex-direction: column; gap: 8px; } /* ========================================================================== Zone centrale (#app-content) & Barre d'outils ========================================================================== */ #app-content { flex: 1; display: flex; flex-direction: column; overflow: hidden; padding: 16px 20px; box-sizing: border-box; position: relative; } .ul-view-section { display: flex; flex-direction: column; height: 100%; overflow: hidden; } .ul-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; background: var(--ul-bg-surface); border: 1px solid var(--ul-border); border-radius: 8px; padding: 10px 14px; margin-bottom: 10px; flex-shrink: 0; } .ul-toolbar-left, .ul-toolbar-right { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; } .ul-year-selector { display: inline-flex; align-items: center; background: #f1f5f9; border: 1px solid var(--ul-border); border-radius: 6px; padding: 2px; } .ul-year-label { font-size: 16px; font-weight: 800; padding: 0 12px; color: var(--ul-cgt-red-dark); } .ul-btn-icon { background: #ffffff; border: 1px solid var(--ul-border); border-radius: 4px; width: 30px; height: 30px; font-weight: 700; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; } .ul-btn-icon:hover { background: #e2e8f0; } .ul-search-input { width: 310px; max-width: 100%; padding: 7px 12px; border: 1px solid var(--ul-border); border-radius: 6px; font-size: 13.5px; } .ul-checkbox-label { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; user-select: none; } /* Légende au-dessus de la grille */ .ul-legend-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--ul-text-muted); margin-bottom: 8px; flex-shrink: 0; } .ul-legend-item { display: inline-flex; align-items: center; gap: 6px; } .ul-legend-swatch { width: 14px; height: 14px; border-radius: 3px; display: inline-block; } .ul-swatch-paid { background: var(--ul-green-paid); } .ul-swatch-empty { background: var(--ul-gray-empty); border: 1px solid var(--ul-border); } .ul-active-filter-pill { background: #fef3c7; color: #92400e; border: 1px solid #f59e0b; padding: 2px 10px; border-radius: 999px; font-weight: 600; cursor: pointer; } /* ========================================================================== Grille Annuelle des Cotisations (Sticky left, right, top & bottom) ========================================================================== */ .ul-grid-container { flex: 1; overflow: auto; background: var(--ul-bg-surface); border: 1px solid var(--ul-border); border-radius: 8px; position: relative; } .ul-dues-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; } .ul-dues-table th, .ul-dues-table td { border-bottom: 1px solid #e5e7eb; border-right: 1px solid #e5e7eb; padding: 6px 8px; box-sizing: border-box; } /* En-tête figé en haut */ .ul-dues-table thead th { position: sticky; top: 0; z-index: 4; background: #1e293b; color: #ffffff; font-weight: 700; text-align: center; padding: 10px 6px; white-space: nowrap; } .ul-dues-table thead th.col-sticky-left { left: 0; z-index: 6; text-align: left; padding-left: 12px; } .ul-dues-table thead th.col-sticky-right { right: 0; z-index: 6; background: #0f172a; } /* Colonne 1 figée à gauche */ .col-sticky-left { position: sticky; left: 0; z-index: 3; min-width: 265px; max-width: 295px; background: #ffffff; box-shadow: 2px 0 4px rgba(0, 0, 0, 0.04); } /* Colonne 14 figée à droite */ .col-sticky-right { position: sticky; right: 0; z-index: 3; min-width: 112px; text-align: right; font-weight: 800; background: #f8fafc; box-shadow: -2px 0 4px rgba(0, 0, 0, 0.04); white-space: nowrap; } /* Pied de tableau figé en bas (Total Mensuel & Grand Total Annuel) */ .ul-tfoot-row th { position: sticky; bottom: 0; z-index: 4; background: #f1f5f9; color: #0f172a; font-weight: 800; border-top: 2px solid #94a3b8; padding: 10px 6px; text-align: right; white-space: nowrap; } .ul-tfoot-row th.col-sticky-left { left: 0; z-index: 6; text-align: left; padding-left: 12px; background: #e2e8f0; } .ul-tfoot-row th.col-sticky-right.col-grand-total { right: 0; z-index: 6; background: var(--ul-cgt-red); color: #ffffff; font-size: 14px; } /* Cellule Syndiqué (Colonne 1) */ .ul-member-cell { padding: 7px 10px !important; } .ul-member-top-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 6px; } .ul-member-name-wrap { display: flex; flex-direction: column; } .ul-member-fullname { font-weight: 700; color: #0f172a; font-size: 13px; } .ul-member-submeta { font-size: 11px; color: var(--ul-text-muted); } .ul-btn-edit-member { background: transparent; border: 1px solid transparent; border-radius: 4px; cursor: pointer; padding: 2px 5px; font-size: 12px; opacity: 0.65; } .ul-btn-edit-member:hover { opacity: 1; background: #f1f5f9; border-color: var(--ul-border); } .ul-badges-row { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; } .ul-badge { display: inline-flex; align-items: center; font-size: 10.5px; font-weight: 700; padding: 1.5px 6px; border-radius: 4px; white-space: nowrap; } .ul-badge-green { background: var(--ul-green-soft); color: var(--ul-green-paid); } .ul-badge-orange { background: #ffedd5; color: #c2410c; border: 1px solid #fdba74; } .ul-badge-red { background: #fee2e2; color: #b91c1c; border: 1px solid #fca5a5; } .ul-badge-archived { background: #e5e7eb; color: #374151; } /* Lignes en Alerte Rouge Grave (0,00 € sur l'année) */ .ul-row-alert-red td { border-top: 2px solid #ef4444 !important; border-bottom: 2px solid #ef4444 !important; } .ul-row-alert-red td.col-sticky-left { border-left: 5px solid #dc2626 !important; background: #fff5f5; } .ul-row-alert-red td.col-sticky-right { background: #fef2f2; color: #b91c1c; } /* Lignes en Alerte Orange (Mois manquants) */ .ul-row-alert-orange td.col-sticky-left { border-left: 4px solid #f59e0b !important; } .ul-row-archived { opacity: 0.65; } /* Cellules mensuelles (Colonnes 2 à 13) */ .col-month { min-width: 78px; } .ul-due-cell { text-align: center; vertical-align: middle; cursor: pointer; user-select: none; position: relative; min-width: 78px; height: 46px; transition: transform 0.08s ease, background-color 0.12s ease; } /* Cellule vide : gris clair neutre */ .ul-due-empty { background-color: var(--ul-gray-empty); color: #9ca3af; } .ul-due-empty:hover { background-color: var(--ul-gray-empty-hover); color: #374151; } .ul-due-empty-plus { font-size: 15px; font-weight: 700; opacity: 0.35; } .ul-due-empty:hover .ul-due-empty-plus { opacity: 0.9; } /* Cellule cotisée : fond vert franc, montant en euros + badge mode de paiement */ .ul-due-paid { background-color: var(--ul-green-paid); color: #ffffff; font-weight: 700; } .ul-due-paid:hover { background-color: var(--ul-green-paid-hover); } .ul-due-amount { display: block; font-size: 12.5px; line-height: 1.2; } .ul-due-method-badge { display: inline-block; margin-top: 2px; font-size: 9.5px; font-weight: 800; background: rgba(255, 255, 255, 0.24); color: #ffffff; padding: 0 5px; border-radius: 3px; } .ul-due-note-dot { position: absolute; top: 2px; right: 4px; color: #fde047; font-size: 14px; line-height: 1; } .ul-member-total-cell { font-size: 13.5px; color: var(--ul-green-paid); } .ul-member-total-cell.ul-total-zero { color: #dc2626; } .ul-empty-cell { text-align: center; padding: 40px 20px !important; color: var(--ul-text-muted); font-size: 14px; } /* ========================================================================== Boutons & Formulaires génériques ========================================================================== */ .ul-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 7px 14px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer; border: 1px solid transparent; transition: background-color 0.15s ease, border-color 0.15s ease; white-space: nowrap; } .ul-btn-block { width: 100%; } .ul-btn-sm { padding: 5px 10px; font-size: 12px; } .ul-btn-primary { background: var(--ul-cgt-red); color: #ffffff; } .ul-btn-primary:hover { background: var(--ul-cgt-red-dark); } .ul-btn-secondary { background: #1e293b; color: #ffffff; } .ul-btn-secondary:hover { background: #0f172a; } .ul-btn-success { background: var(--ul-green-paid); color: #ffffff; } .ul-btn-success:hover { background: var(--ul-green-paid-hover); } .ul-btn-danger { background: #fee2e2; color: #b91c1c; border-color: #fca5a5; } .ul-btn-danger:hover { background: #fecaca; } .ul-btn-outline { background: #ffffff; color: var(--ul-text-main); border-color: var(--ul-border); } .ul-btn-outline:hover { background: #f1f5f9; } .ul-btn-link { background: none; border: none; color: var(--ul-cgt-red); font-size: 12px; font-weight: 600; cursor: pointer; padding: 0; } .ul-btn-link:hover { text-decoration: underline; } .ul-field-label { display: block; font-size: 12.5px; font-weight: 700; color: #374151; margin-bottom: 4px; } .ul-field-label-inline { font-size: 12.5px; font-weight: 600; color: #374151; } .ul-field-help { display: block; font-size: 11.5px; color: var(--ul-text-muted); margin-top: 3px; } .ul-input, .ul-select, .ul-textarea { width: 100%; padding: 8px 10px; border: 1px solid var(--ul-border); border-radius: 6px; font-size: 13.5px; box-sizing: border-box; background: #ffffff; color: var(--ul-text-main); } .ul-input-lg { font-size: 16px; font-weight: 700; padding: 9px 12px; } .ul-textarea { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; line-height: 1.5; resize: vertical; } .ul-form-group { margin-bottom: 12px; } .ul-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .ul-form-row-3 { grid-template-columns: 1fr 1fr 1fr; } .ul-span-2 { grid-column: span 2; } .ul-checkbox-group-row { padding: 8px 0; } /* ========================================================================== Fenêtres Modales (#due-modal & #member-modal) ========================================================================== */ .ul-modal-backdrop { position: fixed; inset: 0; z-index: 1000; background: rgba(15, 23, 42, 0.55); display: flex; align-items: center; justify-content: center; padding: 16px; } .ul-modal-dialog { background: #ffffff; border-radius: 10px; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.25); width: 100%; max-height: 92vh; display: flex; flex-direction: column; overflow: hidden; } .ul-modal-sm { max-width: 480px; } .ul-modal-lg { max-width: 720px; } .ul-modal-header { display: flex; align-items: flex-start; justify-content: space-between; padding: 14px 18px; background: #f8fafc; border-bottom: 1px solid var(--ul-border); } .ul-modal-title { margin: 0; font-size: 16px; font-weight: 800; color: #0f172a; } .ul-modal-subtitle { margin: 3px 0 0 0; font-size: 13px; font-weight: 600; color: var(--ul-cgt-red-dark); } .ul-modal-close { background: none; border: none; font-size: 22px; line-height: 1; cursor: pointer; color: var(--ul-text-muted); } .ul-modal-body { padding: 16px 18px; overflow-y: auto; } .ul-prefill-banner { background: #eff6ff; border-left: 4px solid #2563eb; color: #1e40af; padding: 8px 10px; border-radius: 4px; font-size: 12px; margin-bottom: 14px; } .ul-modal-footer { display: flex; align-items: center; justify-content: space-between; padding-top: 12px; margin-top: 8px; border-top: 1px solid var(--ul-border); } .ul-modal-footer-right { display: flex; align-items: center; gap: 8px; margin-left: auto; } /* ========================================================================== Vue 2 : Outil de Publipostage & Courriers ========================================================================== */ .ul-section-heading { margin: 0; font-size: 16px; font-weight: 800; } .ul-mailing-workspace { display: grid; grid-template-columns: 360px 1fr; gap: 16px; flex: 1; overflow: hidden; } .ul-mailing-sidebar, .ul-mailing-main { display: flex; flex-direction: column; gap: 14px; overflow-y: auto; padding-right: 4px; } .ul-card { background: #ffffff; border: 1px solid var(--ul-border); border-radius: 8px; padding: 14px; } .ul-card-header-flex { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; } .ul-card-title { margin: 0; font-size: 14px; font-weight: 800; } .ul-card-actions { display: flex; gap: 8px; } .ul-hint-text { font-size: 12px; color: var(--ul-text-muted); margin: 8px 0 0 0; } .ul-recipients-card { flex: 1; display: flex; flex-direction: column; overflow: hidden; } .ul-recipients-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; } .ul-recipients-filters { padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px solid #e5e7eb; } .ul-recipients-list { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 4px; max-height: 440px; } .ul-recipient-item { display: flex; align-items: center; gap: 8px; padding: 7px 8px; border: 1px solid #e5e7eb; border-radius: 6px; cursor: pointer; font-size: 12.5px; } .ul-recipient-item.selected { background: #fef2f2; border-color: #fca5a5; } .ul-recipient-info { flex: 1; min-width: 0; } .ul-recipient-name { font-weight: 700; color: #111827; } .ul-recipient-meta { font-size: 11px; color: var(--ul-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ul-variables-box { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 10px; margin-bottom: 12px; } .ul-variables-title { display: block; font-size: 11.5px; font-weight: 700; color: var(--ul-text-muted); margin-bottom: 6px; } .ul-variables-pills { display: flex; flex-wrap: wrap; gap: 6px; } .ul-var-pill { background: #ffffff; border: 1px solid #cbd5e1; border-radius: 4px; padding: 3px 8px; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11.5px; color: var(--ul-cgt-red-dark); cursor: pointer; } .ul-var-pill:hover { background: #fee2e2; border-color: var(--ul-cgt-red); } /* Aperçu de courrier A4 à l'écran */ .ul-letter-preview { background: #e2e8f0; padding: 16px; border-radius: 6px; } .ul-print-page { background: #ffffff; color: #111827; padding: 28px 34px; border-radius: 4px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); max-width: 720px; margin: 0 auto; font-family: "Liberation Serif", Georgia, "Times New Roman", serif; line-height: 1.55; } .ul-letter-header { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; border-bottom: 3px solid var(--ul-cgt-red); padding-bottom: 12px; margin-bottom: 18px; font-family: Arial, Helvetica, sans-serif; } .ul-letter-banner-img { max-width: 390px; width: 100%; max-height: 76px; object-fit: contain; display: block; } .ul-letter-logo-img { height: 54px; width: auto; object-fit: contain; } .ul-letter-org-sub { font-size: 12px; font-weight: 600; color: #374151; } .ul-letter-subject { font-family: Arial, Helvetica, sans-serif; font-weight: 700; font-size: 14px; background: #f8fafc; border-left: 4px solid var(--ul-cgt-red); padding: 8px 12px; margin-bottom: 16px; } .ul-letter-body { white-space: pre-wrap; font-size: 13.5px; } /* ========================================================================== Vue Tableau de Bord & Comparaison Pluriannuelle (#view-dashboard) ========================================================================== */ .ul-toolbar-cgt-logo { width: 34px; height: 34px; object-fit: contain; } .ul-dashboard-subtitle { display: block; font-size: 11.5px; color: var(--ul-text-muted); } .ul-dash-control-group { display: inline-flex; align-items: center; gap: 8px; } .ul-dash-compare-select { width: auto; min-width: 155px; font-weight: 700; } .ul-dashboard-content { flex: 1; display: flex; flex-direction: column; gap: 10px; overflow-y: auto; padding-right: 2px; } /* Ligne 1 : 5 cartes KPI */ .ul-kpi-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; flex-shrink: 0; } .ul-kpi-card { background: #ffffff; border: 1px solid var(--ul-border); border-radius: 8px; padding: 10px 12px; display: flex; flex-direction: column; justify-content: space-between; } .ul-kpi-card-primary { border-left: 4px solid var(--ul-cgt-red); background: linear-gradient(180deg, #fffafa 0%, #ffffff 100%); } .ul-kpi-top { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-bottom: 4px; } .ul-kpi-label { font-size: 11.5px; font-weight: 700; color: var(--ul-text-muted); text-transform: uppercase; letter-spacing: 0.03em; } .ul-kpi-icon { font-size: 14px; } .ul-kpi-trend { font-size: 11px; font-weight: 700; padding: 1.5px 6px; border-radius: 999px; background: #f1f5f9; color: #334155; white-space: nowrap; } .ul-kpi-trend.ul-trend-up { background: #dcfce7; color: #15803d; } .ul-kpi-trend.ul-trend-down { background: #fee2e2; color: #b91c1c; } .ul-kpi-value { font-size: 20px; font-weight: 800; color: #0f172a; line-height: 1.2; } .ul-kpi-value-orange { color: #c2410c; } .ul-kpi-sub { font-size: 11px; color: var(--ul-text-muted); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Ligne 2 : Grille des graphiques */ .ul-dash-charts-grid { display: grid; grid-template-columns: 1.65fr 1fr; gap: 10px; flex: 1; min-height: 270px; } .ul-dash-chart-card { display: flex; flex-direction: column; justify-content: space-between; padding: 11px 14px; } .ul-dash-side-charts { display: flex; flex-direction: column; gap: 10px; } .ul-chart-subtitle { display: block; font-size: 11px; color: var(--ul-text-muted); } .ul-chart-legend { display: flex; align-items: center; gap: 12px; font-size: 11.5px; font-weight: 600; } .ul-chart-legend-item { display: inline-flex; align-items: center; gap: 5px; } .ul-legend-dot { width: 10px; height: 10px; border-radius: 2px; display: inline-block; } .ul-dot-red { background: var(--ul-cgt-red); } .ul-dot-slate { background: #94a3b8; } .ul-svg-chart-wrap { flex: 1; display: flex; align-items: center; justify-content: center; width: 100%; min-height: 180px; } .ul-svg-chart-compact { min-height: 112px; } .ul-svg-chart { width: 100%; height: 100%; max-height: 245px; overflow: visible; } .ul-chart-bar { transition: opacity 0.15s ease; } .ul-chart-bar:hover { opacity: 0.82; } .ul-multiyear-bar-group { cursor: pointer; } .ul-multiyear-bar-group:hover rect { opacity: 0.85; } /* Modes de paiement & Statuts dans le Dashboard */ .ul-methods-status-wrap { display: flex; flex-direction: column; gap: 8px; } .ul-methods-breakdown { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; } .ul-method-stat-row { display: flex; flex-direction: column; gap: 2px; } .ul-method-stat-head { display: flex; justify-content: space-between; font-size: 11px; } .ul-method-stat-name { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; } .ul-method-color-dot { width: 8px; height: 8px; border-radius: 999px; display: inline-block; } .ul-progress-track { width: 100%; height: 5px; background: #e2e8f0; border-radius: 999px; overflow: hidden; } .ul-progress-fill { height: 100%; border-radius: 999px; } .ul-status-breakdown { border-top: 1px solid #e2e8f0; padding-top: 6px; } .ul-status-breakdown-title { font-size: 11px; font-weight: 700; color: #334155; margin-bottom: 4px; } .ul-stacked-status-bar { display: flex; width: 100%; height: 8px; border-radius: 999px; overflow: hidden; background: #e2e8f0; margin-bottom: 5px; } .ul-stacked-segment { height: 100%; } .ul-status-mini-pills { display: flex; flex-wrap: wrap; gap: 6px; } .ul-status-mini-pill { font-size: 10.5px; font-weight: 700; background: #f1f5f9; color: #334155; padding: 1px 6px; border-radius: 4px; } /* Ligne 3 : Tableau comparatif mensuel */ .ul-dash-table-card { padding: 8px 12px; flex-shrink: 0; } .ul-table-responsive { overflow-x: auto; } .ul-dash-comp-table { width: 100%; border-collapse: collapse; font-size: 12px; } .ul-dash-comp-table th, .ul-dash-comp-table td { padding: 5px 6px; border-bottom: 1px solid #e2e8f0; text-align: right; white-space: nowrap; } .ul-dash-comp-table thead th { background: #f8fafc; color: #334155; font-weight: 700; text-align: right; } .ul-dash-comp-table thead th:first-child, .ul-dash-comp-table tbody th { text-align: left; font-weight: 700; } .ul-comp-row-curr th, .ul-comp-row-curr td { font-weight: 700; color: #0f172a; } .ul-comp-row-prev th, .ul-comp-row-prev td { color: #64748b; } .ul-comp-col-total { font-weight: 800 !important; background: #f8fafc; border-left: 2px solid #cbd5e1; } .ul-diff-pos { color: #15803d !important; font-weight: 700; } .ul-diff-neg { color: #b91c1c !important; font-weight: 700; } .ul-diff-zero { color: #64748b; } /* ========================================================================== Vue 4 : Gestion des Permissions d'accès (#view-permissions) & Accès Restreint ========================================================================== */ .ul-permissions-workspace { display: flex; flex-direction: column; gap: 14px; flex: 1; overflow-y: auto; } .ul-perm-mode-options { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 10px; } .ul-perm-mode-option { display: flex; align-items: flex-start; gap: 10px; padding: 12px; border: 1px solid var(--ul-border); border-radius: 8px; cursor: pointer; background: #f8fafc; } .ul-perm-mode-option input[type="radio"] { margin-top: 3px; } .ul-perm-mode-option strong { display: block; font-size: 13px; color: #0f172a; margin-bottom: 3px; } .ul-perm-mode-option span { display: block; font-size: 12px; color: var(--ul-text-muted); line-height: 1.4; } .ul-permissions-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; flex: 1; min-height: 300px; } .ul-perm-disabled-look { opacity: 0.55; } .ul-perm-list-card { display: flex; flex-direction: column; overflow: hidden; } .ul-perm-search { margin-bottom: 10px; } .ul-perm-checklist { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 5px; max-height: 420px; } .ul-perm-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid #e5e7eb; border-radius: 6px; cursor: pointer; font-size: 13px; } .ul-perm-item.selected { background: #fef2f2; border-color: #fca5a5; } .ul-perm-item-info { flex: 1; min-width: 0; } .ul-perm-item-title { font-weight: 700; color: #0f172a; } .ul-perm-item-sub { font-size: 11.5px; color: var(--ul-text-muted); } .ul-perm-empty { text-align: center; padding: 24px; color: var(--ul-text-muted); font-size: 13px; } /* Écran d'accès refusé */ .ul-access-denied-wrapper { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; padding: 24px; box-sizing: border-box; } .ul-access-denied-card { max-width: 560px; width: 100%; background: #ffffff; border: 1px solid var(--ul-border); border-top: 5px solid var(--ul-cgt-red); border-radius: 12px; padding: 28px 32px; text-align: center; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.08); } .ul-access-denied-banner { max-width: 340px; width: 100%; height: auto; margin: 0 auto 16px; display: block; } .ul-access-denied-badge { display: inline-block; background: #fee2e2; color: #991b1b; font-weight: 800; font-size: 12px; padding: 4px 12px; border-radius: 999px; margin-bottom: 12px; } .ul-access-denied-card h2 { margin: 0 0 10px; font-size: 18px; font-weight: 800; color: #0f172a; } .ul-access-denied-card p { font-size: 13.5px; color: #374151; line-height: 1.5; margin: 0 0 14px; } .ul-access-denied-userbox { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 10px 14px; font-size: 13px; margin-bottom: 14px; display: flex; align-items: center; justify-content: center; gap: 8px; } .ul-access-denied-help { font-size: 12.5px !important; color: var(--ul-text-muted) !important; } /* Notifications Toast */ .ul-toast { position: fixed; top: 62px; right: 24px; z-index: 1200; padding: 10px 16px; border-radius: 6px; font-size: 13.5px; font-weight: 600; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2); } .ul-toast-success { background: #15803d; color: #ffffff; } .ul-toast-error { background: #b91c1c; color: #ffffff; } .ul-toast-info { background: #1d4ed8; color: #ffffff; } /* ========================================================================== Feuille de style d'impression dédiée (@media print) — Format A4 par syndiqué ========================================================================== */ @media print { @page { size: A4 portrait; margin: 15mm; } body, html, #content, .ul-app-wrapper { background: #ffffff !important; height: auto !important; overflow: visible !important; display: block !important; } #header, #navigation, #app-navigation, #app-content, .ul-no-print { display: none !important; } #ul-print-container.ul-print-only { display: block !important; width: 100% !important; } .ul-print-page { box-shadow: none !important; border: none !important; padding: 0 !important; margin: 0 !important; max-width: 100% !important; page-break-after: always; break-after: page; } .ul-print-page:last-child { page-break-after: auto; break-after: auto; } }