Checkpoint: Application Budget Renouvellement SI 2027 Itinova — Version complète avec dashboard KPIs, grille des 75 établissements, panneau de détail par établissement avec tableau de synthèse et liste des équipements filtrables.
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
/* =============================================================
|
||||
ITINOVA — Budget Renouvellement SI 2027
|
||||
Design: Corporate Modernism
|
||||
Palette: Bleu marine sidebar #1A2E4A, Blanc cassé #F8F6F2,
|
||||
Bleu Itinova #0066CC, Orange vétusté #E8820C,
|
||||
Vert récent #3D7A5F, Anthracite #2C2C2C
|
||||
Fonts: Sora (titres) + Inter (corps)
|
||||
============================================================= */
|
||||
|
||||
@import "tailwindcss";
|
||||
@import "tw-animate-css";
|
||||
|
||||
@@ -40,77 +49,53 @@
|
||||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||||
--color-sidebar-border: var(--sidebar-border);
|
||||
--color-sidebar-ring: var(--sidebar-ring);
|
||||
|
||||
/* Custom Itinova tokens */
|
||||
--font-display: 'Sora', sans-serif;
|
||||
--font-body: 'Inter', sans-serif;
|
||||
--itinova-navy: oklch(0.22 0.06 240);
|
||||
--itinova-navy-light: oklch(0.28 0.06 240);
|
||||
--itinova-blue: oklch(0.48 0.18 255);
|
||||
--itinova-orange: oklch(0.65 0.17 50);
|
||||
--itinova-green: oklch(0.50 0.10 160);
|
||||
--itinova-red: oklch(0.55 0.20 25);
|
||||
--itinova-bg: oklch(0.985 0.005 80);
|
||||
}
|
||||
|
||||
:root {
|
||||
--primary: var(--color-blue-700);
|
||||
--primary-foreground: var(--color-blue-50);
|
||||
--sidebar-primary: var(--color-blue-600);
|
||||
--sidebar-primary-foreground: var(--color-blue-50);
|
||||
--chart-1: var(--color-blue-300);
|
||||
--chart-2: var(--color-blue-500);
|
||||
--chart-3: var(--color-blue-600);
|
||||
--chart-4: var(--color-blue-700);
|
||||
--chart-5: var(--color-blue-800);
|
||||
--radius: 0.65rem;
|
||||
--background: oklch(1 0 0);
|
||||
--foreground: oklch(0.235 0.015 65);
|
||||
--radius: 0.5rem;
|
||||
--background: oklch(0.985 0.005 80);
|
||||
--foreground: oklch(0.18 0.01 260);
|
||||
--card: oklch(1 0 0);
|
||||
--card-foreground: oklch(0.235 0.015 65);
|
||||
--card-foreground: oklch(0.18 0.01 260);
|
||||
--popover: oklch(1 0 0);
|
||||
--popover-foreground: oklch(0.235 0.015 65);
|
||||
--secondary: oklch(0.98 0.001 286.375);
|
||||
--secondary-foreground: oklch(0.4 0.015 65);
|
||||
--muted: oklch(0.967 0.001 286.375);
|
||||
--muted-foreground: oklch(0.552 0.016 285.938);
|
||||
--accent: oklch(0.967 0.001 286.375);
|
||||
--accent-foreground: oklch(0.141 0.005 285.823);
|
||||
--destructive: oklch(0.577 0.245 27.325);
|
||||
--destructive-foreground: oklch(0.985 0 0);
|
||||
--border: oklch(0.92 0.004 286.32);
|
||||
--input: oklch(0.92 0.004 286.32);
|
||||
--ring: oklch(0.623 0.214 259.815);
|
||||
--sidebar: oklch(0.985 0 0);
|
||||
--sidebar-foreground: oklch(0.235 0.015 65);
|
||||
--sidebar-accent: oklch(0.967 0.001 286.375);
|
||||
--sidebar-accent-foreground: oklch(0.141 0.005 285.823);
|
||||
--sidebar-border: oklch(0.92 0.004 286.32);
|
||||
--sidebar-ring: oklch(0.623 0.214 259.815);
|
||||
}
|
||||
|
||||
.dark {
|
||||
--primary: var(--color-blue-700);
|
||||
--primary-foreground: var(--color-blue-50);
|
||||
--sidebar-primary: var(--color-blue-500);
|
||||
--sidebar-primary-foreground: var(--color-blue-50);
|
||||
--background: oklch(0.141 0.005 285.823);
|
||||
--foreground: oklch(0.85 0.005 65);
|
||||
--card: oklch(0.21 0.006 285.885);
|
||||
--card-foreground: oklch(0.85 0.005 65);
|
||||
--popover: oklch(0.21 0.006 285.885);
|
||||
--popover-foreground: oklch(0.85 0.005 65);
|
||||
--secondary: oklch(0.24 0.006 286.033);
|
||||
--secondary-foreground: oklch(0.7 0.005 65);
|
||||
--muted: oklch(0.274 0.006 286.033);
|
||||
--muted-foreground: oklch(0.705 0.015 286.067);
|
||||
--accent: oklch(0.274 0.006 286.033);
|
||||
--accent-foreground: oklch(0.92 0.005 65);
|
||||
--destructive: oklch(0.704 0.191 22.216);
|
||||
--destructive-foreground: oklch(0.985 0 0);
|
||||
--border: oklch(1 0 0 / 10%);
|
||||
--input: oklch(1 0 0 / 15%);
|
||||
--ring: oklch(0.488 0.243 264.376);
|
||||
--chart-1: var(--color-blue-300);
|
||||
--chart-2: var(--color-blue-500);
|
||||
--chart-3: var(--color-blue-600);
|
||||
--chart-4: var(--color-blue-700);
|
||||
--chart-5: var(--color-blue-800);
|
||||
--sidebar: oklch(0.21 0.006 285.885);
|
||||
--sidebar-foreground: oklch(0.85 0.005 65);
|
||||
--sidebar-accent: oklch(0.274 0.006 286.033);
|
||||
--sidebar-accent-foreground: oklch(0.985 0 0);
|
||||
--sidebar-border: oklch(1 0 0 / 10%);
|
||||
--sidebar-ring: oklch(0.488 0.243 264.376);
|
||||
--popover-foreground: oklch(0.18 0.01 260);
|
||||
--primary: oklch(0.48 0.18 255);
|
||||
--primary-foreground: oklch(0.98 0 0);
|
||||
--secondary: oklch(0.95 0.005 240);
|
||||
--secondary-foreground: oklch(0.22 0.06 240);
|
||||
--muted: oklch(0.94 0.005 80);
|
||||
--muted-foreground: oklch(0.50 0.01 260);
|
||||
--accent: oklch(0.93 0.01 240);
|
||||
--accent-foreground: oklch(0.22 0.06 240);
|
||||
--destructive: oklch(0.55 0.20 25);
|
||||
--destructive-foreground: oklch(0.98 0 0);
|
||||
--border: oklch(0.88 0.005 260);
|
||||
--input: oklch(0.92 0.005 260);
|
||||
--ring: oklch(0.48 0.18 255);
|
||||
--chart-1: oklch(0.48 0.18 255);
|
||||
--chart-2: oklch(0.65 0.17 50);
|
||||
--chart-3: oklch(0.50 0.10 160);
|
||||
--chart-4: oklch(0.55 0.20 25);
|
||||
--chart-5: oklch(0.22 0.06 240);
|
||||
--sidebar: oklch(0.22 0.06 240);
|
||||
--sidebar-foreground: oklch(0.92 0.01 240);
|
||||
--sidebar-primary: oklch(0.48 0.18 255);
|
||||
--sidebar-primary-foreground: oklch(0.98 0 0);
|
||||
--sidebar-accent: oklch(0.28 0.06 240);
|
||||
--sidebar-accent-foreground: oklch(0.92 0.01 240);
|
||||
--sidebar-border: oklch(0.30 0.05 240);
|
||||
--sidebar-ring: oklch(0.48 0.18 255);
|
||||
}
|
||||
|
||||
@layer base {
|
||||
@@ -119,6 +104,10 @@
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: 'Sora', sans-serif;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[role="button"]:not([aria-disabled="true"]),
|
||||
@@ -134,24 +123,11 @@
|
||||
}
|
||||
|
||||
@layer components {
|
||||
/**
|
||||
* Custom container utility that centers content and adds responsive padding.
|
||||
*
|
||||
* This overrides Tailwind's default container behavior to:
|
||||
* - Auto-center content (mx-auto)
|
||||
* - Add responsive horizontal padding
|
||||
* - Set max-width for large screens
|
||||
*
|
||||
* Usage: <div className="container">...</div>
|
||||
*
|
||||
* For custom widths, use max-w-* utilities directly:
|
||||
* <div className="max-w-6xl mx-auto px-4">...</div>
|
||||
*/
|
||||
.container {
|
||||
width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
padding-left: 1rem; /* 16px - mobile padding */
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
@@ -162,16 +138,76 @@
|
||||
|
||||
@media (min-width: 640px) {
|
||||
.container {
|
||||
padding-left: 1.5rem; /* 24px - tablet padding */
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.container {
|
||||
padding-left: 2rem; /* 32px - desktop padding */
|
||||
padding-left: 2rem;
|
||||
padding-right: 2rem;
|
||||
max-width: 1280px; /* Standard content width */
|
||||
max-width: 1400px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Barre de vétusté */
|
||||
.vetusite-bar {
|
||||
height: 4px;
|
||||
border-radius: 2px;
|
||||
transition: width 0.6s ease-out;
|
||||
}
|
||||
|
||||
/* Card établissement */
|
||||
.etab-card {
|
||||
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
||||
}
|
||||
.etab-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 24px oklch(0.22 0.06 240 / 0.12);
|
||||
}
|
||||
|
||||
/* Liseré coloré en haut des sections */
|
||||
.section-accent {
|
||||
border-top: 3px solid oklch(0.48 0.18 255);
|
||||
}
|
||||
|
||||
/* Chiffre clé */
|
||||
.kpi-value {
|
||||
font-family: 'Sora', sans-serif;
|
||||
font-weight: 800;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
}
|
||||
|
||||
/* Animations d'entrée */
|
||||
@keyframes fadeSlideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(12px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.animate-fade-slide-up {
|
||||
animation: fadeSlideUp 0.35s ease-out forwards;
|
||||
}
|
||||
|
||||
/* Scrollbar personnalisée */
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: oklch(0.94 0.005 80);
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: oklch(0.70 0.01 260);
|
||||
border-radius: 3px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: oklch(0.48 0.18 255);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user