/* Page galerie admin — mobile-first mais utilisable au clavier/souris sur desktop (l'admin peut consulter depuis un ordinateur), sans dépendance externe. Mêmes tokens de couleur/rayon/ombre que la page invité (src/e/style.css) pour rester cohérent visuellement — c'est aussi l'écran que verront les prospects (photographes, wedding planners) lors d'une démo, donc soigné au même niveau que la page invité. */ :root { color-scheme: light; --color-bg: #faf8f5; --color-surface: #ffffff; --color-surface-muted: #f2ede4; --color-text: #262420; --color-muted: #6f6a62; --color-border: #e3ddd2; --color-accent: #8a5a44; --color-accent-hover: #6e4735; --color-accent-soft: #f1e3d8; --color-accent-contrast: #ffffff; --color-error-bg: #fbeceb; --color-error-text: #7a1f14; --color-warning-bg: #fbf1de; --color-warning-text: #7a5a14; --radius-sm: 8px; --radius: 14px; --shadow-sm: 0 1px 2px rgba(38, 36, 32, 0.06); --shadow-md: 0 6px 20px rgba(38, 36, 32, 0.10); --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; font-family: var(--font-sans); background: var(--color-bg); color: var(--color-text); line-height: 1.45; } .page { max-width: 960px; margin: 0 auto; padding: 1.5rem 1.1rem 3rem; min-height: 100dvh; } .page__header { text-align: center; margin-bottom: 1.5rem; } .brand { display: flex; align-items: center; justify-content: center; gap: 0.4rem; margin-bottom: 0.6rem; color: var(--color-muted); } .brand__mark { width: 16px; height: 16px; flex-shrink: 0; color: var(--color-accent); } .brand__name { font-size: 0.7rem; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; } .page__header h1 { font-size: 1.5rem; font-weight: 700; letter-spacing: -0.01em; margin: 0.15rem 0 0; } .event-meta { color: var(--color-muted); font-size: 0.9rem; margin: 0.4rem 0 0; } .state-block { text-align: center; padding: 1.25rem 1rem; border-radius: var(--radius); margin-bottom: 1rem; } .state-block--error { background: var(--color-error-bg); color: var(--color-error-text); } .state-block p { margin: 0 0 0.75rem; } .state-block p:last-child { margin-bottom: 0; } .status-banner { background: var(--color-warning-bg); color: var(--color-warning-text); border-radius: var(--radius); padding: 0.85rem 1rem; margin: 0 0 1.25rem; font-size: 0.9rem; } .toolbar { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-bottom: 0.75rem; } .btn { font: inherit; font-weight: 600; border: none; border-radius: var(--radius-sm); padding: 0.75rem 1rem; min-height: 44px; cursor: pointer; background: var(--color-accent); color: var(--color-accent-contrast); box-shadow: var(--shadow-sm); } .btn--secondary { background: var(--color-surface); color: var(--color-accent); border: 1px solid var(--color-accent); box-shadow: none; } .btn:disabled { opacity: 0.55; cursor: not-allowed; } .btn:active:not(:disabled) { background: var(--color-accent-hover); transform: translateY(1px); } .btn--secondary:active:not(:disabled) { background: var(--color-accent-soft); } .btn:focus-visible, a:focus-visible { outline: 3px solid var(--color-accent); outline-offset: 1px; } .zip-status { font-size: 0.85rem; color: var(--color-muted); margin: 0 0 1.25rem; } .zip-status--error { color: var(--color-error-text); } .photo-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 1rem; } .photo-card { background: var(--color-surface); border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; box-shadow: var(--shadow-sm); transition: box-shadow 0.15s ease, transform 0.15s ease; } @media (hover: hover) { .photo-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } } .photo-card__thumb-wrap { position: relative; width: 100%; aspect-ratio: 1 / 1; background: var(--color-surface-muted); } .photo-card__thumb { width: 100%; height: 100%; object-fit: cover; display: block; } .photo-card__thumb-fallback { position: absolute; inset: 0; display: none; align-items: center; justify-content: center; text-align: center; font-size: 0.75rem; color: var(--color-muted); padding: 0.5rem; } .photo-card--broken .photo-card__thumb { display: none; } .photo-card--broken .photo-card__thumb-fallback { display: flex; } .photo-card__meta { padding: 0.65rem 0.75rem 0.55rem; flex: 1; } .photo-card__name { font-weight: 600; font-size: 0.85rem; margin: 0 0 0.2rem; word-break: break-word; } .photo-card__message { color: var(--color-text); font-size: 0.8rem; margin: 0 0 0.35rem; word-break: break-word; } .photo-card__date { color: var(--color-muted); font-size: 0.72rem; margin: 0; } .photo-card__download { display: block; text-align: center; padding: 0.6rem; background: var(--color-accent); color: var(--color-accent-contrast); text-decoration: none; font-size: 0.82rem; font-weight: 600; } .photo-card__download:hover { background: var(--color-accent-hover); }