feat(marketing): hero 2-col avec mockup app DictIA animé interactif
Refonte de la section hero: passage d'un layout centré single-col
à un grid 2 colonnes (texte gauche + mockup app à droite) sur lg+,
avec préservation du centrage actuel sur mobile/tablette.
- Mockup ~560×500px reproduit l'interface DictIA réelle:
- Window chrome (3 dots traffic light + tab "DictIA — Enquêter")
- Sidebar: 6 enregistrements groupés (Semaine dernière 2 + Mois
dernier 4) avec chips colorés (En cours, Barreau Confidentiel,
CPA Corporatif, Urgent Client) + bouton + recording rounded-none
- Center: header card avec 4 metas (avatars/calendar/clock/file),
audio player avec progress bar animée 50%-75% (15s loop),
transcript 5 lignes speaker (Allison/SPEAKER_02) où la ligne
active cycle toutes les 2.8s via Alpine x-data idx
- Right: tabs Résumé/Notes/Discuter (Résumé actif), résumé
exemple + 4 points clés
- Tilt subtil rotate-1 → straighten + scale au hover (lg only)
- 2 glow orbs flottants décoratifs derrière (bg-brand-b1/15 +
bg-brand-b3/10) avec tc-float-y reverse
- role="img" + aria-label descriptif sur le mockup complet
- prefers-reduced-motion désactive toutes animations + freeze
progress bar à 60% + retire transform tilt
- Tous les éléments interactifs ont tabindex="-1" + aria-hidden
car purement décoratifs (pas de duplication d'app réelle)
- Aucun emoji (SVG inline stroke="currentColor" partout)
- Système border-radius respecté: rounded-none (boutons/inputs/
tuiles), rounded (4px wrapper card), rounded-full (chips/avatar)
Tests: 6/6 hero tests pass (eyebrow, h1+grad-text, dual CTA,
cosmic orbs, social proof, animations staggered). Les 3 fails
restants (test_landing_has_main_nav, test_footer_links_complete,
test_trust_bar_has_eyebrow_factual_phrasing) sont préexistants
et sans rapport avec la refonte hero.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
--color-green-700: oklch(52.7% 0.154 150.069);
|
||||
--color-green-800: oklch(44.8% 0.119 151.328);
|
||||
--color-green-900: oklch(39.3% 0.095 152.535);
|
||||
--color-emerald-300: oklch(84.5% 0.143 164.978);
|
||||
--color-emerald-500: oklch(69.6% 0.17 162.48);
|
||||
--color-emerald-600: oklch(59.6% 0.145 163.225);
|
||||
--color-emerald-700: oklch(50.8% 0.118 165.612);
|
||||
@@ -75,6 +76,7 @@
|
||||
--color-violet-600: oklch(54.1% 0.281 293.009);
|
||||
--color-violet-700: oklch(49.1% 0.27 292.581);
|
||||
--color-violet-900: oklch(38% 0.189 293.745);
|
||||
--color-purple-300: oklch(82.7% 0.119 306.383);
|
||||
--color-purple-400: oklch(71.4% 0.203 305.504);
|
||||
--color-purple-500: oklch(62.7% 0.265 303.9);
|
||||
--color-purple-600: oklch(55.8% 0.288 302.321);
|
||||
@@ -141,6 +143,7 @@
|
||||
--animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
||||
--blur-sm: 8px;
|
||||
--blur-xl: 24px;
|
||||
--blur-3xl: 64px;
|
||||
--default-transition-duration: 150ms;
|
||||
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
@@ -354,6 +357,9 @@
|
||||
.sticky {
|
||||
position: sticky;
|
||||
}
|
||||
.-inset-8 {
|
||||
inset: calc(var(--spacing) * -8);
|
||||
}
|
||||
.inset-0 {
|
||||
inset: calc(var(--spacing) * 0);
|
||||
}
|
||||
@@ -369,9 +375,15 @@
|
||||
.end {
|
||||
inset-inline-end: var(--spacing);
|
||||
}
|
||||
.-top-1 {
|
||||
top: calc(var(--spacing) * -1);
|
||||
}
|
||||
.-top-3 {
|
||||
top: calc(var(--spacing) * -3);
|
||||
}
|
||||
.-top-10 {
|
||||
top: calc(var(--spacing) * -10);
|
||||
}
|
||||
.top-0 {
|
||||
top: calc(var(--spacing) * 0);
|
||||
}
|
||||
@@ -411,6 +423,9 @@
|
||||
.top-full {
|
||||
top: 100%;
|
||||
}
|
||||
.-right-6 {
|
||||
right: calc(var(--spacing) * -6);
|
||||
}
|
||||
.right-0 {
|
||||
right: calc(var(--spacing) * 0);
|
||||
}
|
||||
@@ -438,6 +453,9 @@
|
||||
.right-4 {
|
||||
right: calc(var(--spacing) * 4);
|
||||
}
|
||||
.-bottom-10 {
|
||||
bottom: calc(var(--spacing) * -10);
|
||||
}
|
||||
.bottom-0 {
|
||||
bottom: calc(var(--spacing) * 0);
|
||||
}
|
||||
@@ -450,6 +468,9 @@
|
||||
.bottom-full {
|
||||
bottom: 100%;
|
||||
}
|
||||
.-left-10 {
|
||||
left: calc(var(--spacing) * -10);
|
||||
}
|
||||
.left-0 {
|
||||
left: calc(var(--spacing) * 0);
|
||||
}
|
||||
@@ -540,8 +561,8 @@
|
||||
.-mx-4 {
|
||||
margin-inline: calc(var(--spacing) * -4);
|
||||
}
|
||||
.mx-2 {
|
||||
margin-inline: calc(var(--spacing) * 2);
|
||||
.mx-1 {
|
||||
margin-inline: calc(var(--spacing) * 1);
|
||||
}
|
||||
.mx-3 {
|
||||
margin-inline: calc(var(--spacing) * 3);
|
||||
@@ -627,6 +648,9 @@
|
||||
.mr-4 {
|
||||
margin-right: calc(var(--spacing) * 4);
|
||||
}
|
||||
.-mb-\[0\.5rem\] {
|
||||
margin-bottom: calc(0.5rem * -1);
|
||||
}
|
||||
.-mb-px {
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
@@ -783,6 +807,9 @@
|
||||
.h-64 {
|
||||
height: calc(var(--spacing) * 64);
|
||||
}
|
||||
.h-72 {
|
||||
height: calc(var(--spacing) * 72);
|
||||
}
|
||||
.h-\[62px\] {
|
||||
height: 62px;
|
||||
}
|
||||
@@ -795,6 +822,9 @@
|
||||
.h-\[450px\] {
|
||||
height: 450px;
|
||||
}
|
||||
.h-\[460px\] {
|
||||
height: 460px;
|
||||
}
|
||||
.h-\[500px\] {
|
||||
height: 500px;
|
||||
}
|
||||
@@ -924,6 +954,9 @@
|
||||
.w-56 {
|
||||
width: calc(var(--spacing) * 56);
|
||||
}
|
||||
.w-64 {
|
||||
width: calc(var(--spacing) * 64);
|
||||
}
|
||||
.w-72 {
|
||||
width: calc(var(--spacing) * 72);
|
||||
}
|
||||
@@ -1089,6 +1122,9 @@
|
||||
.transform {
|
||||
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
|
||||
}
|
||||
.animate-plus-breathe {
|
||||
animation: plus-breathe 2s ease-in-out infinite;
|
||||
}
|
||||
.animate-pulse {
|
||||
animation: var(--animate-pulse);
|
||||
}
|
||||
@@ -1157,6 +1193,9 @@
|
||||
.grid-cols-7 {
|
||||
grid-template-columns: repeat(7, minmax(0, 1fr));
|
||||
}
|
||||
.grid-cols-\[180px_1fr_170px\] {
|
||||
grid-template-columns: 180px 1fr 170px;
|
||||
}
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
@@ -1220,6 +1259,9 @@
|
||||
.gap-8 {
|
||||
gap: calc(var(--spacing) * 8);
|
||||
}
|
||||
.gap-12 {
|
||||
gap: calc(var(--spacing) * 12);
|
||||
}
|
||||
.gap-\[1\.5px\] {
|
||||
gap: 1.5px;
|
||||
}
|
||||
@@ -1272,6 +1314,10 @@
|
||||
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
|
||||
}
|
||||
}
|
||||
.gap-x-2 {
|
||||
-moz-column-gap: calc(var(--spacing) * 2);
|
||||
column-gap: calc(var(--spacing) * 2);
|
||||
}
|
||||
.gap-x-3 {
|
||||
-moz-column-gap: calc(var(--spacing) * 3);
|
||||
column-gap: calc(var(--spacing) * 3);
|
||||
@@ -1515,6 +1561,9 @@
|
||||
border-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);
|
||||
}
|
||||
}
|
||||
.border-brand-b1 {
|
||||
border-color: #0062ff;
|
||||
}
|
||||
.border-brand-border {
|
||||
border-color: #e6ebf2;
|
||||
}
|
||||
@@ -1584,6 +1633,12 @@
|
||||
border-color: color-mix(in oklab, var(--color-violet-400) 50%, transparent);
|
||||
}
|
||||
}
|
||||
.border-white\/10 {
|
||||
border-color: color-mix(in srgb, #fff 10%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
border-color: color-mix(in oklab, var(--color-white) 10%, transparent);
|
||||
}
|
||||
}
|
||||
.border-white\/20 {
|
||||
border-color: color-mix(in srgb, #fff 20%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
@@ -1596,6 +1651,18 @@
|
||||
border-color: color-mix(in oklab, var(--color-white) 30%, transparent);
|
||||
}
|
||||
}
|
||||
.border-white\/\[0\.05\] {
|
||||
border-color: color-mix(in srgb, #fff 5%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
|
||||
}
|
||||
}
|
||||
.border-white\/\[0\.06\] {
|
||||
border-color: color-mix(in srgb, #fff 6%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
border-color: color-mix(in oklab, var(--color-white) 6%, transparent);
|
||||
}
|
||||
}
|
||||
.border-white\/\[0\.08\] {
|
||||
border-color: color-mix(in srgb, #fff 8%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
@@ -1764,6 +1831,12 @@
|
||||
.bg-blue-600 {
|
||||
background-color: var(--color-blue-600);
|
||||
}
|
||||
.bg-brand-b1\/10 {
|
||||
background-color: color-mix(in oklab, #0062ff 10%, transparent);
|
||||
}
|
||||
.bg-brand-b1\/15 {
|
||||
background-color: color-mix(in oklab, #0062ff 15%, transparent);
|
||||
}
|
||||
.bg-brand-b3\/10 {
|
||||
background-color: color-mix(in oklab, #00c896 10%, transparent);
|
||||
}
|
||||
@@ -1788,6 +1861,12 @@
|
||||
.bg-brand-navy2 {
|
||||
background-color: #0b1525;
|
||||
}
|
||||
.bg-emerald-500\/20 {
|
||||
background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 20%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-emerald-500) 20%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-emerald-600 {
|
||||
background-color: var(--color-emerald-600);
|
||||
}
|
||||
@@ -1920,6 +1999,12 @@
|
||||
.bg-white {
|
||||
background-color: var(--color-white);
|
||||
}
|
||||
.bg-white\/10 {
|
||||
background-color: color-mix(in srgb, #fff 10%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-white\/20 {
|
||||
background-color: color-mix(in srgb, #fff 20%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
@@ -1938,6 +2023,18 @@
|
||||
background-color: color-mix(in oklab, var(--color-white) 95%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-white\/\[0\.03\] {
|
||||
background-color: color-mix(in srgb, #fff 3%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-white) 3%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-white\/\[0\.04\] {
|
||||
background-color: color-mix(in srgb, #fff 4%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-white) 4%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-white\/\[0\.05\] {
|
||||
background-color: color-mix(in srgb, #fff 5%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
@@ -1950,6 +2047,12 @@
|
||||
background-color: color-mix(in oklab, var(--color-white) 6%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-white\/\[0\.08\] {
|
||||
background-color: color-mix(in srgb, #fff 8%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-white) 8%, transparent);
|
||||
}
|
||||
}
|
||||
.bg-yellow-50 {
|
||||
background-color: var(--color-yellow-50);
|
||||
}
|
||||
@@ -2233,6 +2336,9 @@
|
||||
.pb-0 {
|
||||
padding-bottom: calc(var(--spacing) * 0);
|
||||
}
|
||||
.pb-1 {
|
||||
padding-bottom: calc(var(--spacing) * 1);
|
||||
}
|
||||
.pb-2 {
|
||||
padding-bottom: calc(var(--spacing) * 2);
|
||||
}
|
||||
@@ -2345,6 +2451,9 @@
|
||||
.text-\[11px\] {
|
||||
font-size: 11px;
|
||||
}
|
||||
.text-\[13px\] {
|
||||
font-size: 13px;
|
||||
}
|
||||
.text-\[15px\] {
|
||||
font-size: 15px;
|
||||
}
|
||||
@@ -2420,6 +2529,10 @@
|
||||
--tw-tracking: 0.2em;
|
||||
letter-spacing: 0.2em;
|
||||
}
|
||||
.tracking-\[0\.12em\] {
|
||||
--tw-tracking: 0.12em;
|
||||
letter-spacing: 0.12em;
|
||||
}
|
||||
.tracking-tight {
|
||||
--tw-tracking: var(--tracking-tight);
|
||||
letter-spacing: var(--tracking-tight);
|
||||
@@ -2520,6 +2633,9 @@
|
||||
color: color-mix(in oklab, var(--color-amber-900) 90%, transparent);
|
||||
}
|
||||
}
|
||||
.text-blue-300 {
|
||||
color: var(--color-blue-300);
|
||||
}
|
||||
.text-blue-400 {
|
||||
color: var(--color-blue-400);
|
||||
}
|
||||
@@ -2565,6 +2681,9 @@
|
||||
.text-brand-navy\/90 {
|
||||
color: color-mix(in oklab, #060d1a 90%, transparent);
|
||||
}
|
||||
.text-emerald-300 {
|
||||
color: var(--color-emerald-300);
|
||||
}
|
||||
.text-emerald-500 {
|
||||
color: var(--color-emerald-500);
|
||||
}
|
||||
@@ -2607,6 +2726,9 @@
|
||||
.text-orange-600 {
|
||||
color: var(--color-orange-600);
|
||||
}
|
||||
.text-purple-300 {
|
||||
color: var(--color-purple-300);
|
||||
}
|
||||
.text-purple-500 {
|
||||
color: var(--color-purple-500);
|
||||
}
|
||||
@@ -2616,6 +2738,9 @@
|
||||
.text-red-100 {
|
||||
color: var(--color-red-100);
|
||||
}
|
||||
.text-red-300 {
|
||||
color: var(--color-red-300);
|
||||
}
|
||||
.text-red-400 {
|
||||
color: var(--color-red-400);
|
||||
}
|
||||
@@ -2688,6 +2813,12 @@
|
||||
color: color-mix(in oklab, var(--color-white) 80%, transparent);
|
||||
}
|
||||
}
|
||||
.text-white\/90 {
|
||||
color: color-mix(in srgb, #fff 90%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
color: color-mix(in oklab, var(--color-white) 90%, transparent);
|
||||
}
|
||||
}
|
||||
.text-yellow-400 {
|
||||
color: var(--color-yellow-400);
|
||||
}
|
||||
@@ -2741,6 +2872,20 @@
|
||||
color: var(--text-muted);
|
||||
}
|
||||
}
|
||||
.placeholder-white\/40 {
|
||||
&::-moz-placeholder {
|
||||
color: color-mix(in srgb, #fff 40%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
color: color-mix(in oklab, var(--color-white) 40%, transparent);
|
||||
}
|
||||
}
|
||||
&::placeholder {
|
||||
color: color-mix(in srgb, #fff 40%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
color: color-mix(in oklab, var(--color-white) 40%, transparent);
|
||||
}
|
||||
}
|
||||
}
|
||||
.accent-brand-b1 {
|
||||
accent-color: #0062ff;
|
||||
}
|
||||
@@ -2810,6 +2955,12 @@
|
||||
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
||||
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
||||
}
|
||||
.shadow-black\/40 {
|
||||
--tw-shadow-color: color-mix(in srgb, #000 40%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent);
|
||||
}
|
||||
}
|
||||
.ring-\[var\(--border-accent\)\] {
|
||||
--tw-ring-color: var(--border-accent);
|
||||
}
|
||||
@@ -2837,6 +2988,10 @@
|
||||
--tw-blur: blur(8px);
|
||||
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
||||
}
|
||||
.blur-3xl {
|
||||
--tw-blur: blur(var(--blur-3xl));
|
||||
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
||||
}
|
||||
.filter {
|
||||
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
||||
}
|
||||
@@ -3481,6 +3636,16 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.hover\:bg-white\/\[0\.04\] {
|
||||
&:hover {
|
||||
@media (hover: hover) {
|
||||
background-color: color-mix(in srgb, #fff 4%, transparent);
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
background-color: color-mix(in oklab, var(--color-white) 4%, transparent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.hover\:bg-white\/\[0\.05\] {
|
||||
&:hover {
|
||||
@media (hover: hover) {
|
||||
@@ -4520,6 +4685,11 @@
|
||||
margin-inline: calc(var(--spacing) * -8);
|
||||
}
|
||||
}
|
||||
.lg\:mx-0 {
|
||||
@media (width >= 64rem) {
|
||||
margin-inline: calc(var(--spacing) * 0);
|
||||
}
|
||||
}
|
||||
.lg\:block {
|
||||
@media (width >= 64rem) {
|
||||
display: block;
|
||||
@@ -4596,16 +4766,31 @@
|
||||
grid-template-columns: 1fr 240px;
|
||||
}
|
||||
}
|
||||
.lg\:grid-cols-\[1fr_minmax\(0\,560px\)\] {
|
||||
@media (width >= 64rem) {
|
||||
grid-template-columns: 1fr minmax(0,560px);
|
||||
}
|
||||
}
|
||||
.lg\:flex-row {
|
||||
@media (width >= 64rem) {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
.lg\:justify-start {
|
||||
@media (width >= 64rem) {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
}
|
||||
.lg\:gap-10 {
|
||||
@media (width >= 64rem) {
|
||||
gap: calc(var(--spacing) * 10);
|
||||
}
|
||||
}
|
||||
.lg\:gap-16 {
|
||||
@media (width >= 64rem) {
|
||||
gap: calc(var(--spacing) * 16);
|
||||
}
|
||||
}
|
||||
.lg\:border-r {
|
||||
@media (width >= 64rem) {
|
||||
border-right-style: var(--tw-border-style);
|
||||
@@ -4637,6 +4822,11 @@
|
||||
padding-bottom: calc(var(--spacing) * 8);
|
||||
}
|
||||
}
|
||||
.lg\:text-left {
|
||||
@media (width >= 64rem) {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
.xl\:grid-cols-4 {
|
||||
@media (width >= 80rem) {
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
@@ -5484,6 +5674,14 @@
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
@keyframes plus-breathe {
|
||||
0%, 100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
}
|
||||
@layer properties {
|
||||
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
|
||||
*, ::before, ::after, ::backdrop {
|
||||
|
||||
Reference in New Issue
Block a user