/* ==========================================================================
   EDUPIDIA IMAGE COMPRESSOR — STYLESHEET
   Design system: glassmorphism + violet/teal gradient + Manrope/Inter/Mono
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. DESIGN TOKENS
   -------------------------------------------------------------------------- */
:root{
  /* Brand gradient */
  --grad-1:#6C5CE7;
  --grad-2:#00D4B4;
  --grad-3:#FF7AC6;

  /* Light theme surface */
  --bg:#F3F2FA;
  --bg-elevated:#FFFFFF;
  --glass-bg:rgba(255,255,255,0.55);
  --glass-border:rgba(255,255,255,0.65);
  --glass-shadow:0 8px 32px rgba(50,40,120,0.12);

  --text-primary:#1B1730;
  --text-secondary:#5B5676;
  --text-muted:#918CAA;

  --accent:#6C5CE7;
  --accent-2:#00D4B4;
  --success:#1FBF75;
  --warning:#F5A524;
  --danger:#F5455C;

  --border-soft:rgba(27,23,48,0.08);
  --card-bg:rgba(255,255,255,0.65);

  --radius-sm:10px;
  --radius-md:16px;
  --radius-lg:24px;
  --radius-full:999px;

  --font-display:'Manrope', 'Segoe UI', sans-serif;
  --font-body:'Inter', 'Segoe UI', sans-serif;
  --font-mono:'JetBrains Mono', 'Consolas', monospace;

  --ease-out:cubic-bezier(.16,1,.3,1);
  --dur-fast:150ms;
  --dur-med:280ms;
  --dur-slow:450ms;
}

/* Dark theme overrides — toggled via [data-theme="dark"] on <html> */
:root[data-theme="dark"]{
  --bg:#0E0C18;
  --bg-elevated:#161328;
  --glass-bg:rgba(30,26,54,0.55);
  --glass-border:rgba(255,255,255,0.08);
  --glass-shadow:0 8px 40px rgba(0,0,0,0.45);

  --text-primary:#F3F1FB;
  --text-secondary:#B3AECB;
  --text-muted:#726D91;

  --border-soft:rgba(255,255,255,0.08);
  --card-bg:rgba(255,255,255,0.04);
}

@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{ animation-duration:0.01ms !important; animation-iteration-count:1 !important; transition-duration:0.01ms !important; scroll-behavior:auto !important; }
}

/* --------------------------------------------------------------------------
   2. RESET & BASE
   -------------------------------------------------------------------------- */
*, *::before, *::after{ box-sizing:border-box; margin:0; padding:0; }

html{ color-scheme:light; }
html[data-theme="dark"]{ color-scheme:dark; }

body{
  font-family:var(--font-body);
  background:
    radial-gradient(1200px 600px at 10% -10%, rgba(108,92,231,0.14), transparent 60%),
    radial-gradient(1000px 500px at 100% 0%, rgba(0,212,180,0.12), transparent 55%),
    var(--bg);
  color:var(--text-primary);
  min-height:100vh;
  line-height:1.5;
  transition:background-color var(--dur-med) var(--ease-out), color var(--dur-med) var(--ease-out);
  -webkit-font-smoothing:antialiased;
}

img{ max-width:100%; display:block; }
button{ font:inherit; cursor:pointer; background:none; border:none; color:inherit; }
input, select{ font:inherit; color:inherit; }
a{ color:inherit; text-decoration:none; }

/* Visible focus state everywhere, for accessibility */
:focus-visible{
  outline:2px solid var(--accent-2);
  outline-offset:3px;
  border-radius:6px;
}

.skip-link{
  position:absolute; left:-999px; top:0; background:var(--accent); color:#fff;
  padding:10px 16px; z-index:999; border-radius:0 0 8px 0;
}
.skip-link:focus{ left:0; }

/* Utility glass surface, reused across cards/modals */
.glass{
  background:var(--glass-bg);
  border:1px solid var(--glass-border);
  backdrop-filter:blur(20px) saturate(160%);
  -webkit-backdrop-filter:blur(20px) saturate(160%);
  box-shadow:var(--glass-shadow);
}

