/* R-DUB'S shared buttons. Add to every page: <link rel="stylesheet" href="/rd-buttons.css"> and <script src="/rd-buttons.js" defer></script>
   Primary = .go / .btnGreen (one bright green main action per screen). Secondary = .alt / .btnGhost (outlined).
   Busy/done states are automatic: a disabled button whose label ends in "..." shows a spinner, then a short success pop. */
body .go,body .btnGreen{background:var(--green);color:var(--btn-text,var(--on-green,#10120f));border:0;font-weight:900;letter-spacing:.04em;box-shadow:0 2px 0 rgba(0,0,0,.18);transition:transform .12s ease,box-shadow .12s ease,filter .15s ease,opacity .15s ease}
body .go{min-height:48px;border-radius:12px}
body .go:hover,body .btnGreen:hover{filter:brightness(1.07)}
body .go:active,body .btnGreen:active{transform:translateY(1px) scale(.99);box-shadow:none}
body .alt,body .btnGhost{background:transparent;color:var(--text);border:1.5px solid var(--line);font-weight:800;transition:border-color .15s ease,color .15s ease,background .15s ease,transform .12s ease}
body .alt{min-height:46px;border-radius:12px}
body .alt:hover,body .btnGhost:hover{border-color:var(--green);color:var(--green)}
body .alt:active,body .btnGhost:active{transform:scale(.99)}
body .go:focus-visible,body .alt:focus-visible,body .btnGreen:focus-visible,body .btnGhost:focus-visible,.nav .lk:focus-visible{outline:3px solid var(--green);outline-offset:2px}
/* header links become real buttons */
.nav .lk{display:inline-flex;align-items:center;border:1.5px solid var(--line);border-radius:10px;padding:8px 14px;font-weight:800;color:var(--text);text-decoration:none;transition:border-color .15s ease,color .15s ease,background .15s ease}
.nav .lk:hover{border-color:var(--green);color:var(--green)}
/* busy + done */
button:disabled,.is-busy{cursor:progress}
body .is-busy{opacity:.92;pointer-events:none}
.is-busy::before{content:"";display:inline-block;width:.95em;height:.95em;margin-right:.6em;border:2.5px solid currentColor;border-right-color:transparent;border-radius:50%;vertical-align:-.12em;animation:rdbSpin .7s linear infinite}
@keyframes rdbSpin{to{transform:rotate(360deg)}}
.is-done{animation:rdbPop .6s cubic-bezier(.2,1.6,.4,1)}
@keyframes rdbPop{0%{transform:scale(1)}40%{transform:scale(1.04)}100%{transform:scale(1)}}
.is-fail{animation:rdbShake .45s}
@keyframes rdbShake{20%{transform:translateX(-6px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}}
@media (prefers-reduced-motion:reduce){.is-busy::before,.is-done,.is-fail{animation:none}body .go,body .btnGreen,body .alt,body .btnGhost{transition:none}}
