/* public-sans-vietnamese-400-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/build/fonts/public-sans-vietnamese-400-normal.2c925480.woff2) format('woff2'), url(/build/fonts/public-sans-vietnamese-400-normal.158529cc.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* public-sans-latin-ext-400-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/build/fonts/public-sans-latin-ext-400-normal.c362540f.woff2) format('woff2'), url(/build/fonts/public-sans-latin-ext-400-normal.28b36812.woff) format('woff');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* public-sans-latin-400-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/build/fonts/public-sans-latin-400-normal.83608315.woff2) format('woff2'), url(/build/fonts/public-sans-latin-400-normal.46eb8a1e.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* public-sans-vietnamese-500-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/build/fonts/public-sans-vietnamese-500-normal.e985168f.woff2) format('woff2'), url(/build/fonts/public-sans-vietnamese-500-normal.a4eae42e.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* public-sans-latin-ext-500-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/build/fonts/public-sans-latin-ext-500-normal.b5ae6058.woff2) format('woff2'), url(/build/fonts/public-sans-latin-ext-500-normal.78dcb86f.woff) format('woff');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* public-sans-latin-500-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/build/fonts/public-sans-latin-500-normal.352c16d3.woff2) format('woff2'), url(/build/fonts/public-sans-latin-500-normal.730bc2d1.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* public-sans-vietnamese-600-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/build/fonts/public-sans-vietnamese-600-normal.65db7db0.woff2) format('woff2'), url(/build/fonts/public-sans-vietnamese-600-normal.567134e2.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* public-sans-latin-ext-600-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/build/fonts/public-sans-latin-ext-600-normal.e02033b0.woff2) format('woff2'), url(/build/fonts/public-sans-latin-ext-600-normal.4370fc6b.woff) format('woff');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* public-sans-latin-600-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(/build/fonts/public-sans-latin-600-normal.74139f28.woff2) format('woff2'), url(/build/fonts/public-sans-latin-600-normal.c875eed2.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
/* public-sans-vietnamese-700-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/build/fonts/public-sans-vietnamese-700-normal.0cf3076d.woff2) format('woff2'), url(/build/fonts/public-sans-vietnamese-700-normal.39b098d8.woff) format('woff');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* public-sans-latin-ext-700-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/build/fonts/public-sans-latin-ext-700-normal.9447d742.woff2) format('woff2'), url(/build/fonts/public-sans-latin-ext-700-normal.51e4e625.woff) format('woff');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* public-sans-latin-700-normal */
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(/build/fonts/public-sans-latin-700-normal.f221ce5a.woff2) format('woff2'), url(/build/fonts/public-sans-latin-700-normal.cdb7a7a7.woff) format('woff');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
.auth-split{display:grid;grid-template-columns:1.05fr 1fr;min-height:100vh}.auth-hero{display:flex;flex-direction:column;justify-content:space-between;gap:32px;padding:56px;background:var(--m-accent-grad);color:#fff;overflow:hidden}.auth-brand{display:flex;align-items:center;gap:14px}.auth-brand-name{font-size:32px;font-weight:600;letter-spacing:-0.015em}.auth-hello{margin:0 0 8px;font-size:clamp(54px,6.5vw,84px);font-weight:600;line-height:.95;color:var(--m-yellow)}.auth-tagline{margin:0;font-size:30px;font-weight:500;color:hsla(0,0%,100%,.92)}.auth-pitch{margin:22px 0 0;max-width:380px;font-size:16px;line-height:1.45;color:hsla(0,0%,100%,.85)}.auth-hero-footer{display:flex;align-items:center;gap:10px;font-size:12px;color:hsla(0,0%,100%,.7)}.auth-panel{display:flex;flex-direction:column;justify-content:center;padding:64px}.auth-form{width:100%;max-width:420px;margin-inline:auto}.auth-form .alert{margin-bottom:18px}.auth-form .flashes-inline .alert{margin-bottom:0}.auth-kicker{margin:0;font-size:24px;font-weight:500;color:var(--m-accent)}.auth-title{margin:4px 0 6px;font-size:44px;font-weight:600;line-height:1.1}.auth-sub{margin:0;font-size:14px;color:var(--m-ink-2)}.auth-fields{display:flex;flex-direction:column;gap:14px;margin-top:28px}.auth-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13px}.auth-row a{font-weight:700}.auth-submit{height:52px;font-size:15px;width:100%}.auth-form ul{margin:0;padding:0;list-style:none;font-size:12.5px;font-weight:600;color:#8c3d2c}.field ul{margin-top:2px}.auth-code-input{font-size:24px;font-weight:600;letter-spacing:.35em;text-align:center;font-variant-numeric:tabular-nums}.auth-cancel{margin:22px 0 0;text-align:center;font-size:13px}.auth-qr-card{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:24px;padding:20px;background:#fff;border:1px solid var(--m-line);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.auth-qr-card img{display:block;border-radius:var(--r-sm)}.auth-qr-help{margin:0;font-size:12px;color:var(--m-ink-2)}.auth-secret{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:13px;letter-spacing:.08em;padding:6px 10px;background:var(--m-cream-2);border-radius:var(--r-sm);word-break:break-all;text-align:center}.auth-note{margin:38px 0 0;font-size:12px;line-height:1.5;color:var(--m-ink-2)}@media(max-width: 900px){.auth-split{grid-template-columns:1fr}.auth-hero{gap:24px;padding:28px 24px 36px;border-bottom-left-radius:36px;border-bottom-right-radius:36px}.auth-brand-name{font-size:22px}.auth-hello{font-size:54px}.auth-tagline{font-size:24px}.auth-pitch,.auth-hero-footer{display:none}.auth-panel{justify-content:flex-start;padding:26px 22px 40px}.auth-title{font-size:34px}}.app-header{display:flex;align-items:center;gap:12px;height:60px;padding:0 20px;background:#fff;border-bottom:1px solid var(--m-line)}.app-wordmark{display:inline-flex;align-items:center;gap:8px;font-size:20px;font-weight:700;letter-spacing:-0.015em;color:var(--m-ink)}.app-wordmark:hover{text-decoration:none}.lieu-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;background:#fff;border:1px solid var(--m-line);border-radius:999px;box-shadow:var(--shadow-card);font-size:13px;font-weight:600;white-space:nowrap;color:var(--m-ink)}.lieu-chip:hover{border-color:rgba(30,41,59,.24);text-decoration:none}.app-nav{display:flex;gap:2px;margin-left:8px;min-width:0}.app-nav a,.app-nav span{display:flex;align-items:center;gap:5px;padding:7px 9px;border-radius:9px;font-size:12px;font-weight:600;color:var(--m-ink);white-space:nowrap}.app-nav a:hover{background:var(--m-cream-2);text-decoration:none}.app-nav .is-active{background:var(--m-ink);color:#fff}.app-nav .is-active:hover{background:var(--m-ink)}.app-nav .is-soon{color:var(--m-ink-2);cursor:default;opacity:.65}.app-header-right{display:flex;align-items:center;gap:12px;margin-left:auto;flex-shrink:0}.app-search{display:flex;align-items:center;gap:8px;width:196px;height:34px;padding:0 12px;border:1px solid var(--m-line);border-radius:999px;background:#fff;font-size:12px;color:var(--m-ink-2)}.avatar{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--m-accent-soft);color:var(--m-accent-dark);font-size:13px;font-weight:700;flex-shrink:0}.app-logout{font-size:12px;font-weight:600;color:var(--m-ink-2)}.dash-hero{padding:24px 28px 26px;background:var(--m-accent-soft);border-bottom:1px solid var(--m-line)}.dash-date{margin:0;font-size:20px;font-weight:500;color:var(--m-ink-2)}.dash-date::first-letter{text-transform:uppercase}.dash-title{margin:2px 0 0;font-size:36px;font-weight:600;line-height:1.1}.dash-title strong{background-image:var(--m-accent-grad);-webkit-background-clip:text;background-clip:text;color:rgba(0,0,0,0);font-weight:800}.dash-summary{margin:12px 0 0;max-width:560px;font-size:14px;color:var(--m-ink-2)}.dash-body{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;align-content:start;padding:24px}.dash-col{display:flex;flex-direction:column;gap:18px;min-width:0}.card{padding:18px;background:#fff;border:1px solid var(--m-line);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.card-head{display:flex;align-items:baseline;gap:10px}.card-head h2{margin:0;font-size:20px;font-weight:600}.card-head .card-link{margin-left:auto;font-size:12px;font-weight:700}.card-empty{margin-top:14px;padding:22px;background:var(--m-cream);border:1.5px dashed var(--m-line);border-radius:var(--r-md);text-align:center;font-size:13px;color:var(--m-ink-2)}.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.kpi{padding:14px;border:1px solid var(--m-line);border-radius:18px;box-shadow:var(--shadow-pop);line-height:1.05}.kpi .kpi-value{font-size:44px;font-weight:600}.kpi .kpi-label{margin-top:4px;font-size:13px;font-weight:700}.kpi .kpi-sub{font-size:11px;opacity:.8}.kpi-pink{background:var(--m-pink)}.kpi-yellow{background:var(--m-yellow)}.kpi-orange{background:var(--m-orange);color:#fff}.kpi-accent{background:var(--m-accent);color:#fff}@media(max-width: 1000px){.dash-body{grid-template-columns:1fr}}.lieu-page{min-height:100vh;padding:40px 56px}.lieu-header{display:flex;align-items:center}.lieu-user{display:flex;align-items:center;gap:10px;margin-left:auto;font-size:13px;font-weight:700}.lieu-hello{margin-top:56px}.lieu-kicker{margin:0;font-size:26px;font-weight:500;color:var(--m-accent)}.lieu-title{margin:6px 0;font-size:clamp(34px,4.5vw,54px);font-weight:600;line-height:1}.lieu-sub{margin:0;max-width:520px;font-size:15px;color:var(--m-ink-2)}.lieu-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(260px, 1fr));gap:18px;max-width:940px;margin-top:36px}.lieu-card{display:flex;flex-direction:column;gap:14px;padding:18px;background:#fff;border:1px solid var(--m-line);border-radius:var(--r-xl);box-shadow:var(--shadow-pop)}.lieu-card .lieu-card-head{display:flex;align-items:center;gap:14px}.lieu-card .lieu-nom{font-size:22px;font-weight:600;line-height:1}.lieu-card .lieu-adresse{margin-top:4px;font-size:12px;color:var(--m-ink-2)}.lieu-card .lieu-stats{display:flex;flex-wrap:wrap;gap:12px}.lieu-card .lieu-stat{min-width:72px}.lieu-card .lieu-stat-value{font-size:24px;font-weight:600;line-height:1}.lieu-card .lieu-stat-label{font-size:11px;color:var(--m-ink-2)}.lieu-card .lieu-entrer{justify-content:center;width:100%;height:42px;margin-top:auto;font-size:13px}@media(max-width: 700px){.lieu-page{padding:24px 20px}.lieu-hello{margin-top:32px}}.platform-page{padding:24px}.platform-head h1{margin:0;font-size:28px;font-weight:600}.platform-head p{margin:4px 0 0;font-size:14px;color:var(--m-ink-2)}.platform-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:20px;align-items:start;margin-top:20px}.platform-col{display:flex;flex-direction:column;gap:20px;min-width:0}.card-hint{margin-left:auto;font-size:11px;color:var(--m-ink-2)}.platform-form{display:flex;flex-direction:column;gap:14px;margin-top:14px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.check-list{display:flex;flex-direction:column;gap:8px;font-size:13px}.table{width:100%;border-collapse:collapse;margin-top:14px;font-size:13px}.table th{padding:8px 10px;border-bottom:1px solid var(--m-line);text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--m-ink-2)}.table td{padding:10px;border-bottom:1px solid var(--m-line-2);vertical-align:middle}.table-empty{padding:22px;text-align:center;color:var(--m-ink-2)}.table-empty-cell{color:var(--m-ink-2)}.table-user{display:flex;align-items:center;gap:10px}.table-user-name{font-weight:700}.table-user-email{font-size:12px;color:var(--m-ink-2)}.table-actions form{display:inline}.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:600;white-space:nowrap}.badge-success{background:#eff5ea;color:#4a6438}.badge-danger{background:#fbefec;color:#8c3d2c}.badge-muted{background:var(--m-cream-2);color:var(--m-ink)}.pagination{display:flex;justify-content:center;margin-top:14px;font-size:13px}.pagination nav{display:flex;align-items:center;gap:4px}.pagination a,.pagination span{padding:6px 11px;border-radius:var(--r-sm)}.pagination a{color:var(--m-ink);font-weight:600}.pagination a:hover{background:var(--m-cream-2);text-decoration:none}.pagination .current{background:var(--m-ink);color:#fff;font-weight:700}.pagination .disabled{color:var(--m-ink-2);opacity:.5}@media(max-width: 1100px){.platform-grid{grid-template-columns:1fr}}:root{--m-cream: #F6F8FB;--m-cream-2: #EEF1F6;--m-ink: #3C424E;--m-ink-2: #8A909E;--m-accent: #4FA890;--m-accent-dark: #357F6B;--m-accent-soft: rgba(79, 168, 144, .13);--m-accent-grad: linear-gradient(135deg, #6FC7B0 0%, #4FA890 48%, #357F6B 100%);--m-lavender: #A9ABDA;--m-pink: #E3A0AE;--m-orange: #EAAB86;--m-yellow: #ECD79E;--m-green: #A9C896;--m-alert: #DE7059;--m-line: rgba(30, 41, 59, .09);--m-line-2: rgba(30, 41, 59, .05);--f-sans: 'Public Sans', system-ui, -apple-system, sans-serif;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-xl: 22px;--shadow-card: 0 1px 2px rgba(30, 41, 59, .04), 0 4px 14px rgba(30, 41, 59, .05);--shadow-pop: 0 1px 2px rgba(30, 41, 59, .05), 0 8px 22px rgba(30, 41, 59, .06)}*,*::before,*::after{box-sizing:border-box}body{margin:0;font-family:var(--f-sans);font-size:15px;color:var(--m-ink);background-color:var(--m-cream);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--m-accent);font-weight:600;text-decoration:none}a:hover{text-decoration:underline}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--m-line);background:#fff;color:var(--m-ink);border-radius:var(--r-md);padding:10px 16px;font:inherit;font-weight:600;font-size:14px;box-shadow:var(--shadow-card);cursor:pointer;transition:background .15s,border-color .15s,filter .15s}.btn,.btn:hover{text-decoration:none}.btn:hover{border-color:rgba(30,41,59,.24)}.btn-primary{background:var(--m-accent-dark);color:#fff;border-color:rgba(0,0,0,0)}.btn-danger{background:var(--m-alert);color:#fff;border-color:rgba(0,0,0,0)}.btn-sm{padding:6px 12px;font-size:12px;border-radius:var(--r-sm)}.btn-primary:hover{filter:brightness(0.94);border-color:rgba(0,0,0,0)}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--m-ink-2)}.input{width:100%;height:50px;padding:0 16px;font:inherit;font-size:15px;color:var(--m-ink);background:#fff;border:1px solid var(--m-line);border-radius:14px;box-shadow:var(--shadow-pop);outline:none;transition:border-color .15s,box-shadow .15s}.input:focus{border-color:var(--m-accent);box-shadow:0 0 0 3px var(--m-accent-soft),var(--shadow-pop)}.input::placeholder{color:var(--m-ink-2)}.checkbox{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.checkbox input{width:18px;height:18px;margin:0;accent-color:var(--m-accent)}.alert{padding:12px 16px;border:1px solid var(--m-line);border-radius:var(--r-md);background:#fff;box-shadow:var(--shadow-pop);font-size:14px;font-weight:500}.alert-danger{border-color:rgba(222,112,89,.4);background:#fbefec;color:#8c3d2c}.alert-success{border-color:rgba(169,200,150,.5);background:#eff5ea;color:#4a6438}.flashes{display:flex;flex-direction:column;gap:8px}.flashes-floating{position:fixed;top:70px;right:18px;z-index:50;width:min(92vw,420px);animation:flash-in .25s ease-out}.flashes-inline{margin-top:18px}@keyframes flash-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
