*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0;}
:root{
  --glass:rgba(255,255,255,0.07);
  --glass-border:rgba(255,255,255,0.13);
  --glass-hover:rgba(255,255,255,0.14);
  --accent:#d5d5d5; 
  --accent2:#5d5d5d;
  --radius:16px;
  --bg-blur:22px;
}
html,body{
  width:100%;
  min-height:100dvh;
  overflow-y:auto;
  overflow-x:hidden;
  background:#000;
}

.overlay{
  position:fixed;inset:0;
  background:linear-gradient(
    to bottom,
    rgba(0,0,0,0.45) 0%,
    rgba(0,0,0,0.38) 40%,
    rgba(0,0,0,0.65) 100%
  );
  backdrop-filter:blur(1px);
  z-index:1;
}

.app{
  position:relative;
  z-index:2;
  width:100%;
  min-height:100dvh;
  display:flex;
  flex-direction:column;
}
@keyframes appFadeIn{from{opacity:0;transform:translateY(12px);}to{opacity:1;transform:translateY(0);}}

.topbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 16px 8px;
  flex-shrink:0;
  animation:slideDown 0.5s ease both;
}
@keyframes slideDown{from{opacity:0;transform:translateY(-16px);}to{opacity:1;transform:translateY(0);}}
.logo{
  font-family:'Pretendard',monospace;
  font-size:clamp(12px,3vw,15px);
  font-weight:700;
  letter-spacing:0.06em;
  opacity:0.85;
  white-space:nowrap;
}
.topbar-actions{display:flex;gap:7px;align-items:center;}

.scroll-area{
  flex:1;
  overflow:visible;
  padding:0 12px 120px;
  display:flex;
  flex-direction:column;
  gap:10px;
}
.scroll-area::-webkit-scrollbar{width:3px;}
.scroll-area::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.18);border-radius:4px;}

.card{
  background:var(--glass);
  border:1px solid var(--glass-border);
  border-radius:var(--radius);
  backdrop-filter:blur(var(--bg-blur));
  -webkit-backdrop-filter:blur(var(--bg-blur));
  animation:cardIn 0.5s ease both;
}
@keyframes cardIn{from{opacity:0;transform:translateY(18px);}to{opacity:1;transform:translateY(0);}}
.card:nth-child(1){animation-delay:0.05s;}
.card:nth-child(2){animation-delay:0.12s;}
.card:nth-child(3){animation-delay:0.19s;}
.card:nth-child(4){animation-delay:0.26s;}

.now-playing-card{
  padding:18px 16px 14px;
  display:flex;flex-direction:column;gap:12px;
  position:relative;
  overflow:hidden;
}
.now-playing-card::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(135deg,rgba(255,255,255,0.04) 0%,transparent 60%);
  pointer-events:none;
}
.np-label{
  font-size:9px;letter-spacing:0.15em;text-transform:uppercase;opacity:0.38;
  font-family:'Pretendard',monospace;
}
.np-title{
  font-size:clamp(13px,3.5vw,17px);font-weight:700;
  line-height:1.35;min-height:22px;
  word-break:break-word;
  transition:opacity 0.3s;
}
.np-sub{font-size:11px;opacity:0.42;font-family:'Pretendard',monospace;}

.visualizer{
  display:flex;align-items:flex-end;gap:2px;height:20px;
  opacity:0;transition:opacity 0.4s;
}
.visualizer.active{opacity:1;}
.viz-bar{
  width:3px;border-radius:2px;
  background:linear-gradient(to top,rgba(255,255,255,0.4),rgba(255,255,255,0.9));
  animation:vizPulse 0.6s ease-in-out infinite alternate;
  transform-origin:bottom;
}
.viz-bar:nth-child(1){height:6px;animation-delay:0s;animation-duration:0.45s;}
.viz-bar:nth-child(2){height:14px;animation-delay:0.08s;animation-duration:0.6s;}
.viz-bar:nth-child(3){height:10px;animation-delay:0.16s;animation-duration:0.5s;}
.viz-bar:nth-child(4){height:18px;animation-delay:0.04s;animation-duration:0.55s;}
.viz-bar:nth-child(5){height:8px;animation-delay:0.2s;animation-duration:0.48s;}
.viz-bar:nth-child(6){height:15px;animation-delay:0.12s;animation-duration:0.62s;}
.viz-bar:nth-child(7){height:11px;animation-delay:0.06s;animation-duration:0.52s;}
.viz-bar:nth-child(8){height:7px;animation-delay:0.18s;animation-duration:0.44s;}
@keyframes vizPulse{
  from{transform:scaleY(0.3);}
  to{transform:scaleY(1);}
}

