/*──────────────────────────────────────────────
  1. Design Tokens & Themes (des.html 기반)
──────────────────────────────────────────────*/
:root{
  /* Brand */
  --brand:#6366f1;
  --brand-hov:#4f46e5;
  --brand-light:#eef2ff;

  /* Gray scale – light theme */
  --g900:#18181b;  --g700:#374151; --g500:#6b7280;
  --g300:#d4d4d8;  --g200:#e5e7eb; --g100:#f3f4f6; --g50:white;

  /* Typography */
  --fs-h1:2.5rem; --fs-h2:2rem; --fs-h3:1.6rem;
  --fs-h4:1.25rem; --fs-p:1.05rem; --fs-meta:.95rem;

  /* Spacing */
  --sp2:10px; --sp3:14px; --sp4:18px;
  --sp5:24px; --sp6:32px; --sp8:48px; --gap-sec:72px;

  /* Radius & Shadow */
  --radius-card:1.5rem;
  --shadow:0 4px 32px rgba(0,0,0,.06),
           0 2px 12px rgba(99,102,241,.10);

  /* Glassmorphism */
  --glass-bg:rgba(255,255,255,.65);
  --glass-bg-dark:rgba(24,24,27,.55);
  --blur:20px;
}

[data-theme="dark"]{
  /* Gray scale – dark theme */
  --g900:#fafafa;  --g700:#e5e5e5; --g500:#c5c5c5;
  --g300:#52525b;  --g200:#3f3f46; --g100:#27272a; --g50:#27272a;
  background:#18181b;
}

/*──────────────────────────────────────────────
  2. Reset & Base
──────────────────────────────────────────────*/
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;}
body{
  font:500 var(--fs-p)/1.6 Pretendard,system-ui,sans-serif;
  color:var(--g500);
  background:var(--g50);
  transition:background .3s,color .3s;
}
main{max-width:1280px;margin:0 auto;padding:var(--sp8) var(--sp4);}

h1,h2,h3,h4{
  font-weight:700;
  color:var(--g900);
  margin-bottom:var(--sp5);
  transition:color .3s;
}
h1{font-size:var(--fs-h1);color:var(--brand);}
h2{
  font-size:var(--fs-h2);
  border-bottom:1px solid var(--g200);
  padding-bottom:var(--sp2);
}
h3{font-size:var(--fs-h3);}
h4{
  font-size:var(--fs-h4);
  font-weight:600;
  color:var(--g700);
}
p{font-size:var(--fs-p);margin-bottom:var(--sp4);}
label{
  display:block;
  margin:10px 0 5px;
  font-size:var(--fs-meta);
  color:var(--g700);
}

.grid{
  display:grid;
  gap:var(--sp6);
  grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr));
}
section+section{margin-top:var(--gap-sec);}
.flex{display:flex;}
.items-c{align-items:center;}
.justify-b{justify-content:space-between;}
.gap-3{gap:var(--sp3);}

/*──────────────────────────────────────────────
  3. Common Components (des.html 기반)
──────────────────────────────────────────────*/
.card{
  background:var(--glass-bg);
  backdrop-filter:blur(var(--blur));
  border-radius:var(--radius-card);
  box-shadow:var(--shadow);
  padding:var(--sp6);
  opacity:0;
  transform:translateY(20px);
  transition:opacity .6s ease,transform .6s ease;
}
.card.visible{opacity:1;transform:none;}

.btn{
  position:relative;
  overflow:hidden;
  display:inline-flex;
  align-items:center;justify-content:center;
  padding:var(--sp3) var(--sp6);
  font:500 var(--fs-p)/1 Pretendard;
  border:none;border-radius:9999px;
  cursor:pointer;
  transition:transform .15s;
  background:var(--g100);
  color:var(--g700);
}
.btn:active{transform:scale(.97);}
.btn-primary{
  background:var(--brand);
  color:#fff;
}
.btn-primary:hover{background:var(--brand-hov);}
.btn-secondary{
  background:var(--g100);
  color:var(--g700);
}
.btn-secondary:hover{background:var(--g200);}

.input{
  width:100%;
  padding:var(--sp3) var(--sp4);
  background:var(--g100);
  border:2px solid transparent;
  border-radius:8px;
  transition:background .3s,border-color .3s;
  color:var(--g900);
}
.input:focus{
  outline:none;
  background:#fff;
  border-color:var(--brand-light);
}

.toggle{
  display:block;position:relative;
  width:51px;height:27px;margin-top:6px;
}
.toggle input{opacity:0;width:0;height:0;}
.toggle-track{
  position:absolute;inset:0;
  border-radius:9999px;
  background:var(--g200);
  transition:.2s;
}
.toggle-thumb{
  position:absolute;left:4px;top:4px;
  width:19px;height:19px;
  background:#fff;border-radius:50%;
  transition:.25s;
}
.toggle input:checked+.toggle-track{
  background:var(--brand);
}
.toggle input:checked+.toggle-track .toggle-thumb{
  transform:translateX(24px);
}

/*──────────────────────────────────────────────
  4. Image Compressor Specific Styles
──────────────────────────────────────────────*/

/* Upload Area */
.upload-area{
  border:2px dashed var(--g300);
  border-radius:var(--radius-card);
  padding:var(--sp8);
  text-align:center;
  transition:all .3s ease;
  cursor:pointer;
  min-height:200px;
  display:flex;
  align-items:center;
  justify-content:center;
}

.upload-area:hover{
  border-color:var(--brand);
  background:var(--brand-light);
}

