*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text-1);font:var(--type-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4{margin:0;color:var(--text-1)}
h1{font:var(--type-h1);letter-spacing:var(--track-h1)}
h2{font:var(--type-h2);letter-spacing:var(--track-h2)}
h3{font:var(--type-h3);letter-spacing:var(--track-h3)}
h4{font:var(--type-h4)}
p{margin:0 0 var(--sp-2)}
a{color:var(--bordeaux-600);text-decoration:none;transition:color var(--motion-fast) var(--ease)}
a:hover{color:var(--bordeaux-500)}
::selection{background:var(--bordeaux-600);color:var(--text-on-accent)}
.wv-overline{font:var(--type-overline);letter-spacing:var(--track-overline);text-transform:uppercase;color:var(--text-3)}
.wv-quote{font:var(--type-quote);color:var(--text-1)}
.wv-kpi{font:var(--type-kpi);color:var(--text-1);font-feature-settings:"tnum"}
.wv-hair{border:0;border-top:1px solid var(--line);margin:0}

/* Wachenberg component classes — consumed by the JSX primitives and directly usable in plain HTML. */

/* ---------- Button ---------- */
.wv-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-1);height:44px;padding:0 var(--sp-3);border:1px solid transparent;border-radius:var(--radius-1);font:600 15px/1 var(--font-body);letter-spacing:.01em;cursor:pointer;user-select:none;text-decoration:none;transition:background-color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease),color var(--motion-fast) var(--ease)}
.wv-btn--sm{height:36px;padding:0 var(--sp-2);font-size:14px}
.wv-btn--primary{background:var(--bordeaux-600);color:var(--text-on-accent)}
.wv-btn--primary:hover{background:var(--bordeaux-500)}
.wv-btn--primary:active{background:var(--bordeaux-700)}
.wv-btn--secondary{background:transparent;color:var(--text-1);border-color:var(--line-strong)}
.wv-btn--secondary:hover{border-color:var(--bordeaux-500);color:var(--bordeaux-600)}
.wv-btn--secondary:active{background:var(--paper-2)}
.wv-btn--ghost{background:transparent;color:var(--bordeaux-600)}
.wv-btn--ghost:hover{background:rgba(138,21,56,.06)}
.wv-btn--ghost:active{background:rgba(138,21,56,.12)}
.wv-btn:disabled{opacity:.38;pointer-events:none}
.wv-btn:focus-visible{outline:1px solid var(--focus-ring);outline-offset:2px}

/* ---------- Form fields ---------- */
.wv-field{display:flex;flex-direction:column;gap:6px}
.wv-field__label{font:var(--type-overline);letter-spacing:var(--track-overline);text-transform:uppercase;color:var(--text-2)}
.wv-field__msg{font:var(--type-caption);color:var(--text-3)}
.wv-field--error .wv-field__msg{color:var(--err-text)}
.wv-input{height:44px;padding:0 14px;background:var(--paper-0);border:1px solid var(--line-strong);border-radius:var(--radius-1);color:var(--text-1);font:400 15px/1.4 var(--font-body);transition:border-color var(--motion-fast) var(--ease),background-color var(--motion-fast) var(--ease)}
.wv-input::placeholder{color:var(--text-3)}
.wv-input:hover{border-color:var(--ink-400)}
.wv-input:focus{outline:none;border-color:var(--bordeaux-500)}
.wv-input:disabled{opacity:.38;pointer-events:none;background:var(--paper-1)}
.wv-field--error .wv-input{border-color:var(--err-text)}
textarea.wv-input{height:auto;min-height:96px;padding:12px 14px;resize:vertical}
select.wv-input{appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%235C5560' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center}
.wv-check{display:inline-flex;align-items:center;gap:10px;font:400 15px/1.3 var(--font-body);color:var(--text-1);cursor:pointer}
.wv-check input{appearance:none;width:18px;height:18px;margin:0;flex:none;background:var(--paper-0);border:1px solid var(--line-strong);border-radius:var(--radius-1);cursor:pointer;transition:background-color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease)}
.wv-check input:hover{border-color:var(--bordeaux-500)}
.wv-check input:checked{background:var(--bordeaux-600) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='9' viewBox='0 0 11 9'%3E%3Cpath d='M1 4.5L4 7.5L10 1' fill='none' stroke='%23FDF9F5' stroke-width='1.5'/%3E%3C/svg%3E") center no-repeat;border-color:var(--bordeaux-600)}
.wv-check input:focus-visible{outline:1px solid var(--focus-ring);outline-offset:2px}
.wv-check input:disabled{opacity:.38;pointer-events:none}

/* ---------- Card ---------- */
.wv-card{background:var(--surface-card);border:1px solid var(--line);border-radius:var(--radius-2);padding:var(--sp-3)}
.wv-card--interactive{transition:border-color var(--motion-fast) var(--ease);cursor:pointer}
.wv-card--interactive:hover{border-color:var(--bordeaux-400)}
.wv-card--accent{border-top:2px solid var(--bordeaux-600)}

/* ---------- Badge ---------- */
.wv-badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border:1px solid var(--line-strong);border-radius:var(--radius-1);font:600 11px/1 var(--font-body);letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);white-space:nowrap;background:var(--paper-0)}
.wv-badge::before{content:"";width:5px;height:5px;background:currentColor}
.wv-badge--accent{color:var(--bordeaux-700);border-color:var(--bordeaux-300);background:var(--bordeaux-100)}
.wv-badge--info{color:var(--plum-600);border-color:var(--plum-300);background:var(--plum-100)}
.wv-badge--success{color:var(--ok-text);border-color:var(--ok-line);background:var(--ok-bg)}
.wv-badge--warning{color:var(--warn-text);border-color:var(--warn-line);background:var(--warn-bg)}
.wv-badge--error{color:var(--err-text);border-color:var(--err-line);background:var(--err-bg)}