.mono{ font-family:var(--font-mono); }

/* --------------------------------------------------------------------------
   3. TOP BAR
   -------------------------------------------------------------------------- */
.topbar{
  position:sticky; top:0; z-index:40;
  background:var(--glass-bg);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border-bottom:1px solid var(--border-soft);
}
.topbar__inner{
  max-width:1200px; margin:0 auto; padding:14px 20px;
  display:flex; align-items:center; gap:20px;
}
.brand{ display:flex; align-items:center; gap:8px; flex-shrink:0; }
.brand__mark{
  width:34px; height:34px; border-radius:10px; display:grid; place-items:center;
  font-family:var(--font-display); font-weight:800; color:#fff;
  background:linear-gradient(135deg,var(--grad-1),var(--grad-2));
}
.brand__name{ font-family:var(--font-display); font-weight:800; font-size:1.05rem; }

.topbar__title{ flex:1; min-width:0; }
.topbar__title h1{
  font-family:var(--font-display); font-weight:800; font-size:1.05rem; letter-spacing:-0.01em;
}
.topbar__title p{ font-size:0.78rem; color:var(--text-secondary); margin-top:1px; }

.icon-btn{
  width:38px; height:38px; border-radius:var(--radius-full);
  display:grid; place-items:center; color:var(--text-secondary);
  transition:background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);
}
.icon-btn:hover{ background:var(--border-soft); color:var(--text-primary); transform:translateY(-1px); }
.icon-btn:active{ transform:scale(0.92); }

.icon{ width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }

.icon-sun{ display:block; }
.icon-moon{ display:none; }
[data-theme="dark"] .icon-sun{ display:none; }
[data-theme="dark"] .icon-moon{ display:block; }

/* --------------------------------------------------------------------------
   4. LAYOUT / MAIN
   -------------------------------------------------------------------------- */
main{ max-width:1200px; margin:0 auto; padding:28px 20px 80px; }

/* --------------------------------------------------------------------------
   5. UPLOAD ZONE (EMPTY STATE)
   -------------------------------------------------------------------------- */
.uploader{ padding:28px 0; }
.uploader__card{
  position:relative; overflow:hidden;
  border:1.5px dashed var(--border-soft);
  border-radius:var(--radius-lg);
  background:var(--card-bg);
  padding:56px 24px;
  text-align:center;
  cursor:pointer;
  transition:border-color var(--dur-med) var(--ease-out), transform var(--dur-med) var(--ease-out), background var(--dur-med) var(--ease-out);
}
.uploader__card:hover{ border-color:var(--accent); transform:translateY(-2px); }
.uploader__card.is-dragover{
  border-color:var(--accent-2);
  background:linear-gradient(180deg, rgba(0,212,180,0.08), var(--card-bg));
  transform:scale(1.01);
}
.uploader__glow{
  position:absolute; inset:-40%; z-index:0; pointer-events:none;
  background:conic-gradient(from 0deg, transparent, rgba(108,92,231,0.12), transparent 30%);
  animation:spin 12s linear infinite;
  opacity:0.6;
}
@keyframes spin{ to{ transform:rotate(360deg); } }

.uploader__icon{ position:relative; z-index:1; width:64px; margin:0 auto 18px; animation:float 3.2s ease-in-out infinite; }
@keyframes float{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-8px); } }

.uploader__card h2{ position:relative; z-index:1; font-family:var(--font-display); font-size:1.4rem; font-weight:800; margin-bottom:6px; }
.uploader__sub{ position:relative; z-index:1; color:var(--text-secondary); font-size:0.92rem; margin-bottom:22px; }
.uploader__sub kbd{
  font-family:var(--font-mono); background:var(--border-soft); padding:1px 6px; border-radius:5px; font-size:0.82em;
}
.uploader__formats{ position:relative; z-index:1; margin-top:18px; font-size:0.78rem; color:var(--text-muted); }

