SPB Git

spb/groupe-ka Public

Groupe KA — site du holding + KA ID (compte unique & SSO des 7 plateformes). Next.js 16, SQLite, Google & Apple login.

TypeScript 93.9% CSS 6%
16.7 KB · 846 lines css
Raw Blame History
1/*2 * Auteur : Simon-Pierre Boucher — contact@spboucher.ai3 *4 * Groupe KA — système de design « éditorial sharp »5 * (identité partagée avec Lou-Ka, Vrai-Prix et ValoPlex)6 * Typo display Space Grotesk / texte Inter / micro-étiquettes JetBrains Mono7 * Signature : bordures encre + ombres décalées (néo-brutalisme raffiné)8 * Accent électrique lime #d9f26b sur encre verte profonde9 */1011@import "tailwindcss";1213:root {14  --paper: #f5f3ee;15  --surface: #ffffff;16  --surface-2: #faf9f5;17  --ink: #141814;18  --ink-2: #4d5551;19  --ink-3: #8b928c;20  --line: rgba(20, 24, 20, 0.14);21  --line-strong: rgba(20, 24, 20, 0.85);22  --green: #1c5c41;23  --green-deep: #123f2e;24  --lime: #d9f26b;25  --lime-soft: #f0f9d2;26  --amber: #e8a33d;27  --amber-soft: #fdf3e2;28  --danger: #b3423a;29  --danger-soft: #fbe9e7;3031  --r-card: 10px;32  --r-ctl: 6px;33  --shadow-flat: 0 1px 2px rgba(20, 24, 20, 0.05);34  --shadow-off: 6px 6px 0 var(--ink);35  --shadow-off-soft: 8px 8px 0 rgba(20, 24, 20, 0.08);36}3738@theme inline {39  --color-paper: var(--paper);40  --color-surface: var(--surface);41  --color-surface-2: var(--surface-2);42  --color-ink: var(--ink);43  --color-ink-2: var(--ink-2);44  --color-ink-3: var(--ink-3);45  --color-green: var(--green);46  --color-green-deep: var(--green-deep);47  --color-lime: var(--lime);48  --color-lime-soft: var(--lime-soft);49  --color-amber: var(--amber);50  --color-amber-soft: var(--amber-soft);51  --color-danger: var(--danger);52  --font-display: var(--font-space-grotesk), system-ui, sans-serif;53  --font-body: var(--font-inter), system-ui, sans-serif;54  --font-mono: var(--font-jetbrains), ui-monospace, monospace;55}5657html {58  scroll-behavior: smooth;59}6061body {62  background: var(--paper);63  color: var(--ink);64  font-family: var(--font-body);65  font-size: 15px;66  line-height: 1.55;67  -webkit-font-smoothing: antialiased;68}6970/* Grain de film pleine page — jamais de z-index sur body > * (position: relative71   seulement) pour ne pas casser les utilitaires z-* de Tailwind. */72body::before {73  content: "";74  position: fixed;75  inset: 0;76  pointer-events: none;77  opacity: 0.35;78  z-index: 9999;79  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='linear' slope='0.06'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");80}81body > * {82  position: relative;83}8485h1,86h2,87h3,88h4 {89  font-family: var(--font-display);90  letter-spacing: -0.03em;91}9293::selection {94  background: var(--lime);95  color: var(--ink);96}9798:focus-visible {99  outline: 2px solid var(--green);100  outline-offset: 2px;101}102103/* ---------- Micro-typographie ---------- */104105.kicker {106  display: inline-flex;107  align-items: center;108  gap: 10px;109  font-family: var(--font-mono);110  font-size: 11.5px;111  font-weight: 500;112  text-transform: uppercase;113  letter-spacing: 0.12em;114  color: var(--green);115}116.kicker::before {117  content: "";118  width: 22px;119  height: 2px;120  background: var(--green);121}122123.klabel {124  font-family: var(--font-mono);125  font-size: 10px;126  font-weight: 700;127  text-transform: uppercase;128  letter-spacing: 0.1em;129  color: var(--ink-3);130}131132.gk-display {133  font-family: var(--font-display);134}135.gk-mono {136  font-family: var(--font-mono);137}138139/* Traitements de titre signature */140.outline-txt {141  color: transparent;142  -webkit-text-stroke: 2px var(--ink);143}144.hl {145  display: inline-block;146  background: var(--lime);147  border-radius: 8px;148  padding: 0 10px 2px;149  transform: rotate(-1deg);150}151152/* ---------- Cartes ---------- */153154.gk-card {155  background: var(--surface);156  border: 1.5px solid var(--ink);157  border-radius: var(--r-card);158  box-shadow: var(--shadow-off-soft);159}160.gk-card-hover {161  transition:162    transform 0.18s ease,163    box-shadow 0.18s ease;164}165.gk-card-hover:hover {166  transform: translate(-3px, -3px);167  box-shadow: var(--shadow-off);168}169170/* ---------- Boutons ---------- */171172.btn {173  display: inline-flex;174  align-items: center;175  justify-content: center;176  gap: 8px;177  min-height: 44px;178  padding: 10px 20px;179  border: 1.5px solid var(--ink);180  border-radius: var(--r-ctl);181  font-family: var(--font-display);182  font-size: 14px;183  font-weight: 700;184  cursor: pointer;185  text-decoration: none;186  transition:187    background 0.15s ease,188    transform 0.1s ease,189    box-shadow 0.1s ease;190}191.btn:active {192  transform: translate(2px, 2px);193  box-shadow: none !important;194}195.btn-primary {196  background: var(--ink);197  color: var(--lime);198  box-shadow: 4px 4px 0 rgba(20, 24, 20, 0.25);199}200.btn-primary:hover {201  background: var(--green-deep);202}203.btn-ghost {204  background: transparent;205  color: var(--ink);206}207.btn-ghost:hover {208  background: var(--lime);209}210.btn-lime {211  background: var(--lime);212  color: var(--ink);213  box-shadow: 4px 4px 0 rgba(217, 242, 107, 0.25);214}215.btn-lime:hover {216  background: var(--lime-soft);217}218219/* Boutons OAuth (connexion) — couleurs officielles des marques,220   mais bordure encre + ombre dure pour rester dans le langage du site. */221.btn-google {222  background: #ffffff;223  color: #1f1f1f;224  box-shadow: 4px 4px 0 rgba(20, 24, 20, 0.25);225}226.btn-google:hover {227  background: #f4f4f1;228}229.btn-apple {230  background: #000000;231  color: #ffffff;232  box-shadow: 4px 4px 0 rgba(20, 24, 20, 0.25);233}234.btn-apple:hover {235  background: #1d1d1f;236}237238/* ---------- Champs de formulaire (KA ID) ---------- */239240.field {241  display: block;242  width: 100%;243  padding: 11px 14px;244  background: var(--surface);245  border: 1.5px solid var(--ink);246  border-radius: var(--r-ctl);247  font-family: var(--font-body);248  font-size: 14px;249  color: var(--ink);250  box-shadow: 3px 3px 0 rgba(20, 24, 20, 0.08);251  transition: box-shadow 0.15s ease;252}253.field::placeholder {254  color: var(--ink-3);255}256.field:focus {257  outline: 2px solid var(--green);258  outline-offset: 1px;259  box-shadow: 3px 3px 0 rgba(28, 92, 65, 0.25);260}261262/* ---------- Carte de membre Groupe KA (même gabarit que Lou·Ka) ---------- */263264.mc {265  position: relative;266  max-width: 520px;267  overflow: hidden;268  margin-top: 28px;269  background: var(--ink);270  color: var(--paper);271  border: 2px solid var(--ink);272  border-radius: 16px;273  padding: 24px 26px 0;274  box-shadow: 10px 10px 0 rgba(20, 24, 20, 0.18);275}276.mc-watermark {277  position: absolute;278  right: -18px;279  top: -34px;280  pointer-events: none;281  font-family: var(--font-display);282  font-weight: 700;283  font-size: 170px;284  letter-spacing: -0.06em;285  color: rgba(217, 242, 107, 0.07);286  transform: rotate(-8deg);287  line-height: 1;288}289.mc-head {290  display: flex;291  align-items: baseline;292  justify-content: space-between;293  gap: 12px;294  flex-wrap: wrap;295}296.mc-brand {297  font-family: var(--font-display);298  font-weight: 700;299  font-size: 24px;300  letter-spacing: -0.04em;301}302.mc-ka {303  background: var(--lime);304  color: var(--ink);305  padding: 1px 6px 3px;306  border-radius: 5px;307  margin-left: 3px;308  display: inline-block;309  transform: rotate(-2deg);310}311.mc-label {312  font-family: var(--font-mono);313  font-size: 10px;314  text-transform: uppercase;315  letter-spacing: 0.16em;316  color: rgba(245, 243, 238, 0.55);317}318.mc-id-row {319  margin: 26px 0 22px;320  display: flex;321  align-items: center;322  justify-content: space-between;323  gap: 16px;324}325.mc-id-block {326  display: flex;327  flex-direction: column;328  gap: 4px;329  min-width: 0;330}331.mc-qr {332  width: 78px;333  height: 78px;334  flex: none;335  border-radius: 10px;336  border: 2px solid var(--lime);337  background: #ffffff;338  padding: 5px;339}340.mc-id-label {341  font-family: var(--font-mono);342  font-size: 10px;343  text-transform: uppercase;344  letter-spacing: 0.2em;345  color: rgba(217, 242, 107, 0.65);346}347.mc-id {348  font-family: var(--font-mono);349  font-weight: 700;350  color: var(--lime);351  font-size: clamp(22px, 6vw, 34px);352  letter-spacing: 0.14em;353  text-shadow: 0 0 24px rgba(217, 242, 107, 0.35);354}355.mc-foot {356  display: flex;357  align-items: flex-end;358  justify-content: space-between;359  gap: 14px;360  padding-bottom: 18px;361}362.mc-holder {363  display: flex;364  flex-direction: column;365  gap: 2px;366  min-width: 0;367}368.mc-holder-name {369  font-weight: 600;370  font-size: 15px;371  overflow: hidden;372  text-overflow: ellipsis;373  white-space: nowrap;374}375.mc-holder-role {376  display: inline-block;377  align-self: flex-start;378  margin: 3px 0 2px;379  padding: 2px 8px 3px;380  border-radius: 5px;381  background: var(--lime);382  color: var(--ink);383  font-family: var(--font-mono);384  font-size: 9.5px;385  font-weight: 700;386  letter-spacing: 0.12em;387  transform: rotate(-1deg);388}389.mc-holder-since {390  font-family: var(--font-mono);391  font-size: 10.5px;392  color: rgba(245, 243, 238, 0.5);393  letter-spacing: 0.06em;394}395.mc-avatar {396  width: 52px;397  height: 52px;398  border-radius: 999px;399  border: 2px solid var(--lime);400  flex: none;401  object-fit: cover;402}403.mc-avatar-empty {404  display: flex;405  align-items: center;406  justify-content: center;407  background: var(--lime);408  color: var(--ink);409  font-family: var(--font-display);410  font-weight: 700;411  font-size: 22px;412}413.mc-strip {414  display: flex;415  gap: 5px;416  margin: 0 -26px;417  padding: 9px 18px;418  background: rgba(217, 242, 107, 0.1);419  border-top: 1px solid rgba(217, 242, 107, 0.25);420  overflow: hidden;421}422.mc-strip i {423  display: block;424  width: 3px;425  border-radius: 1px;426  background: var(--lime);427  opacity: 0.7;428}429.mc-strip i:nth-child(3n) {430  height: 14px;431  opacity: 0.35;432}433.mc-strip i:nth-child(3n + 1) {434  height: 9px;435}436.mc-strip i:nth-child(3n + 2) {437  height: 17px;438  opacity: 0.9;439}440441/* ---------- Carte physique imprimable (CR80 : 85,6 × 54 mm) ---------- */442443.pcard {444  position: relative;445  width: 85.6mm;446  height: 54mm;447  overflow: hidden;448  border-radius: 3.18mm; /* rayon normalisé ISO/IEC 7810 */449  outline: 0.3mm dashed rgba(20, 24, 20, 0.4); /* repère de découpe */450  outline-offset: 1mm;451  flex: none;452  -webkit-print-color-adjust: exact;453  print-color-adjust: exact;454}455.pcard-front {456  background: var(--ink);457  color: var(--paper);458  padding: 4.5mm 5mm;459  display: flex;460  flex-direction: column;461}462.pcard-watermark {463  position: absolute;464  right: -4mm;465  top: -8mm;466  pointer-events: none;467  font-family: var(--font-display);468  font-weight: 700;469  font-size: 34mm;470  letter-spacing: -0.06em;471  color: rgba(217, 242, 107, 0.08);472  transform: rotate(-8deg);473  line-height: 1;474}475.pcard-head {476  display: flex;477  align-items: baseline;478  justify-content: space-between;479  gap: 3mm;480}481.pcard-brand {482  font-family: var(--font-display);483  font-weight: 700;484  font-size: 5mm;485  letter-spacing: -0.03em;486}487.pcard-ka {488  display: inline-block;489  background: var(--lime);490  color: var(--ink);491  padding: 0 1.4mm 0.4mm;492  border-radius: 1.2mm;493  transform: rotate(-2deg);494}495.pcard-label {496  font-family: var(--font-mono);497  font-size: 1.9mm;498  letter-spacing: 0.16em;499  color: rgba(245, 243, 238, 0.55);500}501.pcard-id {502  margin-top: 5mm;503  display: flex;504  flex-direction: column;505  gap: 0.8mm;506}507.pcard-id-label {508  font-family: var(--font-mono);509  font-size: 1.9mm;510  letter-spacing: 0.2em;511  color: rgba(217, 242, 107, 0.65);512}513.pcard-id-value {514  font-family: var(--font-mono);515  font-weight: 700;516  font-size: 6.4mm;517  letter-spacing: 0.12em;518  color: var(--lime);519}520.pcard-foot {521  margin-top: auto;522  display: flex;523  align-items: flex-end;524  justify-content: space-between;525  gap: 3mm;526}527.pcard-holder {528  display: flex;529  flex-direction: column;530  gap: 0.7mm;531  min-width: 0;532}533.pcard-name {534  font-weight: 600;535  font-size: 3.4mm;536  white-space: nowrap;537  overflow: hidden;538  text-overflow: ellipsis;539}540.pcard-role {541  align-self: flex-start;542  padding: 0.4mm 1.6mm 0.6mm;543  border-radius: 1mm;544  background: var(--lime);545  color: var(--ink);546  font-family: var(--font-mono);547  font-weight: 700;548  font-size: 1.9mm;549  letter-spacing: 0.1em;550  transform: rotate(-1deg);551}552.pcard-since {553  font-family: var(--font-mono);554  font-size: 1.9mm;555  letter-spacing: 0.08em;556  color: rgba(245, 243, 238, 0.5);557}558.pcard-avatar {559  width: 11mm;560  height: 11mm;561  border-radius: 999px;562  border: 0.5mm solid var(--lime);563  object-fit: cover;564  flex: none;565}566.pcard-avatar-empty {567  display: flex;568  align-items: center;569  justify-content: center;570  background: var(--lime);571  color: var(--ink);572  font-family: var(--font-display);573  font-weight: 700;574  font-size: 5mm;575}576.pcard-back {577  background: #ffffff;578  border: 0.4mm solid var(--ink);579  display: flex;580  align-items: center;581  gap: 4mm;582  padding: 4.5mm 5mm;583}584.pcard-back-left {585  flex: none;586}587.pcard-qr {588  width: 30mm;589  height: 30mm;590  display: block;591}592.pcard-back-right {593  display: flex;594  flex-direction: column;595  gap: 1.6mm;596  min-width: 0;597}598.pcard-back-title {599  font-family: var(--font-display);600  font-weight: 700;601  font-size: 3.4mm;602  line-height: 1.15;603  text-transform: uppercase;604  letter-spacing: -0.01em;605}606.pcard-back-url {607  font-family: var(--font-mono);608  font-size: 2.2mm;609  color: var(--green);610  word-break: break-all;611}612.pcard-nfc {613  display: inline-flex;614  align-items: center;615  gap: 1.5mm;616  align-self: flex-start;617  padding: 1mm 2mm;618  border: 0.3mm dashed var(--ink);619  border-radius: 1.5mm;620  font-family: var(--font-mono);621  font-size: 1.9mm;622  letter-spacing: 0.06em;623  color: var(--ink-2);624}625.pcard-nfc-ico {626  font-weight: 700;627  color: var(--green);628  letter-spacing: -0.05em;629}630.pcard-back-foot {631  font-family: var(--font-mono);632  font-size: 1.7mm;633  line-height: 1.5;634  color: var(--ink-3);635}636637@media print {638  .no-print,639  header,640  .ticker,641  footer,642  body::before {643    display: none !important;644  }645  body {646    background: #ffffff;647  }648  .print-page {649    max-width: none;650    padding: 0;651  }652  .print-cards {653    margin: 0;654    gap: 10mm;655  }656  .pcard {657    box-shadow: none;658  }659  @page {660    margin: 12mm;661  }662}663664/* ---------- Pilules de stats ---------- */665666.stat-chip {667  display: inline-flex;668  align-items: center;669  gap: 8px;670  white-space: nowrap;671  padding: 8px 14px;672  background: var(--surface);673  border: 1.5px solid var(--ink);674  border-radius: 999px;675  font-family: var(--font-mono);676  font-size: 12px;677  font-weight: 700;678  box-shadow: 3px 3px 0 rgba(20, 24, 20, 0.12);679}680681.pulse-dot {682  position: relative;683  width: 8px;684  height: 8px;685  border-radius: 999px;686  background: var(--green);687  flex: none;688}689.pulse-dot::after {690  content: "";691  position: absolute;692  inset: -4px;693  border-radius: 999px;694  border: 2px solid var(--lime);695  animation: pulse 2.4s ease-out infinite;696}697@keyframes pulse {698  0% {699    transform: scale(0.5);700    opacity: 1;701  }702  70%,703  100% {704    transform: scale(1.4);705    opacity: 0;706  }707}708709/* ---------- Ticker ---------- */710711.ticker {712  overflow: hidden;713  background: var(--ink);714  border-bottom: 1.5px solid var(--ink);715}716.ticker-inner {717  display: inline-flex;718  white-space: nowrap;719  padding: 8px 0;720  font-family: var(--font-mono);721  font-size: 11.5px;722  font-weight: 500;723  text-transform: uppercase;724  letter-spacing: 0.1em;725  color: var(--lime);726  animation: ticker 44s linear infinite;727}728.ticker-item::after {729  content: "◆";730  margin: 0 18px;731  opacity: 0.55;732  font-size: 8px;733  vertical-align: 2px;734}735@keyframes ticker {736  from {737    transform: translateX(0);738  }739  to {740    transform: translateX(-50%);741  }742}743744/* ---------- Tableau éditorial ---------- */745746.src-wrap {747  border: 1.5px solid var(--ink);748  border-radius: var(--r-card);749  box-shadow: var(--shadow-off-soft);750  overflow-x: auto;751  background: var(--surface);752}753.src-table {754  width: 100%;755  border-collapse: collapse;756  font-size: 13.5px;757}758.src-table th {759  font-family: var(--font-mono);760  font-size: 10px;761  font-weight: 700;762  text-transform: uppercase;763  letter-spacing: 0.1em;764  text-align: left;765  color: var(--ink-3);766  background: var(--surface-2);767  padding: 10px 14px;768  border-bottom: 1.5px solid var(--ink);769}770.src-table td {771  padding: 12px 14px;772  border-bottom: 1px solid var(--line);773  vertical-align: top;774}775.src-table tr:last-child td {776  border-bottom: none;777}778.src-table tbody tr:hover {779  background: var(--surface-2);780}781782/* ---------- Figure d'agrégation ---------- */783784.fig-flow {785  stroke-dasharray: 7 7;786  animation: figflow 1.1s linear infinite;787}788@keyframes figflow {789  to {790    stroke-dashoffset: -14;791  }792}793794.bar-grow {795  transform-origin: left center;796  animation: growx 0.8s cubic-bezier(0.2, 0.8, 0.2, 1) both;797}798@keyframes growx {799  from {800    transform: scaleX(0);801  }802  to {803    transform: scaleX(1);804  }805}806807/* ---------- Animations d'entrée ---------- */808809.rise {810  opacity: 0;811  animation: rise 0.55s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;812}813@keyframes rise {814  from {815    opacity: 0;816    transform: translateY(12px);817  }818  to {819    opacity: 1;820    transform: translateY(0);821  }822}823824/* ---------- Accessibilité ---------- */825826@media (prefers-reduced-motion: reduce) {827  .ticker-inner,828  .pulse-dot::after,829  .fig-flow {830    animation: none;831  }832  .rise {833    animation: none;834    opacity: 1;835  }836  *,837  *::before,838  *::after {839    transition-duration: 0.01ms !important;840    animation-duration: 0.01ms !important;841  }842  html {843    scroll-behavior: auto;844  }845}846