/* Touch interactions, contextual menus and the collection shelf. */
.dialog-open{overflow:hidden}.track-swipe-shell{display:contents}.swipe-actions{display:none}
.track-swipe-shell:not(:last-child)>.track-row{border-bottom:1px solid var(--line)}
.track-row{cursor:pointer;touch-action:pan-y;transition:background .18s,transform .38s cubic-bezier(.22,1,.36,1)}
.track-row.touch-press{background:var(--grouped);transform:scale(.985)}
.track-row .waveform{position:relative;display:block;height:38px;padding:0;overflow:visible;color:var(--secondary);isolation:isolate}
.track-row .waveform .wave-svg{display:block;width:100%;height:36px;overflow:visible;fill:none;stroke-width:2.25;stroke-linecap:round}
.waveform .wave-base{stroke:var(--wave-idle,#b6b6be)}.waveform .wave-progress{stroke:var(--accent)}
.track-row.playing .waveform .wave-base{stroke:var(--wave-idle,#b6b6be)}
.track-row .waveform .wave-playhead{position:absolute;left:var(--wave-progress,0%);top:0;width:1.5px;min-width:0;height:36px;max-height:none;background:var(--accent);border-radius:1px;opacity:0;pointer-events:none;box-shadow:0 0 6px #fa2d4825;transform:translateX(-.75px)}
.track-row.current .waveform .wave-playhead{opacity:1}.track-row.playing .track-names strong:after{content:' ♪';color:var(--accent);font-size:14px}
html[data-theme="dark"]{--wave-idle:#62626b}
.track-row .waveform:hover .wave-base{stroke:#92929c}
.player-progress input{background:linear-gradient(to right,var(--accent) var(--progress,0%),var(--control) var(--progress,0%))}
.search-box{position:relative}.search-suggestions{position:absolute;z-index:80;top:calc(100% + 12px);right:0;width:360px;padding:20px;border:1px solid var(--glass-border);border-radius:22px;background:var(--glass);box-shadow:0 16px 55px #00000018;backdrop-filter:blur(35px) saturate(1.8);-webkit-backdrop-filter:blur(35px) saturate(1.8);animation:context-in .22s var(--spring)}
.suggestion-heading{font-size:13px;font-weight:600;color:var(--secondary);margin-bottom:14px}.suggestion-chips{display:flex;gap:8px;flex-wrap:wrap}.suggestion-chips button{display:flex;align-items:center;gap:7px;padding:9px 12px;border-radius:12px;background:var(--control);font-size:14px;min-height:40px}.suggestion-chips svg{width:15px;height:15px;color:var(--secondary)}.search-tip{font-size:12px;color:var(--secondary);margin-top:16px}
.collection-overview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px;margin-top:18px;margin-bottom:32px}.album-collection{text-align:left;padding:0;min-width:0}.album-cover{aspect-ratio:1.2;border-radius:22px;display:grid;place-items:center;box-shadow:var(--shadow);background-size:cover;background-position:center;margin-bottom:16px;overflow:hidden;color:white}.album-cover svg{width:48px;height:48px;filter:drop-shadow(0 5px 12px #0007);opacity:.8}.album-collection strong{display:block;font-size:19px;color:var(--ink);font-weight:600}.album-collection small{display:block;color:var(--secondary);font-size:14px;margin-top:6px}.cover-calm{background-image:url('assets/cover-calm.svg')}.cover-cinematic{background-image:url('assets/cover-cinematic.svg')}.cover-details{background-image:url('assets/cover-details.svg')}.new-album .album-cover{background:var(--grouped);color:var(--accent);box-shadow:none}.new-album svg{filter:none}.album-collection:hover .album-cover{transform:translateY(-3px);box-shadow:0 15px 32px #0002}.album-cover{transition:transform .4s var(--spring),box-shadow .3s}
.context-menu{position:fixed;inset:auto;width:284px;max-width:calc(100vw - 24px);max-height:calc(100dvh - 24px);margin:0;padding:0;border:1px solid var(--glass-border);border-radius:18px;overflow:auto;color:var(--ink);background:var(--glass);box-shadow:0 20px 70px #0003;backdrop-filter:blur(45px) saturate(1.6);-webkit-backdrop-filter:blur(45px) saturate(1.6);transform-origin:top right;animation:context-in .24s var(--spring)}
.context-menu::backdrop{background:#00000012;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.context-preview{display:flex;gap:12px;padding:18px;background:var(--surface);align-items:center;border-bottom:1px solid var(--line)}.context-preview>div:last-child{min-width:0}.context-preview strong{font-size:15px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.context-preview small{color:var(--secondary);font-size:12px;display:block;margin-top:5px}.context-group+.context-group{border-top:7px solid var(--control)}.context-group button{width:100%;height:48px;padding:0 18px;text-align:left;display:flex;flex-direction:row-reverse;align-items:center;justify-content:space-between;font-size:15px;border-bottom:1px solid var(--line)}.context-group button:last-child{border-bottom:0}.context-group button:hover{background:var(--control)}.context-group button svg{width:20px;height:20px;stroke-width:1.7}.context-group .danger{color:#ff453a}.context-cancel{display:none}.undo-toast button{border-left:1px solid #ffffff3d;margin-left:4px;padding:4px 0 4px 14px;color:#fff;font-size:14px;font-weight:600}
@keyframes context-in{from{opacity:0;transform:scale(.92) translateY(-8px)}to{opacity:1;transform:none}}
@media(max-width:1100px){.collection-overview{gap:20px}.album-collection strong{font-size:17px}}
@media(min-width:761px) and (max-width:900px){.track-table:not(.grid-mode) .track-row>.waveform{display:none}}
@media(max-width:760px){
  .search-suggestions{position:fixed;top:70px;left:12px;right:12px;width:auto;max-width:none}
  .track-swipe-shell{display:block;position:relative;overflow:hidden;border-bottom:1px solid var(--line);isolation:isolate}.track-swipe-shell:last-child{border-bottom:0}.track-swipe-shell .track-row{background:var(--surface);border-bottom:0!important;z-index:2;position:relative}.track-swipe-shell .track-row.playing,.track-swipe-shell .track-row.selected{background:var(--grouped)}
  .track-table:not(.grid-mode) .track-row>.waveform{display:block;position:absolute;left:66px;right:145px;bottom:5px;height:13px;width:auto;opacity:.75}
  .track-table:not(.grid-mode) .track-row>.waveform .wave-svg{height:13px}
  .track-table:not(.grid-mode) .track-row>.waveform .wave-playhead{height:13px}
  body.selecting .track-table:not(.grid-mode) .track-row>.waveform{left:92px}
  .swipe-actions{display:flex;position:absolute;inset:0 0 0 auto;width:160px;z-index:1}.swipe-actions button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;background:#ff9f0a;color:white;font-size:12px;font-weight:600}.swipe-actions svg{width:23px;height:23px}.swipe-actions .swipe-delete{background:#ff453a}
  .grid-mode .track-swipe-shell{display:contents}.grid-mode .swipe-actions{display:none}.grid-mode .track-swipe-shell .track-row{border:1px solid var(--line)!important}.grid-mode .track-row{transform:none!important}
  .collection-overview{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 16px;margin-top:10px}.album-cover{aspect-ratio:1;border-radius:18px;margin-bottom:12px}.album-collection strong{font-size:16px}.album-collection small{font-size:13px}.album-cover svg{width:36px;height:36px}
  .context-menu{top:auto!important;left:8px!important;right:8px!important;bottom:calc(8px + env(safe-area-inset-bottom,0px));width:auto;max-width:none;max-height:85dvh;border-radius:24px;transform-origin:center bottom;animation:context-mobile-in .35s var(--spring)}.context-menu::backdrop{background:#00000040;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.context-preview{padding:20px}.context-preview strong{font-size:17px}.context-preview small{font-size:13px}.context-group button{height:53px;font-size:17px;padding:0 22px}.context-cancel{display:block;width:100%;height:57px;font-size:17px;font-weight:600;color:var(--accent);border-top:8px solid var(--control)}
  .player-track{min-width:0}.player-track>div:not(.track-art){min-width:0}.player-track strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  @keyframes context-mobile-in{from{transform:translateY(80px);opacity:0}to{transform:translateY(0);opacity:1}}
}
@media(prefers-reduced-motion:reduce){.track-row,.album-cover{transition:none}.context-menu,.search-suggestions{animation:none}.album-collection:hover .album-cover{transform:none}}