/* ---------- Table ---------- */
.wv-table{width:100%;border-collapse:collapse;font:var(--type-body-sm)}
.wv-table th{font:600 11px/1.3 var(--font-body);letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);text-align:left;padding:10px 12px;border-bottom:1px solid var(--line-strong)}
.wv-table td{padding:12px;border-bottom:1px solid var(--line);color:var(--text-1)}
.wv-table th.num,.wv-table td.num{text-align:right;font-feature-settings:"tnum"}
.wv-table tbody tr{transition:background-color var(--motion-fast) var(--ease)}
.wv-table tbody tr:hover{background:rgba(138,21,56,.03)}

/* ---------- Top navigation ---------- */
.wv-nav{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);height:72px;padding:0 var(--sp-4);background:var(--bg);border-bottom:1px solid var(--line)}
.wv-nav__brand{font:600 18px/1 var(--font-body);letter-spacing:.01em;color:var(--text-1);text-decoration:none}
.wv-nav__brand em{font-family:var(--font-display);font-style:normal;color:var(--bordeaux-600)}
.wv-nav__links{display:flex;gap:var(--sp-4);align-items:center}
.wv-nav__link{font:600 13px/1 var(--font-body);letter-spacing:.05em;text-transform:uppercase;color:var(--text-2);text-decoration:none;padding:8px 0;border-bottom:1px solid transparent;transition:color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease);cursor:pointer;background:none;border-top:0;border-left:0;border-right:0}
.wv-nav__link:hover{color:var(--text-1)}
.wv-nav__link--active{color:var(--bordeaux-700);border-bottom-color:var(--bordeaux-600)}

/* ---------- Modal ---------- */
.wv-modal-backdrop{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;background:rgba(34,29,38,.42);animation:wv-fade var(--motion-base) var(--ease)}
.wv-modal{width:min(520px,calc(100vw - 48px));background:var(--surface-raised);border:1px solid var(--line);border-top:2px solid var(--bordeaux-600);border-radius:var(--radius-2);padding:var(--sp-4);box-shadow:var(--shadow-raised);animation:wv-rise var(--motion-base) var(--ease)}
.wv-modal__title{font:var(--type-h3);letter-spacing:var(--track-h3);margin:0 0 var(--sp-2)}
.wv-modal__actions{display:flex;justify-content:flex-end;gap:var(--sp-15);margin-top:var(--sp-4)}
@keyframes wv-fade{from{opacity:0}}
@keyframes wv-rise{from{opacity:0;transform:translateY(8px)}}

/* ---------- Timeline ---------- */
.wv-timeline{list-style:none;margin:0;padding:0}
.wv-timeline li{position:relative;padding:0 0 var(--sp-4) 28px}
.wv-timeline li::before{content:"";position:absolute;left:3.5px;top:14px;bottom:-2px;width:1px;background:var(--line-strong)}
.wv-timeline li:last-child::before{display:none}
.wv-timeline li::after{content:"";position:absolute;left:0;top:6px;width:8px;height:8px;background:var(--bg);border:1px solid var(--line-strong)}
.wv-timeline li.is-done::after{background:var(--bordeaux-600);border-color:var(--bordeaux-600)}
.wv-timeline li.is-active::after{background:var(--bg);border-color:var(--bordeaux-500);outline:1px solid var(--bordeaux-200);outline-offset:2px}
.wv-timeline li.is-done::before{background:var(--bordeaux-300)}
.wv-timeline__title{font:600 15px/1.3 var(--font-body);color:var(--text-1)}
.wv-timeline li.is-active .wv-timeline__title{color:var(--bordeaux-700)}
.wv-timeline__meta{font:var(--type-caption);color:var(--text-3);margin-top:2px}

/* ---------- Stat tile ---------- */
.wv-stat{background:var(--surface-card);border:1px solid var(--line);border-radius:var(--radius-2);padding:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-1)}
.wv-stat__label{font:var(--type-overline);letter-spacing:var(--track-overline);text-transform:uppercase;color:var(--text-3)}
.wv-stat__value{font:var(--type-kpi-sm);color:var(--bordeaux-700);font-feature-settings:"tnum"}
.wv-stat__delta{font:var(--type-caption);color:var(--text-2)}
.wv-stat__delta--up{color:var(--ok-text)}
.wv-stat__delta--down{color:var(--err-text)}
