/* Shared, finite effects. Game state and permissions stay with the existing controllers. */
:root{--lv-surface:var(--bg-card,var(--site-card,#172131));--lv-text:var(--text-main,var(--site-text,#edf2fa));--lv-muted:var(--text-dim,var(--site-muted,#a0aec0));--lv-line:var(--border-color,var(--site-border,#344258));--lv-green:#39b97e;--lv-gold:var(--gold,#e7bd6c)}
[data-theme=light]{--lv-surface:var(--bg-card,var(--site-card,#fff));--lv-text:var(--text-main,var(--site-text,#263249));--lv-muted:var(--text-dim,var(--site-muted,#55667d));--lv-line:var(--border-color,var(--site-border,#d4dce7));--lv-green:#13814b}
.char-pill{position:relative;isolation:isolate;transition:border-color .35s,box-shadow .35s,background .35s,outline-color .25s}.char-pill .char-pill-id-wrap>svg{box-sizing:content-box;width:20px;height:22px;padding:9px 8px;background:var(--bg-subtle);clip-path:polygon(10% 0,90% 0,100% 60%,50% 100%,0 60%);transition:transform .4s,background .4s;fill:var(--lv-muted)!important}.char-pill.active:not(.is-grouped){border-color:var(--lv-gold)!important;background:linear-gradient(115deg,color-mix(in srgb,var(--lv-gold) 10%,var(--lv-surface)),var(--lv-surface))!important;box-shadow:0 4px 18px #0002}.char-pill.active .char-pill-id-wrap>svg{background:var(--lv-gold);fill:var(--lv-surface)!important;transform:translateY(-3px)}.char-pill.lv-character{animation:lv-character .75s ease-out}.checkbox-cell.lv-confirmed .checkbox-box,.checkbox-cell.lv-confirmed .custom-checkbox{animation:lv-check .5s ease-out}.checkbox-cell.lv-confirmed{animation:lv-green-flash .8s ease-out}
.lv-match{background:color-mix(in srgb,var(--lv-gold) 27%,transparent);color:inherit;border-radius:3px;padding:0 1px}.lv-result{animation:lv-result .3s ease-out both;animation-delay:var(--lv-delay,0ms)}#catalog .row{transition:outline-color .2s,box-shadow .2s,background .2s}#catalog .row:hover,#catalog .row:focus-within,#catalog .row.lv-selected{box-shadow:0 4px 12px #0002;position:relative;z-index:1}#catalog .row.lv-selected{outline:1px solid var(--lv-gold);outline-offset:-1px}.lv-branch{animation:lv-branch .5s ease-out both;animation-delay:var(--lv-delay,0ms)}.lv-branch-lines>.node{animation:lv-lines .8s ease-out}
.lv-save{position:relative;isolation:isolate}.lv-save[data-save-state=pending]::after,.lv-save[data-save-state=success]::after,.lv-save[data-save-state=error]::after{content:attr(data-save-label);position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:inherit;background:var(--lv-surface);color:var(--lv-text);font:inherit;z-index:1;pointer-events:none;box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-save[data-save-state=pending]::after{padding-left:19px}.lv-save[data-save-state=pending]::before{content:"";position:absolute;left:8px;top:calc(50% - 6px);width:12px;height:12px;border:2px solid var(--lv-line);border-top-color:var(--lv-gold);border-radius:50%;animation:lv-spin .7s linear infinite;z-index:2;pointer-events:none}.lv-save[data-save-state=success]::after{content:'✓ ' attr(data-save-label);color:var(--lv-green);box-shadow:inset 0 0 0 1px var(--lv-green);animation:lv-result .3s ease-out}.lv-save[data-save-state=error]::after{content:'! ' attr(data-save-label);color:#db765e;box-shadow:inset 0 0 0 1px #db765e}
.site-online{position:relative}.site-online.lv-online-up:after{content:"";position:absolute;left:9px;top:calc(50% - 5px);width:10px;height:10px;border:1px solid var(--lv-green);border-radius:50%;animation:lv-online-ring .8s ease-out;pointer-events:none}.site-online.lv-online-change .site-online-label{animation:lv-number .4s ease-out}
#adminModal .lv-tabs{position:relative}#adminModal .lv-tab-ink{position:absolute;left:0;top:0;pointer-events:none;background:var(--lv-surface);border-radius:8px;box-shadow:inset 0 -2px var(--lv-gold),0 0 0 1px var(--lv-line);transition:transform .3s cubic-bezier(.2,.8,.2,1),width .3s,height .3s}#adminModal .lv-tabs .admin-view-tab{position:relative;z-index:1}#adminModal .lv-tabs .admin-view-tab[aria-selected=true]{background:transparent;box-shadow:none}#adminModal .admin-user-item{transition:border-color .25s,box-shadow .25s,background .25s}#adminModal .admin-user-item.active{border-color:var(--lv-gold);box-shadow:inset 0 0 0 1px var(--lv-gold)}.lv-journal-new{animation:lv-journal-new 1.4s ease-out}
.lv-flower{width:110px;min-width:110px;height:120px;position:relative;background:radial-gradient(ellipse at 50% 70%,#74b57815,transparent 70%);border-radius:20px}.lv-flower svg{display:block;width:100%;height:100%;overflow:visible}.lv-flower-stem{transform-origin:90px 158px;transition:transform 1.5s}.lv-flower[data-stage="1"] .lv-flower-stem{transform:scale(.4)}.lv-flower[data-stage="2"] .lv-flower-stem{transform:scale(.72)}.lv-leaf{transition:transform 1.5s}.lv-leaf-left{transform-origin:88px 128px}.lv-leaf-right{transform-origin:92px 104px}.lv-flower[data-stage="1"] .lv-leaf{transform:scale(.35)}.lv-petal{transform-origin:90px 56px;transform:rotate(var(--angle)) scale(.06);transition:transform 1.6s cubic-bezier(.2,.8,.3,1);transition-delay:calc(var(--petal)*45ms)}.lv-petal-inner{transform-origin:90px 56px;transform:scale(0);transition:transform 1.6s .2s}.lv-bud,.lv-calyx{transform-origin:90px 72px;transition:transform 1.1s,opacity 1s}.lv-petals>circle{opacity:0;transition:opacity 1.3s}.lv-flower[data-stage="4"] .lv-petal{transform:rotate(var(--angle)) scale(1)}.lv-flower[data-stage="4"] .lv-petal-inner{transform:scale(1)}.lv-flower[data-stage="4"] .lv-petals>circle{opacity:1}.lv-flower[data-stage="4"] .lv-bud{transform:scale(.1);opacity:0}.lv-flower[data-stage="4"] .lv-calyx{transform:scale(.6);opacity:0}.lv-flower[data-stage="1"] .lv-flower-head,.lv-flower[data-stage="2"] .lv-flower-head{opacity:0}.lv-flower-head{transition:opacity 1s}.lv-harvested{opacity:.6;filter:saturate(.5)}
.lv-piano{margin:12px 0;border:1px solid var(--lv-line);padding:12px;border-radius:10px;background:var(--lv-surface)}.lv-piano-label{font-size:12px;color:var(--lv-muted);margin-bottom:8px}.lv-keyboard{height:67px;position:relative;margin-bottom:9px}.lv-key{position:absolute;left:calc(var(--key)*100% / 7);width:calc(100% / 7 - 2px);height:100%;background:linear-gradient(#f4f7fb,#c9d2df);border-radius:3px 3px 5px 5px;box-shadow:0 3px 0 #748295;transition:background .08s,transform .08s}.lv-key.lv-black{width:calc(100% / 12);height:62%;background:linear-gradient(#3d4960,#182131);z-index:1;box-shadow:0 2px 0 #080d18}.lv-key.lv-note-on{background:linear-gradient(#f6dfaa,#d2aa59);transform:translateY(2px);box-shadow:0 1px 0 #927634,0 0 14px #e7bd6c44}.lv-chord{min-height:18px;font-size:11px;color:var(--lv-muted);overflow-wrap:anywhere}
.lv-notice-panel,.lv-notice-popup{position:fixed;width:350px;max-width:calc(100vw - 20px);z-index:2500;border:1px solid var(--lv-line);border-radius:14px;background:var(--lv-surface);color:var(--lv-text);box-shadow:0 14px 45px #0004;font:13px/1.5 Arial,sans-serif;animation:lv-notice .3s ease-out}.lv-notice-panel[hidden]{display:none}.lv-notice-heading{display:flex;align-items:center;justify-content:space-between;padding:12px 15px;border-bottom:1px solid var(--lv-line)}.lv-notice-heading button,.lv-notice-dismiss{font:20px Arial;border:0;background:none;color:var(--lv-muted);cursor:pointer;padding:5px 9px}.lv-notice-list{max-height:min(360px,55vh);overflow:auto;padding:8px}.lv-notice-card{padding:12px;border:1px solid var(--lv-line);border-radius:9px;margin-bottom:7px;background:var(--lv-surface);animation:lv-notice .35s ease-out both;animation-delay:var(--lv-delay,0ms)}.lv-notice-card strong{font-size:13px}.lv-notice-card p{font-size:12px;margin:5px 0;overflow-wrap:anywhere}.lv-notice-card small,.lv-notice-empty{font-size:11px;color:var(--lv-muted)}.lv-notice-settings{display:block;margin:7px 12px 12px;padding:8px 12px;background:transparent;border:1px solid var(--lv-line);border-radius:8px;color:var(--lv-text);font:12px Arial;cursor:pointer}.lv-notice-popup{padding:16px 36px 16px 16px}.lv-notice-dismiss{position:absolute;right:5px;top:5px}#notifToggle.lv-unread{box-shadow:0 0 0 2px var(--lv-gold)}
@keyframes lv-character{0%{filter:brightness(1)}35%{filter:brightness(1.25)}100%{filter:brightness(1)}}@keyframes lv-check{0%{transform:scale(1.4) rotate(-15deg)}65%{transform:scale(.9)}100%{transform:none}}@keyframes lv-green-flash{40%{box-shadow:inset 0 0 18px #39b97e55}}@keyframes lv-result{from{opacity:.3;translate:0 6px}to{opacity:1;translate:0 0}}@keyframes lv-branch{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@keyframes lv-lines{from{border-color:var(--lv-gold)}to{border-color:var(--lv-line)}}@keyframes lv-spin{to{transform:rotate(360deg)}}@keyframes lv-online-ring{from{transform:scale(.5);opacity:.8}to{transform:scale(2.4);opacity:0}}@keyframes lv-number{from{opacity:.4;translate:0 4px}to{opacity:1;translate:0 0}}@keyframes lv-journal-new{from{background:color-mix(in srgb,var(--lv-gold) 18%,var(--lv-surface))}to{background:transparent}}@keyframes lv-notice{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
@media(max-width:600px){.lv-flower{width:70px;min-width:70px;height:85px}.lv-notice-panel,.lv-notice-popup{right:10px!important}.lv-chord{font-size:11px}}
@media(prefers-reduced-motion:reduce){.lv-character,.lv-result,.lv-branch,.lv-branch-lines>.node,.lv-journal-new,.lv-notice-panel,.lv-notice-card,.lv-notice-popup,.lv-confirmed,.lv-confirmed *,.lv-save:before,.lv-save:after,.lv-online-up:after,.lv-online-change .site-online-label{animation:none!important}.lv-flower *,.lv-key,.lv-tab-ink,.char-pill,.char-pill svg{transition:none!important}}
#adminModal .lv-tabs{overflow:hidden}
:root{--lv-surface:#151f30}[data-theme=light]{--lv-surface:#fff}
#characterPillList .char-pill{flex-basis:150px;min-width:132px;max-width:150px;padding:5px 8px;gap:2px}#characterPillList .char-pill.active .char-pill-name{color:var(--text-main)}#characterPillList .char-pill-id-wrap{gap:5px;min-width:0}
.batch-top:has(.lv-flower) .batch-name{flex:1}.batch-top:has(.lv-flower){align-items:center}
@media(max-width:500px){.batch-top:has(.lv-flower){display:grid;grid-template-columns:70px minmax(0,1fr);gap:10px}.batch-top:has(.lv-flower) .time{grid-column:2;margin-top:0}.batch-top:has(.lv-flower) .lv-flower{grid-row:1/3}}
/* Compact cards; a travelling sheen continues through roster re-renders. */
#characterPillList .char-pill{overflow:hidden}
#characterPillList .char-pill .char-pill-id-wrap>svg{width:12px;height:14px;padding:2px;transform:none}
#characterPillList .char-pill-row-top,#characterPillList .char-pill-row-bottom{position:relative;z-index:1}
#characterPillList .lv-character-sweep::before,#characterPillList .lv-character-sweep::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;animation:lv-character-sheen 1.15s cubic-bezier(.2,.65,.3,1) both;animation-delay:var(--lv-sweep-delay,0ms)}
#characterPillList .lv-character-sweep::before{background:linear-gradient(110deg,transparent 5%,#d9a33d10 22%,#f5cf795e 42%,#fff4cc66 51%,#78cce92b 65%,transparent 86%)}
#characterPillList .lv-character-sweep::after{background:linear-gradient(110deg,transparent 40%,#ffe9af90 50%,transparent 58%);mix-blend-mode:screen}
html[data-theme=light] #characterPillList .lv-character-sweep::before{background:linear-gradient(110deg,transparent 5%,#e8ae3430 25%,#dfa63270 44%,#fff4baaa 52%,#7dbdcf40 64%,transparent 86%)}
@keyframes lv-character-sheen{0%{transform:translateX(-115%);opacity:0}15%{opacity:1}75%{opacity:1}100%{transform:translateX(115%);opacity:0}}
@media(prefers-reduced-motion:reduce){#characterPillList .lv-character-sweep::before,#characterPillList .lv-character-sweep::after{animation:none!important;display:none}}
