:focus-visible{outline:3px solid var(--green);outline-offset:4px;border-radius:6px}
.card,.case,.contact-card,.button,.skill{transition:transform .28s cubic-bezier(.2,.8,.2,1),box-shadow .28s ease,border-color .28s ease,background-color .28s ease}
.card:hover,.case:hover,.skill:hover{transform:translateY(-4px);box-shadow:0 28px 72px rgba(20,48,59,.14),inset 0 1px 0 rgba(255,255,255,.9);border-color:rgba(255,255,255,.98)}
.button:hover{transform:translateY(-1px)}
.button{position:relative;isolation:isolate;--halo-a:#22d3a3;--halo-b:#4f8cff}
.button::before{content:"";position:absolute;z-index:-1;inset:-4px;border-radius:999px;background:conic-gradient(from 35deg,var(--halo-a),var(--halo-b),var(--halo-a));filter:blur(7px);opacity:0;transform:scale(.94);transition:opacity .24s ease,transform .24s ease}
.button:hover::before,.button:focus-visible::before{opacity:.72;transform:scale(1)}
.button:hover,.button:focus-visible{border-color:rgba(255,255,255,.96);box-shadow:inset 0 1px 0 rgba(255,255,255,.96),0 8px 24px color-mix(in srgb,var(--halo-a) 24%,transparent)}
.actions .button:nth-child(2){--halo-a:#5f8cff;--halo-b:#9b6cff}.actions .button:nth-child(3){--halo-a:#ff8a5b;--halo-b:#ff5fa2}.links .button{--halo-a:#35d6c7;--halo-b:#7b7cff}.contact-card .button:nth-of-type(2){--halo-a:#ffb84d;--halo-b:#ff6b8a}
.ops-panel{animation:signal-in .55s cubic-bezier(.2,.8,.2,1) both}
.season-signal{display:inline-flex;align-items:center;gap:7px;cursor:help}
.season-signal::before{content:"";width:8px;height:8px;border-radius:70% 20% 70% 20%;background:#c76a28;transform:rotate(18deg);box-shadow:0 0 0 4px rgba(199,106,40,.10)}
.season-note{position:absolute;opacity:0;pointer-events:none;transform:translateY(5px);font-size:.75rem;background:var(--navy);color:#fff;padding:6px 9px;border-radius:8px;transition:opacity .18s ease,transform .18s ease}
.season-signal:hover .season-note,.season-signal:focus .season-note{opacity:1;transform:translateY(-30px)}
@keyframes signal-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.card,.case,.contact-card,.button,.button::before,.skill,.season-note{transition:none}.ops-panel{animation:none}.card:hover,.case:hover,.skill:hover,.button:hover{transform:none}}

/* Progressive motion: content remains visible until JavaScript opts in. */
.motion-ready .reveal{opacity:0;transform:translateY(16px);transition:opacity .52s ease var(--reveal-delay,0ms),transform .52s cubic-bezier(.2,.75,.25,1) var(--reveal-delay,0ms)}
.motion-ready .reveal.is-visible{opacity:1;transform:none}
.links a:not(.button){position:relative}
.links a:not(.button)::after{content:"";position:absolute;left:0;right:0;bottom:-7px;height:2px;background:var(--green);transform:scaleX(0);transform-origin:left;transition:transform .2s ease}
.links a:not(.button):hover::after,.links a[aria-current="page"]::after{transform:scaleX(1)}
.flow .node{transition:transform .2s ease,border-color .2s ease}
.flow .node:hover{transform:translateY(-3px)}
.ops-panel .status b::before{content:"";display:inline-block;width:6px;height:6px;margin-right:7px;border-radius:50%;background:var(--mint);box-shadow:0 0 0 0 rgba(34,211,163,.35);animation:status-pulse 2.8s ease-out infinite}
.lifecycle .stage{transition:transform .22s ease,background-color .22s ease}
.lifecycle .stage:hover{transform:translateY(-3px);background:#10262b}
@keyframes status-pulse{0%,40%{box-shadow:0 0 0 0 rgba(34,211,163,.34)}70%,100%{box-shadow:0 0 0 8px rgba(34,211,163,0)}}
@media(prefers-reduced-motion:reduce){.motion-ready .reveal{opacity:1;transform:none;transition:none}.links a:not(.button)::after,.flow .node,.lifecycle .stage{transition:none}.flow .node:hover,.lifecycle .stage:hover{transform:none}.ops-panel .status b::before{animation:none}.season-note{display:none}}