.progress-wrap{display:flex;flex-direction:column;gap:5px;}
.progress-bar-bg{
  width:100%;height:3px;
  background:rgba(255,255,255,0.12);
  border-radius:4px;cursor:pointer;
  position:relative;overflow:hidden;
  transition:height 0.2s;
}
.progress-bar-bg:hover{height:5px;}
.progress-bar-fill{
  height:100%;
  background:linear-gradient(90deg,rgba(255,255,255,0.9),rgba(255,255,255,0.5));
  border-radius:4px;
  transition:width 0.3s linear;
  width:0%;
}
.progress-times{
  display:flex;justify-content:space-between;
  font-size:10px;opacity:0.38;font-family:'Pretendard',monospace;
}

.controls-row{
  display:flex;align-items:center;justify-content:center;gap:8px;
}
.icon-btn{
  display:flex;align-items:center;justify-content:center;
  width:40px;height:40px;border-radius:10px;
  border:1px solid var(--glass-border);
  background:var(--glass);
  color:#fff;cursor:pointer;
  transition:background 0.18s, transform 0.15s, border-color 0.18s;
  flex-shrink:0;
}
.icon-btn:hover,.icon-btn:active{background:var(--glass-hover);transform:scale(1.07);}
.icon-btn.active{background:rgba(255,255,255,0.88);color:#111;border-color:transparent;}
.icon-btn.active svg{stroke:#111;}
.icon-btn svg{width:16px;height:16px;stroke:#fff;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;}
.icon-btn.danger.active{background:var(--accent);color:#fff;border-color:var(--accent);}
.icon-btn.danger.active svg{stroke:#fff;}

.play-btn{
  width:52px;height:52px;border-radius:50%;
  background:#fff;color:#111;
  border:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:transform 0.18s, box-shadow 0.18s;
  flex-shrink:0;
  box-shadow:0 4px 20px rgba(255,255,255,0.15);
}
.play-btn:hover,.play-btn:active{transform:scale(1.08);box-shadow:0 6px 28px rgba(255,255,255,0.25);}
.play-btn svg{width:20px;height:20px;fill:#111;}
.play-btn .icon-pause{display:none;}
.play-btn.playing .icon-play{display:none;}
.play-btn.playing .icon-pause{display:block;}

.input-card{padding:12px;display:flex;flex-direction:column;gap:9px;}
.input-row{display:flex;gap:8px;}
.search-input{
  flex:1;
  padding:11px 14px;
  border:1px solid var(--glass-border);
  border-radius:10px;
  background:rgba(0,0,0,0.3);
  color:#fff;font-size:14px;
  outline:none;
  font-family:'Noto Sans KR',sans-serif;
  min-width:0;
  transition:border-color 0.2s;
}
.search-input::placeholder{color:rgba(255,255,255,0.3);}
.search-input:focus{border-color:rgba(255,255,255,0.38);}
.add-btn{
  padding:11px 16px;
  border:none;border-radius:10px;
  background:#fff;color:#111;
  font-size:13px;font-weight:700;
  cursor:pointer;transition:transform 0.15s, box-shadow 0.15s;
  white-space:nowrap;
  font-family:'Noto Sans KR',sans-serif;
  flex-shrink:0;
}
.add-btn:hover,.add-btn:active{transform:scale(1.05);}
.btn-row{display:flex;gap:8px;}
.yt-btn{
  display:flex;align-items:center;gap:6px;
  padding:9px 13px;
  border:1px solid var(--glass-border);
  border-radius:9px;
  background:var(--glass);
  color:#fff;font-size:12px;font-weight:600;
  cursor:pointer;transition:background 0.15s;
  font-family:'Noto Sans KR',sans-serif;
}
.yt-btn:hover{background:var(--glass-hover);}

.queue-card{overflow:hidden;}
.queue-header-bar{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px 8px;
  border-bottom:1px solid var(--glass-border);
}
.queue-header-label{
  font-size:9px;letter-spacing:0.13em;text-transform:uppercase;
  opacity:0.38;font-family:'Pretendard',monospace;
}
.queue-clear-btn{
  font-size:11px;opacity:0.38;background:none;border:none;color:#fff;
  cursor:pointer;padding:2px 7px;border-radius:4px;
  font-family:'Noto Sans KR',sans-serif;transition:opacity 0.15s,background 0.15s;
}
.queue-clear-btn:hover{opacity:0.9;background:rgba(255,0,0,0.2);}
.queue-list{
  max-height:min(220px, 35vh);
  overflow-y:auto;padding:6px;
}
.queue-list::-webkit-scrollbar{width:3px;}
.queue-list::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.18);border-radius:4px;}
.queue-item{
  display:flex;align-items:center;gap:8px;
  padding:8px;border-radius:8px;
  cursor:pointer;transition:background 0.15s;
  font-size:13px;
  animation:queueItemIn 0.25s ease both;
}
@keyframes queueItemIn{from{opacity:0;transform:translateX(-8px);}to{opacity:1;transform:translateX(0);}}
.queue-item:hover,.queue-item:active{background:rgba(255,255,255,0.09);}
.queue-item.playing{background:rgba(255,255,255,0.12);font-weight:700;}
.q-num{font-size:10px;opacity:0.32;min-width:18px;text-align:right;flex-shrink:0;font-family:'Pretendard',monospace;}
.q-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.q-del{
  background:none;border:none;color:rgba(255,255,255,0.28);
  font-size:13px;cursor:pointer;padding:3px 5px;border-radius:4px;
  line-height:1;flex-shrink:0;transition:color 0.15s,background 0.15s;
}
.q-del:hover,.q-del:active{color:#fff;background:rgba(255,0,0,0.3);}
.queue-empty{font-size:13px;opacity:0.3;text-align:center;padding:20px 0;font-family:'Pretendard',monospace;}

.sleep-indicator{
  font-size:11px;
  background:rgba(255,170,0,0.15);
  border:1px solid rgba(255,170,0,0.3);
  color:var(--accent2);
  padding:5px 10px;border-radius:7px;
  font-family:'Pretendard',monospace;
  white-space:nowrap;
  cursor:pointer;
  transition:background 0.15s;
  animation:pulseGlow 2s ease-in-out infinite;
}
@keyframes pulseGlow{0%,100%{box-shadow:0 0 0 0 rgba(255,170,0,0);}50%{box-shadow:0 0 8px 2px rgba(255,170,0,0.2);}}
.sleep-indicator:hover{background:rgba(255,170,0,0.28);}

.tiny-btn{
  padding:7px 12px;border:1px solid var(--glass-border);
  border-radius:8px;background:rgba(0,0,0,0.38);
  color:#fff;font-size:12px;font-weight:600;
  cursor:pointer;transition:background 0.15s;
  font-family:'Noto Sans KR',sans-serif;
  backdrop-filter:blur(10px);
}
.tiny-btn:hover,.tiny-btn:active{background:rgba(255,255,255,0.14);}
.tiny-btn.active{background:rgba(255,255,255,0.88);color:#111;}

.modal-bg{
  position:fixed;inset:0;background:rgba(0,0,0,0.72);
  z-index:100;display:none;align-items:flex-end;justify-content:center;
}
.modal-bg.open{display:flex;}
.modal{
  background:rgba(18,18,20,0.98);border:1px solid rgba(255,255,255,0.1);
  border-radius:22px 22px 0 0;
  width:100%;max-width:520px;
  padding:20px 20px max(20px,env(safe-area-inset-bottom));
  animation:slideUp 0.3s cubic-bezier(.25,0,.15,1);
  backdrop-filter:blur(30px);
}
@keyframes slideUp{from{transform:translateY(100%);}to{transform:translateY(0);}}
.modal-title{
  font-size:16px;font-weight:700;margin-bottom:16px;
  display:flex;align-items:center;justify-content:space-between;
}
.modal-close{
  background:rgba(255,255,255,0.08);border:none;color:rgba(255,255,255,0.6);
  font-size:16px;cursor:pointer;
  width:30px;height:30px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  transition:background 0.15s;
}
.modal-close:hover{background:rgba(255,255,255,0.16);}
.setting-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.07);gap:12px;
}
.setting-row:last-child{border-bottom:none;padding-bottom:0;}
.setting-label{font-size:14px;}
.setting-desc{font-size:11px;opacity:0.4;margin-top:2px;}
.setting-control{flex-shrink:0;}
select,input[type="time"],input[type="number"]{
  background:rgba(255,255,255,0.09);
  border:1px solid rgba(255,255,255,0.18);
  border-radius:8px;color:#fff;padding:7px 10px;font-size:13px;
  font-family:'Noto Sans KR',sans-serif;outline:none;
}
select option{background:#161618;}
input[type="time"]::-webkit-calendar-picker-indicator{filter:invert(1);}

.hidden-ui .scroll-area{opacity:0;pointer-events:none;}
.hidden-ui .overlay{background:rgba(0,0,0,0.2);}

#yt-player-wrap{position:fixed;width:1px;height:1px;opacity:0;pointer-events:none;bottom:0;right:0;}
#yt-player,#yt-player iframe{width:1px;height:1px;}
#fileInput{display:none;}

.loading-dot{display:inline-block;animation:blink 0.9s infinite;}
@keyframes blink{0%,100%{opacity:1;}50%{opacity:0.25;}}

@keyframes npTitleIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
.np-title-anim{animation:npTitleIn 0.35s ease both;}

@media(max-width:480px){
  .scroll-area{
    padding:0 8px 120px;
    gap:8px;
  }
}

body{
  color:#fff;
}

input,
select,
button{
  color:#fff;
}

select option{
  background:#161618;
  color:#fff;
}

.search-input{
  color:#fff !important;
}

.np-title,
.np-sub,
.logo,
.queue-item,
.tiny-btn,
.yt-btn,
.queue-header-label,
.queue-clear-btn{
  color:#fff !important;
}