/*
 * Composants .ab-* du design system — repris tels quels de Claude Design (components/components.css).
 * C'est le contrat CSS partagé entre la maquette et le thème : le HTML rendu par les blocs
 * du thème reproduit exactement le balisage des composants React.
 * Les adaptations propres à WordPress vivent dans site.css, jamais ici.
 */
/* ---------- core ---------- */
.ab-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;font:500 var(--fs-ui)/1 var(--font-sans);border-radius:var(--r-1);border:var(--bw) solid transparent;cursor:pointer;white-space:nowrap;text-decoration:none;transition:background var(--dur-1) var(--ease),color var(--dur-1) var(--ease),border-color var(--dur-1) var(--ease),transform var(--dur-1) var(--ease)}
.ab-btn:active{transform:translateY(1px)}
.ab-btn[disabled]{opacity:.4;pointer-events:none}
.ab-btn--sm{height:32px;padding:0 12px;font-size:var(--fs-small)}
.ab-btn--lg{height:48px;padding:0 22px;font-size:17px}
.ab-btn--primary{background:var(--fg);color:var(--bg)}
.ab-btn--primary:hover{background:var(--accent);color:var(--accent-fg)}
.ab-btn--accent{background:var(--accent);color:var(--accent-fg)}
.ab-btn--accent:hover{background:var(--fg);color:var(--bg)}
.ab-btn--secondary{background:transparent;color:var(--fg);border-color:var(--border-strong)}
.ab-btn--secondary:hover{background:var(--fg);color:var(--bg)}
.ab-btn--ghost{background:transparent;color:var(--fg)}
.ab-btn--ghost:hover{background:var(--surface-sunk)}
.ab-btn--link{background:none;height:auto;padding:0;color:var(--fg);border-radius:0;border-bottom:var(--bw) solid var(--fg-faint)}
.ab-btn--link:hover{color:var(--accent-text);border-bottom-color:currentColor}
.ab-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:var(--r-1);border:var(--bw) solid transparent;background:transparent;color:var(--fg);cursor:pointer;transition:background var(--dur-1) var(--ease),color var(--dur-1) var(--ease)}
.ab-iconbtn:hover{background:var(--surface-sunk)}
.ab-iconbtn:active{transform:translateY(1px)}
.ab-iconbtn--sm{width:32px;height:32px}
.ab-iconbtn--outline{border-color:var(--border)}
.ab-iconbtn--outline:hover{border-color:var(--border-strong);background:transparent}
.ab-iconbtn--inverse{color:var(--night-fg)}
.ab-iconbtn--inverse:hover{background:rgba(255,255,255,.1)}
.ab-iconbtn[disabled]{opacity:.35;pointer-events:none}
.ab-tag{display:inline-flex;align-items:center;gap:7px;height:26px;padding:0 10px;font:500 var(--fs-micro)/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-muted);border:var(--bw) solid var(--border);border-radius:var(--r-pill);background:transparent;white-space:nowrap;cursor:default;transition:all var(--dur-1) var(--ease)}
button.ab-tag{cursor:pointer}
button.ab-tag:hover{border-color:var(--border-strong);color:var(--fg)}
.ab-tag[data-active="true"]{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.ab-tag__dot{width:7px;height:7px;flex:none}
.ab-tag--plain{border-color:transparent;padding:0;height:auto}
/* ---------- forms ---------- */
.ab-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.ab-field__label{font:500 var(--fs-micro)/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-subtle)}
.ab-field__row{display:flex;align-items:center;gap:8px;height:44px;padding:0 12px;border:var(--bw) solid var(--border);border-radius:var(--r-1);background:var(--surface-raised);transition:border-color var(--dur-1) var(--ease)}
.ab-field__row:hover{border-color:var(--fg-faint)}
.ab-field__row:focus-within{border-color:var(--fg);box-shadow:0 0 0 3px var(--accent-soft)}
.ab-field__input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--fg);font:400 16px/1 var(--font-sans)}
.ab-field__input::placeholder{color:var(--fg-faint)}
.ab-field__hint{font:400 var(--fs-small)/1.4 var(--font-sans);color:var(--fg-subtle)}
.ab-field[data-invalid="true"] .ab-field__row{border-color:var(--accent-text)}
.ab-field[data-invalid="true"] .ab-field__hint{color:var(--accent-text)}
.ab-switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font:var(--type-ui);color:var(--fg);user-select:none}
.ab-switch__track{position:relative;width:36px;height:20px;border-radius:var(--r-pill);background:var(--surface-sunk);border:var(--bw) solid var(--border);transition:background var(--dur-2) var(--ease)}
.ab-switch__thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:var(--r-pill);background:var(--fg);transition:transform var(--dur-2) var(--ease),background var(--dur-2) var(--ease)}
.ab-switch[data-on="true"] .ab-switch__track{background:var(--accent);border-color:var(--accent)}
.ab-switch[data-on="true"] .ab-switch__thumb{transform:translateX(16px);background:#fff}
/* ---------- content ---------- */
.ab-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font:500 var(--fs-micro)/1.3 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-subtle)}
.ab-meta__sep{color:var(--fg-faint)}
.ab-meta__dot{width:8px;height:8px;flex:none}
.ab-card{display:flex;flex-direction:column;gap:14px;color:inherit;text-decoration:none;border-top:var(--bw) solid var(--border-strong);padding-top:14px;min-width:0}
.ab-card:hover{color:inherit}
.ab-card__media{position:relative;overflow:hidden;background:var(--surface-sunk);aspect-ratio:3/2}
.ab-card__media img{width:100%;height:100%;object-fit:cover;transition:transform var(--dur-3) var(--ease)}
.ab-card:hover .ab-card__media img{transform:scale(1.025)}
.ab-card__title{font:700 26px/1.08 var(--font-sans);letter-spacing:var(--tracking-head);margin:0;display:flex;gap:10px;justify-content:space-between;align-items:flex-start}
.ab-card__arrow{flex:none;margin-top:4px;transition:transform var(--dur-2) var(--ease),color var(--dur-2) var(--ease);color:var(--fg-faint)}
.ab-card:hover .ab-card__arrow{transform:translate(3px,-3px);color:var(--accent)}
.ab-card:hover .ab-card__title-text{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:.14em;text-decoration-color:var(--accent)}
.ab-card__excerpt{font:400 16px/1.55 var(--font-sans);color:var(--fg-muted);margin:0}
.ab-card--feature .ab-card__title{font-size:var(--fs-h1);font-weight:700;letter-spacing:var(--tracking-display);line-height:.98}
.ab-card--feature .ab-card__excerpt{font-size:20px}
.ab-card--row{flex-direction:row;align-items:baseline;gap:24px;padding:16px 0;border-top-color:var(--border)}
.ab-card--row .ab-card__title{font-size:20px;flex:1}
.ab-card--row .ab-meta{width:170px;flex:none}
.ab-ph{display:flex;align-items:flex-end;padding:10px;width:100%;height:100%;background:repeating-linear-gradient(135deg,var(--placeholder-stripe) 0 1px,transparent 1px 12px),var(--placeholder);font:500 var(--fs-micro)/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-faint)}
.ab-photo{position:relative;display:block;padding:0;border:0;overflow:hidden;background:var(--surface-sunk);cursor:zoom-in;width:100%;color:inherit}
.ab-photo img{width:100%;height:100%;object-fit:cover;transition:transform var(--dur-3) var(--ease),filter var(--dur-3) var(--ease)}
.ab-photo:hover img{transform:scale(1.02)}
.ab-photo__cap{position:absolute;left:10px;bottom:10px;padding:5px 7px;background:var(--ink);color:var(--white);font:500 10px/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;opacity:0;transform:translateY(4px);transition:all var(--dur-2) var(--ease)}
.ab-photo:hover .ab-photo__cap,.ab-photo:focus-visible .ab-photo__cap{opacity:1;transform:none}
.ab-code{background:var(--code-bg);color:var(--code-fg);border-radius:var(--r-2);overflow:hidden;border:var(--bw) solid var(--code-border);min-width:0}
.ab-code__bar{display:flex;align-items:center;gap:10px;height:40px;padding:0 6px 0 14px;background:var(--code-bar);border-bottom:var(--bw) solid var(--code-border);font:500 12px/1 var(--font-mono);color:var(--night-fg-2)}
.ab-code__file{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--night-fg)}
.ab-code__lang{text-transform:uppercase;letter-spacing:var(--tracking-mono);font-size:10px;color:var(--night-fg-3)}
.ab-code__pre{margin:0;padding:16px 0;overflow:auto;font:var(--type-code);counter-reset:ln}
.ab-code__line{display:block;padding:0 18px 0 0;white-space:pre}
.ab-code__line::before{counter-increment:ln;content:counter(ln);display:inline-block;width:40px;padding-right:16px;text-align:right;color:var(--night-fg-3);user-select:none}
.ab-code__line[data-hl="true"]{background:rgba(35,66,255,.2);box-shadow:inset 2px 0 0 var(--accent)}
.ab-code__note{padding:12px 18px;border-top:var(--bw) solid var(--code-border);font:400 14px/1.5 var(--font-sans);color:var(--night-fg-2)}
.ab-quote{margin:0;padding:8px 0 8px 0;font:500 clamp(26px,3vw,36px)/1.2 var(--font-sans);color:var(--fg);letter-spacing:-.025em}
.ab-quote__by{display:block;margin-top:14px;font:500 var(--fs-micro)/1 var(--font-mono);font-style:normal;letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-subtle)}
.ab-design{display:flex;flex-direction:column;gap:10px;padding:0;border:0;background:none;text-align:left;cursor:zoom-in;color:inherit;width:100%;min-width:0}
.ab-design__media{position:relative;display:block;overflow:hidden;background:var(--surface-raised);border:var(--bw) solid var(--border)}
.ab-design__media img{width:100%;height:100%;object-fit:cover;transition:transform var(--dur-3) var(--ease)}
.ab-design:hover .ab-design__media img{transform:scale(1.02)}
.ab-design:hover .ab-design__media{border-color:var(--border-strong)}
.ab-design__kind{position:absolute;top:10px;left:10px;display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;background:var(--surface-raised);border:var(--bw) solid var(--border);font:500 10px/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg)}
.ab-design__orbit{position:absolute;right:10px;bottom:10px;display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;background:var(--accent);color:var(--accent-fg);transition:transform var(--dur-2) var(--ease)}
.ab-design:hover .ab-design__orbit{transform:rotate(-20deg)}
.ab-design__title{font:600 17px/1.25 var(--font-sans);letter-spacing:-.01em}
.ab-design:hover .ab-design__title{color:var(--accent-text)}
.ab-track{display:grid;grid-template-columns:120px minmax(0,1fr);gap:18px;align-items:stretch;padding:14px;background:var(--surface-raised);border:var(--bw) solid var(--border);min-width:0}
.ab-track--compact{grid-template-columns:minmax(0,1fr);padding:12px 0;background:none;border:0;border-top:var(--bw) solid var(--border)}
.ab-track__cover{aspect-ratio:1/1;overflow:hidden;background:var(--surface-sunk)}
.ab-track__cover img{width:100%;height:100%;object-fit:cover}
.ab-track__body{display:flex;flex-direction:column;justify-content:space-between;gap:14px;min-width:0}
.ab-track__head{display:flex;align-items:center;gap:14px;min-width:0}
.ab-track__play{flex:none;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--r-pill);border:0;background:var(--fg);color:var(--bg);cursor:pointer;transition:background var(--dur-1) var(--ease),transform var(--dur-1) var(--ease)}
.ab-track__play:hover,.ab-track[data-on="true"] .ab-track__play{background:var(--accent);color:var(--accent-fg)}
.ab-track__play:active{transform:scale(.96)}
.ab-track__title{font:600 17px/1.2 var(--font-sans);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ab-track:not(.ab-track--compact) .ab-track__title{white-space:normal;text-wrap:balance}
.ab-track__n{font:500 12px/1 var(--font-mono);color:var(--fg-faint);margin-right:10px}
.ab-track__time{flex:none;font:500 11px/1 var(--font-mono);letter-spacing:.04em;color:var(--fg-subtle);font-variant-numeric:tabular-nums}
.ab-track__wave{display:flex;align-items:center;gap:2px;height:36px;cursor:pointer}
.ab-track--compact .ab-track__wave{height:22px}
.ab-track__wave span{flex:1;min-width:1px;background:var(--fg-faint);opacity:.45;transition:background var(--dur-1) var(--ease),opacity var(--dur-1) var(--ease)}
.ab-track__wave span[data-past]{background:var(--accent);opacity:1}
.ab-track__wave:hover span{opacity:.7}
/* ---------- navigation ---------- */
.ab-header{position:sticky;top:0;z-index:var(--z-header);background:color-mix(in oklab,var(--bg) 86%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:var(--bw) solid var(--border)}
.ab-header__in{max-width:var(--page-max);margin:0 auto;padding:0 var(--gutter);height:60px;display:flex;align-items:center;gap:24px}
.ab-wordmark{display:inline-flex;align-items:baseline;gap:8px;text-decoration:none;color:var(--fg);font:700 17px/1 var(--font-sans);letter-spacing:-.02em;white-space:nowrap}
.ab-wordmark:hover{color:var(--fg)}
.ab-wordmark__slash{color:var(--accent);font-weight:400}
.ab-wordmark__sub{font:500 var(--fs-micro)/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-subtle)}
.ab-header__nav{display:flex;gap:4px;margin-left:auto;align-items:center}
.ab-navlink{display:inline-flex;align-items:center;height:32px;padding:0 10px;font:500 var(--fs-ui)/1 var(--font-sans);color:var(--fg-muted);text-decoration:none;border-radius:var(--r-1);background:none;border:0;cursor:pointer}
.ab-navlink:hover{color:var(--fg);background:var(--surface-sunk)}
.ab-navlink[aria-current="page"]{color:var(--fg);box-shadow:inset 0 -2px 0 var(--accent);border-radius:0}
.ab-tabs{display:flex;gap:22px;border-bottom:var(--bw) solid var(--border);overflow-x:auto;scrollbar-width:none}
.ab-tab{position:relative;display:inline-flex;align-items:baseline;gap:5px;height:44px;padding:14px 0 0;background:none;border:0;cursor:pointer;font:500 var(--fs-ui)/1 var(--font-sans);color:var(--fg-subtle);white-space:nowrap}
.ab-tab:hover{color:var(--fg)}
.ab-tab[aria-selected="true"]{color:var(--fg)}
.ab-tab[aria-selected="true"]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--fg)}
.ab-tab__count{font:500 10px/1 var(--font-mono);color:var(--fg-faint)}
.ab-footer{border-top:var(--bw) solid var(--border-strong);margin-top:var(--s-9)}
.ab-footer__in{max-width:var(--page-max);margin:0 auto;padding:28px var(--gutter) 40px;display:flex;flex-wrap:wrap;gap:16px 32px;align-items:baseline;justify-content:space-between;font:500 var(--fs-micro)/1.4 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--fg-subtle)}
.ab-footer__links{display:flex;flex-wrap:wrap;gap:18px}
.ab-footer a{color:var(--fg-muted);text-decoration:none}
.ab-footer a:hover{color:var(--accent-text)}
/* ---------- overlay ---------- */
.ab-lightbox{position:fixed;inset:0;z-index:var(--z-overlay);background:var(--scrim);display:grid;grid-template-rows:56px 1fr 56px;color:var(--night-fg);animation:ab-fade var(--dur-2) var(--ease)}
.ab-lightbox__top,.ab-lightbox__bot{display:flex;align-items:center;justify-content:space-between;padding:0 12px 0 20px;font:500 var(--fs-micro)/1 var(--font-mono);letter-spacing:var(--tracking-mono);text-transform:uppercase;color:var(--night-fg-2)}
.ab-lightbox__stage{position:relative;display:flex;align-items:center;justify-content:center;padding:0 72px;min-height:0}
.ab-lightbox__stage img,.ab-lightbox__stage .ab-ph{max-width:100%;max-height:100%;object-fit:contain}
.ab-lightbox__nav{position:absolute;top:50%;transform:translateY(-50%)}
.ab-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:var(--z-toast);display:inline-flex;align-items:center;gap:10px;height:40px;padding:0 16px;background:var(--ink);color:var(--white);border-radius:var(--r-1);box-shadow:var(--shadow-float);font:500 12px/1 var(--font-mono);letter-spacing:.03em;animation:ab-rise var(--dur-2) var(--ease)}
.ab-toast__mark{width:8px;height:8px;background:var(--hot)}
.ab-toast--static{position:static;transform:none;animation:none}
@keyframes ab-fade{from{opacity:0}}
@keyframes ab-rise{from{opacity:0;transform:translate(-50%,8px)}}