/* --------------------------------------------------------------------------
   6. BUTTONS
   -------------------------------------------------------------------------- */
.btn{
  position:relative; overflow:hidden;
  display:inline-flex; align-items:center; gap:8px;
  padding:11px 20px; border-radius:var(--radius-full);
  font-weight:600; font-size:0.9rem;
  transition:transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), opacity var(--dur-fast);
}
.btn:active{ transform:scale(0.96); }
.btn .icon{ width:17px; height:17px; }

.btn--primary{
  color:#fff;
  background:linear-gradient(135deg,var(--grad-1),var(--grad-2));
  box-shadow:0 6px 18px rgba(108,92,231,0.35);
}
.btn--primary:hover{ box-shadow:0 8px 24px rgba(108,92,231,0.45); transform:translateY(-1px); }
.btn--primary:disabled{ opacity:0.45; cursor:not-allowed; box-shadow:none; transform:none; }

.btn--secondary{
  color:var(--text-primary);
  background:var(--card-bg);
  border:1px solid var(--border-soft);
}
.btn--secondary:hover{ border-color:var(--accent); }

.btn--ghost{
  color:var(--text-secondary);
  background:transparent;
  border:1px solid var(--border-soft);
}
.btn--ghost:hover{ color:var(--text-primary); background:var(--border-soft); }

/* ripple micro-interaction, triggered via JS by adding .is-rippling + custom props */
.btn::after{
  content:''; position:absolute; border-radius:50%; pointer-events:none;
  width:8px; height:8px; left:var(--rx,50%); top:var(--ry,50%);
  transform:translate(-50%,-50%) scale(0);
  background:rgba(255,255,255,0.55);
  opacity:0;
}
.btn.is-rippling::after{ animation:ripple 550ms var(--ease-out); }
@keyframes ripple{ 0%{ transform:translate(-50%,-50%) scale(0); opacity:0.6; } 100%{ transform:translate(-50%,-50%) scale(28); opacity:0; } }
/* --------------------------------------------------------------------------
   7. CONTROLS PANEL
   -------------------------------------------------------------------------- */
.controls{
  margin-top:22px;
  animation:riseIn var(--dur-slow) var(--ease-out);
}

@keyframes riseIn{
  from{
    opacity:0;
    transform:translateY(14px);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}

.controls__card{
  border-radius:var(--radius-lg);
  padding:20px;
}

.controls__row--tabs{
  display:flex;
  gap:6px;
  margin-bottom:18px;
}

.mode-tab{
  padding:8px 16px;
  border-radius:var(--radius-full);
  font-size:0.85rem;
  font-weight:600;
  color:var(--text-secondary);
  border:1px solid var(--border-soft);
  transition:all var(--dur-fast) var(--ease-out);
}

.mode-tab.is-active{
  color:#fff;
  background:linear-gradient(135deg,var(--grad-1),var(--grad-2));
  border-color:transparent;
}

.controls__grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:18px;
}

.control label{
  display:block;
  font-size:0.8rem;
  font-weight:600;
  color:var(--text-secondary);
  margin-bottom:8px;
}

.control span{
  color:var(--accent);
  font-family:var(--font-mono);
}

input[type="range"]{
  appearance:none;
  -webkit-appearance:none;
  width:100%;
  height:6px;
  border:none;
  border-radius:99px;
  background:linear-gradient(90deg,var(--grad-1),var(--grad-2));
  outline:none;
}

input[type="range"]::-webkit-slider-thumb{
  appearance:none;
  -webkit-appearance:none;
  width:18px;
  height:18px;
  border-radius:50%;
  background:#fff;
  border:3px solid var(--accent);
  cursor:pointer;
  box-shadow:0 2px 8px rgba(0,0,0,.25);
  transition:transform var(--dur-fast);
}

input[type="range"]::-webkit-slider-thumb:hover{
  transform:scale(1.15);
}

input[type="range"]::-moz-range-thumb{
  width:18px;
  height:18px;
  border-radius:50%;
  background:#fff;
  border:3px solid var(--accent);
  cursor:pointer;
  box-shadow:0 2px 8px rgba(0,0,0,.25);
}