.upload-area.dragover{
  border-color:var(--brand);
  background:var(--brand-light);
  transform:scale(1.02);
}

.upload-content h3{
  margin:var(--sp4) 0 var(--sp2);
  color:var(--g700);
}

.upload-content p{
  color:var(--g500);
  margin-bottom:var(--sp5);
}

.upload-icon{
  font-size:4rem;
  margin-bottom:var(--sp3);
}

/* Slider */
.slider{
  width:100%;
  height:8px;
  border-radius:5px;
  background:var(--g200);
  outline:none;
  margin:var(--sp3) 0;
  -webkit-appearance:none;
}

.slider::-webkit-slider-thumb{
  -webkit-appearance:none;
  appearance:none;
  width:20px;
  height:20px;
  border-radius:50%;
  background:var(--brand);
  cursor:pointer;
}

.slider::-moz-range-thumb{
  width:20px;
  height:20px;
  border-radius:50%;
  background:var(--brand);
  cursor:pointer;
  border:none;
}

/* Compression & Format Options */
.compression-options,
.format-options{
  display:flex;
  flex-direction:column;
  gap:var(--sp2);
}

.radio-option{
  display:flex;
  align-items:center;
  gap:var(--sp2);
  cursor:pointer;
  padding:var(--sp2);
  border-radius:8px;
  transition:background .2s;
}

.radio-option:hover{
  background:var(--g100);
}

.radio-option input[type="radio"]{
  margin:0;
}

/* Help Text */
.help-text{
  font-size:var(--fs-meta);
  color:var(--g500);
  margin:0;
}

/* Image Items */
.image-item{
  position:relative;
  border-radius:var(--radius-card);
  overflow:hidden;
  background:var(--g100);
}

.image-preview{
  width:100%;
  height:200px;
  object-fit:cover;
  border-radius:var(--radius-card) var(--radius-card) 0 0;
}

.image-info{
  padding:var(--sp4);
}

.image-info h4{
  margin-bottom:var(--sp2);
  font-size:var(--fs-h4);
  color:var(--g900);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.image-meta{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:var(--sp3);
  font-size:var(--fs-meta);
  color:var(--g500);
}

.image-status{
  display:inline-flex;
  align-items:center;
  padding:4px 8px;
  border-radius:12px;
  font-size:var(--fs-meta);
  font-weight:600;
  margin-bottom:var(--sp3);
}

.status-waiting{
  background:color-mix(in srgb,#6b7280 20%,transparent);
  color:#6b7280;
}

.status-processing{
  background:color-mix(in srgb,#f59e0b 20%,transparent);
  color:#f59e0b;
}

.status-completed{
  background:color-mix(in srgb,#10b981 20%,transparent);
  color:#10b981;
}

.status-error{
  background:color-mix(in srgb,#ef4444 20%,transparent);
  color:#ef4444;
}

.image-actions{
  display:flex;
  gap:var(--sp2);
}

.btn-sm{
  padding:var(--sp2) var(--sp4);
  font-size:var(--fs-meta);
}

/* Progress Bar */
.progress{
  width:100%;
  height:6px;
  background:var(--g200);
  border-radius:9999px;
  overflow:hidden;
  margin:var(--sp2) 0;
}

.progress-bar{
  height:100%;
  background:var(--brand);
  width:0;
  transition:width .3s ease;
}

/* Statistics */
.stats-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:var(--sp4);
}

.stat-item{
  text-align:center;
  padding:var(--sp3);
  border-radius:12px;
  background:var(--g100);
}

.stat-item h4{
  margin-bottom:var(--sp2);
  font-size:var(--fs-meta);
  color:var(--g500);
  font-weight:500;
}

.stat-item span{
  font-size:var(--fs-h3);
  font-weight:700;
  color:var(--brand);
}

/*──────────────────────────────────────────────
  5. Dark Theme Overrides
──────────────────────────────────────────────*/
[data-theme="dark"] .card,
[data-theme="dark"] .upload-area,
[data-theme="dark"] .image-item,
[data-theme="dark"] .stat-item{
  background:var(--g200);
}

[data-theme="dark"] .input{
  background:var(--g300);
  color:var(--g900);
}

[data-theme="dark"] .input:focus{
  background:var(--g200);
}

[data-theme="dark"] .btn-secondary{
  background:var(--g300);
  color:var(--g900);
}

[data-theme="dark"] .btn-secondary:hover{
  background:var(--g200);
}

[data-theme="dark"] .radio-option:hover{
  background:var(--g300);
}

/*──────────────────────────────────────────────
  6. Responsive Design
──────────────────────────────────────────────*/
@media (max-width: 768px) {
  .grid{
    grid-template-columns:1fr;
  }
  
  .stats-grid{
    grid-template-columns:repeat(2,1fr);
  }
  
  .upload-area{
    padding:var(--sp5);
  }
  
  .upload-icon{
    font-size:3rem;
  }
  
  .flex.justify-b{
    flex-direction:column;
    gap:var(--sp3);
    align-items:stretch;
  }
  
  .flex.justify-b h2{
    margin-bottom:0;
  }
}

/* Animations */
@keyframes fadeInUp{
  from{opacity:0;transform:translateY(20px);}
  to{opacity:1;transform:none;}
}

@keyframes pulse{
  0%,100%{opacity:1;}
  50%{opacity:.5;}
}

.processing{
  animation:pulse 1.5s ease-in-out infinite;
}

/* 100KB 미만 파일 스타일 */
.status-skipped{
  background:color-mix(in srgb,#94a3b8 20%,transparent);
  color:#64748b;
}