/* /login — layered on dashboard.css (tokens, fields, buttons). */
.auth-shell{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);min-height:100vh;min-height:100dvh}
.auth-form{display:flex;flex-direction:column;min-width:0;padding:28px 40px}
.auth-top{display:flex;align-items:center;justify-content:space-between;gap:16px}
.auth-brand{display:inline-flex;align-items:center;gap:10px;color:var(--text);font-size:14.5px;font-weight:600;letter-spacing:-.01em;text-decoration:none}
.auth-brand img{width:30px;height:30px;border-radius:8px;box-shadow:0 0 0 1px rgba(0,0,0,.06)}
.auth-back{display:inline-flex;align-items:center;gap:6px;color:var(--text-2);font-size:13.5px;font-weight:500;text-decoration:none}
.auth-back svg{width:16px;height:16px;transition:transform .15s}
.auth-back:hover{color:var(--text)}
.auth-back:hover svg{transform:translateX(-2px)}
.auth-card{width:100%;max-width:380px;margin:auto;padding:48px 0}
.auth-card h1{font-size:26px;line-height:1.2;letter-spacing:-.025em}
.intro{margin-top:8px;color:var(--text-2);font-size:14.5px;line-height:1.55}
.auth-card form{display:flex;flex-direction:column;margin-top:28px}
.auth-card label{margin-bottom:6px;color:var(--text);font-size:13px;font-weight:500}
.auth-card button[type=submit]{width:100%;min-height:40px;margin-top:6px;font-size:14px}
.login-error,.login-message{display:flex;gap:10px;margin-top:24px;padding:10px 12px;border-radius:var(--radius);font-size:13.5px;line-height:1.5}
.login-error{background:var(--red-bg);box-shadow:inset 0 0 0 1px var(--red-border);color:var(--red)}
.login-message{background:var(--green-bg);box-shadow:inset 0 0 0 1px var(--green-border);color:var(--green)}
.access-note{margin-top:20px;padding-top:20px;border-top:1px solid var(--border);color:var(--text-3);font-size:13px;line-height:1.6}
.auth-foot{color:var(--text-3);font-size:12.5px}
.auth-visual{position:relative;margin:12px;overflow:hidden;border-radius:20px;background:#9bc6e5}
/* Cropped from the sea on the left, as the app does: the man on the right stays in frame. */
.auth-visual > img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:right center}
.auth-visual::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,24,28,0) 45%,rgba(20,24,28,.72) 100%)}
.auth-quote{position:absolute;z-index:1;right:40px;bottom:40px;left:40px;color:#fff}
.auth-quote p{max-width:460px;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-.025em}
.auth-quote span{display:block;margin-top:12px;color:rgba(255,255,255,.72);font-size:14px}
@media (max-width:960px){
  .auth-shell{grid-template-columns:minmax(0,1fr)}
  .auth-visual{display:none}
  .auth-form{padding:20px}
  .auth-card{padding:40px 0}
}
.label-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.label-row label{margin:0}
.label-row a,.auth-link{color:var(--accent);font-size:13px;font-weight:500;text-decoration:none}
.label-row a:hover,.auth-link:hover{color:var(--accent-hover);text-decoration:underline;text-underline-offset:3px}
.auth-card form input:not([type=hidden]){min-height:40px;margin-bottom:16px;font-size:14.5px}
.auth-card form .password-field{margin-bottom:16px}
.auth-card form .password-field input{margin-bottom:0}
.auth-card .login-error,.auth-card .login-message{margin:20px 0 4px}
.auth-card form .login-error{margin:0 0 16px}
.auth-card form > .intro{margin:0 0 20px}
#reset-expired .intro{margin-bottom:24px}
#reset-form{margin-top:8px}
.auth-wide{width:100%;min-height:40px}
/* /apps: the line under the title is as wide as it (the owner, 2026-10-16) — this spacing in
   Inter, 26px/600 over 14.5px; apps.html's script corrects it for another font. */
.apps-tagline{letter-spacing:.156em;white-space:nowrap}
@media (max-width:339px){.apps-tagline{letter-spacing:normal;white-space:normal}} /* the title wraps there */
/* /apps: the two store buttons and the foot's links (2026-10-16). */
.store-list{display:grid;gap:10px;margin-top:28px}
.store-button{display:flex;align-items:center;gap:14px;min-height:58px;padding:0 16px 0 18px;border-radius:var(--radius-lg);background:var(--primary);color:var(--on-primary);text-decoration:none;box-shadow:var(--shadow-xs),inset 0 1px 0 rgba(255,255,255,.08);transition:background .15s}
.store-button:hover{background:var(--primary-hover)}
.store-button:focus-visible{outline:0;box-shadow:var(--ring)}
.store-button > svg{width:20px;height:20px}
.store-button small{display:block;color:rgba(250,250,249,.66);font-size:11.5px;line-height:1.3}
.store-button strong{display:block;font-size:15.5px;font-weight:600;line-height:1.3;letter-spacing:-.01em}
.store-button .store-chevron{width:16px;height:16px;margin-left:auto;opacity:.55;transition:transform .15s,opacity .15s}
.store-button:hover .store-chevron{opacity:.9;transform:translateX(2px)}
.store-foot{display:flex;flex-wrap:wrap;gap:6px 16px}
.store-foot span{margin-right:auto}
.store-foot a{color:var(--text-3);text-decoration:none}
.store-foot a:hover{color:var(--text);text-decoration:underline;text-underline-offset:3px}

/* /demande/<token> (2026-10-19): a booking request opened from its e-mail. */
.demande-kicker{color:var(--text-3);font-size:13px;font-weight:500}
.demande .demande-kicker + h1{margin-top:4px}
.demande-when{margin-top:6px;font-size:17px;font-weight:600;letter-spacing:-.01em}
.demande-status{margin-top:14px}
.demande-note{margin-top:16px;padding:10px 12px;border-left:3px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0;background:var(--accent-subtle);font-size:14px;line-height:1.55;overflow-wrap:anywhere}
.demande-facts{margin-top:16px}
.demande-facts a{color:var(--text)}
.demande form{margin-top:20px}
.demande .demande-refuse{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.demande-refuse textarea{width:100%;margin-bottom:10px;resize:vertical}
.demande .demande-refuse button[type=submit]{margin-top:0}