input[type="number"],
input[type="text"],
select{
  width:100%;
  padding:10px 12px;
  border-radius:var(--radius-sm);
  border:1px solid var(--border-soft);
  background:var(--bg-elevated);
  color:var(--text-primary);
  transition:border-color var(--dur-fast);
}

input[type="number"]:focus,
input[type="text"]:focus,
select:focus{
  border-color:var(--accent);
}

.resize-row{
  display:flex;
  align-items:center;
  gap:8px;
}

.resize-row input{
  min-width:0;
}

.chk{
  display:flex;
  align-items:center;
  gap:6px;
  font-size:0.78rem;
  color:var(--text-secondary);
  white-space:nowrap;
}

.chk input{
  width:16px;
  height:16px;
  accent-color:var(--accent);
}

.controls__row--actions{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:10px;
  margin-top:20px;
}

.spacer{
  flex:1;
}

/* --------------------------------------------------------------------------
   8. GALLERY GRID + CARDS
   -------------------------------------------------------------------------- */
.gallery{ margin-top:24px; }
.gallery__grid{
  display:grid; grid-template-columns:repeat(auto-fill, minmax(260px,1fr)); gap:18px;
}

.img-card{
  border-radius:var(--radius-md); overflow:hidden; background:var(--card-bg);
  border:1px solid var(--border-soft);
  animation:cardIn var(--dur-slow) var(--ease-out);
  transition:transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}
.img-card:hover{ transform:translateY(-3px); box-shadow:0 12px 28px rgba(20,10,60,0.14); }
@keyframes cardIn{ from{ opacity:0; transform:translateY(16px) scale(0.98); } to{ opacity:1; transform:translateY(0) scale(1); } }
.img-card.is-removing{ animation:cardOut var(--dur-med) var(--ease-out) forwards; }
@keyframes cardOut{ to{ opacity:0; transform:scale(0.9); } }

.img-card__thumb{
  position:relative; aspect-ratio:4/3; overflow:hidden; background:repeating-conic-gradient(var(--border-soft) 0% 25%, transparent 0% 50%) 50%/16px 16px;
}
.img-card__thumb img{ width:100%; height:100%; object-fit:cover; }

.img-card__progress{
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center; flex-direction:column; gap:8px;
  background:rgba(14,12,24,0.55); color:#fff; opacity:0; pointer-events:none;
  transition:opacity var(--dur-fast) var(--ease-out);
}
.img-card__progress.is-active{ opacity:1; }
.img-card__progress-bar{ width:70%; height:5px; border-radius:99px; background:rgba(255,255,255,0.25); overflow:hidden; }
.img-card__progress-fill{ height:100%; width:0%; background:linear-gradient(90deg,var(--grad-1),var(--grad-2)); transition:width var(--dur-fast) linear; }
.img-card__progress-pct{ font-family:var(--font-mono); font-size:0.85rem; }

.img-card__badge{
  position:absolute; top:8px; left:8px; padding:3px 9px; border-radius:99px;
  font-size:0.68rem; font-weight:700; letter-spacing:0.02em;
  background:rgba(0,0,0,0.55); color:#fff; backdrop-filter:blur(4px);
}
.img-card__badge.is-success{ background:var(--success); }
.img-card__badge.is-error{ background:var(--danger); animation:shake 0.4s var(--ease-out); }
@keyframes shake{ 0%,100%{ transform:translateX(0); } 25%{ transform:translateX(-4px); } 75%{ transform:translateX(4px); } }

.img-card__delete{
  position:absolute; top:8px; right:8px; width:28px; height:28px; border-radius:50%;
  background:rgba(0,0,0,0.5); color:#fff; display:grid; place-items:center;
  opacity:0; transition:opacity var(--dur-fast) var(--ease-out), background var(--dur-fast);
}
.img-card__thumb:hover .img-card__delete{ opacity:1; }
.img-card__delete:hover{ background:var(--danger); }
.img-card__delete .icon{ width:14px; height:14px; }

.img-card__body{ padding:12px 14px 14px; }
.img-card__name{
  font-size:0.85rem; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  margin-bottom:6px;
}
.img-card__meta{ display:flex; align-items:center; gap:6px; font-size:0.76rem; color:var(--text-secondary); flex-wrap:wrap; }
.img-card__meta .mono{ color:var(--text-primary); }
.img-card__meta .arrow{ color:var(--text-muted); }
.img-card__saved{ color:var(--success); font-weight:700; }

.img-card__actions{ display:flex; gap:8px; margin-top:12px; }
.img-card__actions .btn{ flex:1; padding:8px 10px; font-size:0.78rem; justify-content:center; }

/* Empty gallery placeholder text (shown via JS toggling) */
.gallery__grid:empty{ display:none; }

/* --------------------------------------------------------------------------
   9. MODAL (COMPARE & EDIT)
   -------------------------------------------------------------------------- */
.modal{ position:fixed; inset:0; z-index:100; display:grid; place-items:center; padding:16px; }
.modal[hidden]{ display:none; }
.modal__backdrop{
  position:absolute; inset:0; background:rgba(10,8,20,0.55); backdrop-filter:blur(6px);
  animation:fadeIn var(--dur-med) var(--ease-out);
}
@keyframes fadeIn{ from{ opacity:0; } to{ opacity:1; } }

.modal__panel{
  position:relative; width:100%; max-width:760px; max-height:92vh; overflow-y:auto;
  border-radius:var(--radius-lg); animation:modalIn var(--dur-med) var(--ease-out);
}
@keyframes modalIn{ from{ opacity:0; transform:translateY(24px) scale(0.97); } to{ opacity:1; transform:translateY(0) scale(1); } }

.modal__header{
  display:flex; align-items:center; justify-content:space-between;
  padding:18px 20px; border-bottom:1px solid var(--border-soft);
}
.modal__header h2{ font-family:var(--font-display); font-size:1.1rem; font-weight:800; }
.modal__body{ padding:20px; }

/* Before/after compare slider */
.compare{ margin-bottom:16px; }
.compare__frame{
  position:relative; width:100%; aspect-ratio:16/10; border-radius:var(--radius-md); overflow:hidden;
  background:repeating-conic-gradient(var(--border-soft) 0% 25%, transparent 0% 50%) 50%/20px 20px;
  user-select:none;
}
.compare__frame img{ position:absolute; inset:0; width:100%; height:100%; object-fit:contain; background:var(--bg-elevated); }
.compare__before-wrap{ position:absolute; inset:0; overflow:hidden; clip-path:inset(0 50% 0 0); }
.compare__handle{
  position:absolute; top:0; bottom:0; left:50%; width:0; transform:translateX(-50%);
  cursor:ew-resize; touch-action:none;
}
.compare__handle::before{ content:''; position:absolute; inset:0 -1px; background:#fff; box-shadow:0 0 0 1px rgba(0,0,0,0.15); }
.compare__handle-grip{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:36px; height:36px; border-radius:50%; background:#fff; color:var(--text-primary);
  display:grid; place-items:center; box-shadow:0 4px 14px rgba(0,0,0,0.25);
}
.compare__tag{
  position:absolute; bottom:10px; padding:4px 10px; border-radius:99px; font-size:0.7rem; font-weight:700;
  background:rgba(0,0,0,0.55); color:#fff;
}
.compare__tag--before{ left:10px; }
.compare__tag--after{ right:10px; }

.edit-toolbar{
  display:flex; align-items:center; gap:4px; flex-wrap:wrap; margin-bottom:16px;
  padding:8px; border-radius:var(--radius-md); background:var(--card-bg); border:1px solid var(--border-soft);
}
.edit-toolbar__divider{ width:1px; height:22px; background:var(--border-soft); margin:0 4px; }

.info-panel{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:10px; margin-bottom:18px;
}
.info-panel__item{
  padding:10px 12px; border-radius:var(--radius-sm); background:var(--card-bg); border:1px solid var(--border-soft);
}
.info-panel__item--highlight{ background:linear-gradient(135deg, rgba(31,191,117,0.14), rgba(0,212,180,0.08)); border-color:var(--success); }
.info-panel__label{ display:block; font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--text-muted); margin-bottom:4px; }
.info-panel__value{ font-size:0.92rem; font-weight:600; }

.modal__footer{ display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap; }
.rename-field{ flex:1; min-width:160px; }
.rename-field span{ display:block; font-size:0.78rem; color:var(--text-secondary); margin-bottom:6px; font-weight:600; }

/* Crop overlay box */
.crop-box{ position:absolute; border:2px dashed #fff; box-shadow:0 0 0 999px rgba(0,0,0,0.45); cursor:move; }
.crop-box[hidden]{ display:none; }
.crop-box__handle{ position:absolute; width:12px; height:12px; background:#fff; border-radius:2px; }
.crop-box__handle--nw{ top:-6px; left:-6px; cursor:nwse-resize; }
.crop-box__handle--ne{ top:-6px; right:-6px; cursor:nesw-resize; }
.crop-box__handle--sw{ bottom:-6px; left:-6px; cursor:nesw-resize; }
.crop-box__handle--se{ bottom:-6px; right:-6px; cursor:nwse-resize; }

/* --------------------------------------------------------------------------
   10. TOASTS
   -------------------------------------------------------------------------- */
.toast-container{
  position:fixed; bottom:20px; right:20px; z-index:200;
  display:flex; flex-direction:column; gap:10px; max-width:min(360px, calc(100vw - 40px));
}
.toast{
  display:flex; align-items:center; gap:10px; padding:12px 14px; border-radius:var(--radius-md);
  background:var(--bg-elevated); border:1px solid var(--border-soft); box-shadow:var(--glass-shadow);
  font-size:0.85rem; font-weight:500;
  animation:toastIn var(--dur-med) var(--ease-out);
}
.toast.is-leaving{ animation:toastOut var(--dur-fast) var(--ease-out) forwards; }
@keyframes toastIn{ from{ opacity:0; transform:translateX(30px); } to{ opacity:1; transform:translateX(0); } }
@keyframes toastOut{ to{ opacity:0; transform:translateX(30px); } }
.toast__icon{ width:20px; height:20px; border-radius:50%; display:grid; place-items:center; flex-shrink:0; color:#fff; }
.toast--success .toast__icon{ background:var(--success); }
.toast--error .toast__icon{ background:var(--danger); }
.toast--info .toast__icon{ background:var(--accent); }

/* --------------------------------------------------------------------------
   11. FOOTER
   -------------------------------------------------------------------------- */
.site-footer{
    text-align:center;
    padding:26px 20px 40px;
    color:var(--text-muted);
    font-size:0.78rem;
}

.site-footer a{
    color:#2563eb;
    text-decoration:none;
    font-weight:inherit;
}

.site-footer a:hover{
    color:#1d4ed8;
    text-decoration:underline;
}
/* --------------------------------------------------------------------------
   12. RESPONSIVE
   -------------------------------------------------------------------------- */
@media (max-width: 720px){
  .topbar__inner{ flex-wrap:wrap; }
  .topbar__title{ order:3; width:100%; }
  .uploader__card{ padding:40px 16px; }
  .controls__row--actions{ flex-direction:column; align-items:stretch; }
  .controls__row--actions .btn{ width:100%; justify-content:center; }
  .spacer{ display:none; }
  .modal__footer{ flex-direction:column; align-items:stretch; }
}

@media (max-width: 480px){
  .gallery__grid{ grid-template-columns:1fr 1fr; gap:12px; }
  .img-card__actions{ flex-direction:column; }
}

/* High contrast support */
@media (prefers-contrast: more){
  :root{ --border-soft:rgba(0,0,0,0.35); }
  :root[data-theme="dark"]{ --border-soft:rgba(255,255,255,0.35); }
}
