/* ── Reset ── */
*{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
html{touch-action:manipulation}
body{touch-action:manipulation;-webkit-user-select:none;user-select:none}
input,textarea,select{-webkit-user-select:text;user-select:text}

/* ── Variables ── */
:root{
  --accent:#FF6B35;--blue:#4FC3F7;--green:#66BB6A;--red:#EF5350;--purple:#AB47BC;--yellow:#FFD54F;
  --bg:#0a0a0d;--bg2:#111116;--bg3:#18181f;
  --border:rgba(255,255,255,0.07);--border-strong:rgba(255,255,255,0.13);
  --text-dim:rgba(255,255,255,0.38);--text-faint:rgba(255,255,255,0.18);
  --r:10px;--r-sm:7px;--r-xs:5px;--r-pill:99px;
  --nav-h:58px;
  --shadow-card:0 1px 0 rgba(255,255,255,0.04),0 4px 16px rgba(0,0,0,0.4);
  --shadow-sheet:0 -4px 32px rgba(0,0,0,0.7);
  --transition-bounce:cubic-bezier(0.34,1.56,0.64,1);
  --transition-smooth:cubic-bezier(0.25,1,0.5,1);
}

/* ── Base ── */
html{scroll-behavior:smooth;height:100%}
body{
  background:var(--bg);color:#fff;
  font-family:'DM Sans',sans-serif;
  min-height:100dvh;
  /* iOS safe areas */
  padding-bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 8px);
  padding-top:env(safe-area-inset-top);
  overscroll-behavior:none;
  -webkit-text-size-adjust:100%; /* prevent iOS font scaling */
  text-size-adjust:100%;
}
#app{
  padding-left:max(env(safe-area-inset-left),0px);
  padding-right:max(env(safe-area-inset-right),0px);
  min-height:100%;
}

/* ── Typography fixes ── */
input,select,button,textarea{font-family:'DM Sans',sans-serif;-webkit-appearance:none;appearance:none}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
input[type=date]::-webkit-calendar-picker-indicator{filter:invert(0.5)}

/* ── Inputs ── */
input[type=text],input[type=number],input[type=date],
input[type=email],input[type=password],input[type=search],input[type=color]{
  background:rgba(255,255,255,0.07);
  border:1.5px solid rgba(255,255,255,0.1);
  border-radius:var(--r-sm);
  padding:11px 13px;color:#fff;
  font-size:16px !important; /* CRITICAL: prevents iOS zoom */
  outline:none;width:100%;
  transition:border-color 0.2s,background 0.2s;
  -webkit-appearance:none;
  appearance:none;
}
input:focus{border-color:rgba(255,107,53,0.65);background:rgba(255,255,255,0.1);outline:none;box-shadow:0 0 0 3px rgba(255,107,53,0.14),0 1px 4px rgba(0,0,0,0.3)}
select:focus{border-color:rgba(255,107,53,0.55);outline:none;box-shadow:0 0 0 3px rgba(255,107,53,0.12)}
input::placeholder{color:rgba(255,255,255,0.25)}
select{
  background:rgba(255,255,255,0.07);
  border:1.5px solid rgba(255,255,255,0.1);
  border-radius:var(--r-sm);
  padding:11px 13px;color:#fff;
  font-size:16px !important;
  outline:none;width:100%;
  -webkit-appearance:none;
  appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='rgba(255,255,255,0.3)' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 12px center;
  padding-right:32px;
}
select option{background:#1a1a2e;color:#fff}

/* ── Buttons ── */
button{
  min-height:44px; /* iOS HIG minimum */
  -webkit-tap-highlight-color:transparent;
  transition:opacity 0.12s,transform 0.1s;
  cursor:pointer;
  -webkit-appearance:none;
  appearance:none;
  border:none;
}
button:active{transform:scale(0.96);opacity:0.82}

/* ── Animations ── */
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes splashLogoIn{0%{transform:scale(0.4);opacity:0}65%{transform:scale(1.08);opacity:1}100%{transform:scale(1)}}
@keyframes splashLogoShrink{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5) translateY(-30px);opacity:0.5}}
@keyframes splashOut{0%{opacity:1}100%{opacity:0;pointer-events:none}}
@keyframes navIn{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.4}}
@keyframes sheetIn{from{transform:translateY(105%)}to{transform:translateY(0)}}
@keyframes badgePop{0%{transform:scale(0.6)}70%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes glow{0%,100%{box-shadow:0 0 8px rgba(255,107,53,0.3)}50%{box-shadow:0 0 20px rgba(255,107,53,0.6)}}
@keyframes checkPop{0%{transform:scale(0)}50%{transform:scale(1.3)}100%{transform:scale(1)}}
@keyframes confettiFall{0%{transform:translateY(-10px) rotate(0deg);opacity:1}100%{transform:translateY(60px) rotate(360deg);opacity:0}}
@keyframes slideInRight{from{opacity:0;transform:translateX(18px)}to{opacity:1;transform:translateX(0)}}
@keyframes slideInLeft{from{opacity:0;transform:translateX(-18px)}to{opacity:1;transform:translateX(0)}}
@keyframes onboardSlide{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
@keyframes pullSpinner{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes emptyFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes scoreCount{0%{transform:scale(1)}50%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(10px) scale(0.95)}to{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}}

/* ── Priority colors ── */
.prio-high{background:rgba(239,83,80,0.15);color:#EF5350;border:1px solid rgba(239,83,80,0.25)}
.prio-mid{background:rgba(255,213,79,0.12);color:#FFD54F;border:1px solid rgba(255,213,79,0.2)}
.prio-low{background:rgba(102,187,106,0.12);color:#66BB6A;border:1px solid rgba(102,187,106,0.2)}


/* ── Progress bar (unified) ── */

/* ── Stats grid ── */
.stats-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;margin-bottom:10px}
.stat-box{
  background:var(--bg2);padding:12px 8px;text-align:center;
}
.stat-num{font-size:22px;font-weight:800;line-height:1;margin-bottom:3px;font-variant-numeric:tabular-nums}
.stat-label{font-size:9px;color:rgba(255,255,255,0.28);letter-spacing:0.5px;text-transform:uppercase}

/* ── Section header ── */
.sec-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.sec-hd-title{font-size:11px;font-weight:700;color:rgba(255,255,255,0.35);letter-spacing:1.5px;text-transform:uppercase}

/* ── Pomodoro timer ── */
#pomo-ring{transition:stroke-dashoffset 1s linear,stroke 0.5s ease}
#pomo-wrap{will-change:auto}

/* ── Grade trend ── */
.grade-trend-up{color:#66BB6A}
.grade-trend-dn{color:#EF5350}
.grade-trend-eq{color:rgba(255,255,255,0.3)}


/* ── Onboarding overlay ── */

#onboarding-overlay{position:fixed;inset:0;background:var(--bg);z-index:8000;display:flex;flex-direction:column;overflow:hidden}
.ob-step{flex:1;display:flex;flex-direction:column;padding:0 24px;animation:onboardSlide 0.35s ease both}
.ob-dot{width:7px;height:7px;border-radius:50%;transition:all 0.25s}

/* ── Pull to refresh ── */
#ptr-indicator{position:fixed;top:env(safe-area-inset-top,0);left:50%;transform:translateX(-50%);z-index:400;pointer-events:none;opacity:0;transition:opacity 0.2s}

/* ── Confetti ── */
.confetti-piece{position:fixed;pointer-events:none;z-index:9998;font-size:16px;animation:confettiFall 0.9s ease forwards}

/* ── Fullscreen editor ── */
#editor-overlay{
  position:fixed;inset:0;background:var(--bg);z-index:5000;
  display:flex;flex-direction:column;
  padding-top:env(safe-area-inset-top,0px);
  animation:fadeIn 0.18s ease;
}
.editor-topbar{
  display:flex;align-items:center;gap:10px;
  padding:10px 14px;
  background:rgba(13,13,18,0.95);
  border-bottom:1px solid rgba(255,255,255,0.07);
  flex-shrink:0;
  -webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
}
.editor-fmt-bar{
  display:flex;gap:5px;
  padding:7px 12px;
  overflow-x:auto;scrollbar-width:none;
  background:rgba(255,255,255,0.02);
  border-bottom:1px solid rgba(255,255,255,0.06);
  flex-shrink:0;
}
.editor-fmt-btn{
  background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.1);
  border-radius:7px;padding:5px 10px;color:#fff;font-size:11px;
  cursor:pointer;min-height:30px;flex-shrink:0;white-space:nowrap;
  font-family:'DM Sans',sans-serif;
}
.editor-fmt-btn:active{background:rgba(255,255,255,0.15);}
.editor-main{flex:1;overflow:hidden;position:relative;}
#editor-textarea{
  width:100%;height:100%;
  background:transparent;border:none;outline:none;
  color:#fff;font-size:16px;line-height:1.9;
  padding:18px 16px calc(env(safe-area-inset-bottom,0px)+80px);
  resize:none;font-family:'DM Sans',sans-serif;
  -webkit-overflow-scrolling:touch;overflow-y:auto;
}
.editor-statusbar{
  position:absolute;bottom:0;left:0;right:0;
  display:flex;justify-content:space-between;align-items:center;
  padding:6px 16px calc(env(safe-area-inset-bottom,0px)+8px);
  background:linear-gradient(transparent,rgba(13,13,18,0.98));
  font-size:10px;color:rgba(255,255,255,0.25);
  pointer-events:none;
}
/* Sheet editor */
.sheet-overlay-wrap{
  position:fixed;inset:0;background:var(--bg);z-index:5000;
  display:flex;flex-direction:column;
  padding-top:env(safe-area-inset-top,0px);
  animation:fadeIn 0.18s ease;
}
.sheet-topbar{
  display:flex;align-items:center;gap:8px;
  padding:10px 14px;
  background:rgba(13,13,18,0.95);
  border-bottom:1px solid rgba(255,255,255,0.07);
  flex-shrink:0;
}
.sheet-grid-wrap{flex:1;overflow:auto;-webkit-overflow-scrolling:touch;}
.sheet-grid{border-collapse:collapse;min-width:100%;}
.sheet-grid th{
  position:sticky;top:0;z-index:2;
  background:#1a1a2e;padding:7px 10px;
  font-size:11px;font-weight:800;color:rgba(255,255,255,0.5);
  border-right:1px solid rgba(255,255,255,0.07);
  border-bottom:2px solid rgba(255,255,255,0.1);
  text-align:left;white-space:nowrap;
}
.sheet-grid th:first-child{width:32px;text-align:center;font-weight:400;color:rgba(255,255,255,0.3);}
.sheet-grid td{border:1px solid rgba(255,255,255,0.05);padding:0;}
.sheet-grid td:first-child{background:rgba(255,255,255,0.03);font-size:10px;color:rgba(255,255,255,0.2);text-align:center;padding:4px 6px;border-right:1px solid rgba(255,255,255,0.08);}
.sheet-cell{
  width:100%;min-width:80px;background:transparent;border:none;
  padding:8px 10px;color:#fff;font-size:13px;outline:none;
  font-family:'DM Sans',sans-serif;
}
.sheet-cell:focus{background:rgba(79,195,247,0.08);}
.sheet-bottombar{
  display:flex;gap:8px;
  padding:8px 14px calc(env(safe-area-inset-bottom,0px)+10px);
  background:rgba(13,13,18,0.97);
  border-top:1px solid rgba(255,255,255,0.07);
  flex-shrink:0;
}

/* ── Spinner ── */
.spin{border-radius:50%;border:2.5px solid var(--accent);border-top-color:transparent;animation:spin 0.75s linear infinite;display:inline-block;flex-shrink:0}

/* ── Scrollbar ── */
::-webkit-scrollbar{width:0;height:0} /* hidden on mobile */
* {scrollbar-width:none}

/* ── Bottom Nav ── */
#bottom-nav{
  position:fixed;bottom:0;left:0;right:0;
  background:var(--bg);
  border-top:1px solid rgba(255,255,255,0.09);
  display:flex;z-index:500;
  height:calc(var(--nav-h) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);
  animation:navIn 0.4s cubic-bezier(0.25,1,0.5,1) both;
}
.nav-item{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:8px 4px 4px;gap:3px;border:none;background:transparent;
  color:rgba(255,255,255,0.22);
  -webkit-tap-highlight-color:transparent;
  transition:color 0.15s,transform 0.12s;
  position:relative;min-height:44px;
}
.nav-item:active{transform:scale(0.9)}
.nav-item.active{color:#fff}
.nav-item.active::before{
  content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);
  width:24px;height:2px;
  background:var(--accent);
  border-radius:0 0 2px 2px;
}
.nav-item span{font-size:19px;line-height:1;position:relative;z-index:1}
.nav-item.active span{transform:none}
.nav-item div{font-size:9px;font-weight:600;letter-spacing:0.3px;text-transform:uppercase;line-height:1;white-space:nowrap;position:relative;z-index:1}
.nav-item:not(.active) div{opacity:0.35}

/* ── Tab buttons ── */
.tab-scroll{display:flex;gap:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:0;border-bottom:1px solid var(--border)}
.tab-scroll::-webkit-scrollbar{display:none}
.tab-btn{
  background:transparent;
  border:none;
  border-bottom:2px solid transparent;
  border-radius:0;
  padding:10px 16px;white-space:nowrap;
  color:rgba(255,255,255,0.3);
  font-size:12px;font-weight:700;
  flex-shrink:0;letter-spacing:0.4px;
  min-height:40px;
  margin-bottom:-1px;
  transition:color 0.15s,border-color 0.15s;
}
.tab-btn:active{opacity:0.6}
.tab-btn.active{color:#fff;border-bottom-color:var(--accent)}
.tab-btn.blue.active{color:var(--blue);border-bottom-color:var(--blue)}

/* ── Section labels ── */
.section-label{font-size:9px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,0.25);margin-bottom:8px;display:block}

/* ── Splash ── */
#splash{
  position:fixed;inset:0;background:var(--bg);
  display:flex;align-items:center;justify-content:center;flex-direction:column;
  gap:16px;z-index:9999;
}
#splash.hide{animation:splashOut 0.45s ease forwards}
#splash-logo{font-size:80px;animation:splashLogoIn 0.65s cubic-bezier(0.34,1.56,0.64,1) both}
#splash-logo.shrink{animation:splashLogoShrink 0.4s ease forwards}
#splash-title{font-family:'DM Serif Display',serif;font-size:30px;color:#fff;animation:fadeUp 0.5s 0.25s both;letter-spacing:-0.5px}
#splash-sub{font-size:11px;color:rgba(255,255,255,0.25);letter-spacing:2.5px;text-transform:uppercase;animation:fadeUp 0.5s 0.4s both}
#splash-bar{width:44px;height:2px;background:rgba(255,255,255,0.08);border-radius:2px;margin-top:6px;overflow:hidden;animation:fadeUp 0.5s 0.5s both}
#splash-bar::after{content:'';display:block;height:100%;width:0%;background:var(--accent);border-radius:2px;animation:splashProgress 1.5s 0.4s cubic-bezier(0.4,0,0.2,1) forwards}
@keyframes splashProgress{0%{width:0%}100%{width:100%}}

/* copyright is inline only */

/* ── Sticky header ── */
.page-header{
  padding:12px 16px 10px;
  border-bottom:1px solid var(--border);
  background:var(--bg);
  position:sticky;top:0;z-index:20;
}

/* ── Card base ── */
.card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:14px;box-shadow:var(--shadow-card)}
.card-tight{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px 12px;box-shadow:var(--shadow-card)}

/* ── Gradient text ── */
.gradient-text{background:linear-gradient(135deg,#FF6B35,#FFD54F);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}

/* ── Bottom sheet overlay ── */
.sheet-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:600;display:flex;align-items:flex-end;justify-content:center;animation:fadeIn 0.18s ease}
.sheet-body{background:var(--bg2);border:1px solid var(--border-strong);border-bottom:none;border-radius:16px 16px 0 0;padding:6px 20px calc(24px + env(safe-area-inset-bottom));width:100%;max-width:480px;animation:sheetIn 0.28s cubic-bezier(0.25,1,0.5,1);box-shadow:var(--shadow-sheet)}
.sheet-handle{width:36px;height:3px;border-radius:2px;background:rgba(255,255,255,0.12);margin:10px auto 18px}

/* ── Ambient background ── */
body::before{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:-1;
  background:
    radial-gradient(ellipse 60% 30% at 15% 0%,rgba(255,107,53,0.025) 0%,transparent 70%);
}

/* ── Page content wrapper ── */
.page-content{padding:14px 16px 24px}

/* ── CUSTOM DESIGN OVERRIDES ─────────────────────────────────────
   Gibt der App einen klaren, eigenen Charakter.
   Weg von: glassmorphism bubbles, 24px border-radius überall, blur-on-everything
   Hin zu: klare Struktur, Typografie-Hierarchie, gezielter Farbsatz
───────────────────────────────────────────────────────────────── */

/* Harte Trennlinien statt diffuse Schatten */
.divider{height:1px;background:var(--border)}

/* Section-Header: Monospace-Stil, links ausgerichtet */
.sec-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.sec-hd-title{
  font-size:10px;font-weight:700;
  color:rgba(255,255,255,0.28);
  letter-spacing:1.8px;text-transform:uppercase;
  font-variant-numeric:tabular-nums;
}

/* Accent-Linie im Header – dünner, präziser */
.page-header .accent-line{
  width:2px;height:18px;border-radius:1px;
  background:var(--accent);opacity:0.8;flex-shrink:0;
}

/* Input: klarer Focus-State ohne glow-spam */
input:focus{
  border-color:var(--accent);
  background:rgba(255,255,255,0.06);
  outline:none;
  box-shadow:none;
}
select:focus{border-color:var(--accent);outline:none;box-shadow:none}

/* Tappable: kein bounce, direkt */
.tappable{-webkit-tap-highlight-color:transparent;cursor:pointer;transition:opacity 0.1s}
.tappable:active{opacity:0.55;transform:none}

/* Progress bar: dünner, präziser */
.progress-bar{height:2px;border-radius:1px;background:rgba(255,255,255,0.06);overflow:hidden;position:relative}
.progress-bar-fill{height:100%;border-radius:1px;transition:width 0.5s ease}
.progress-bar-fill::after{display:none} /* kein shimmer auf bars */

/* Toast: linksbündig, klar */
.toast{
  position:fixed;bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 12px);
  left:50%;transform:translateX(-50%);
  background:var(--bg3);
  border:1px solid var(--border-strong);
  border-radius:8px;
  padding:10px 18px;color:#fff;
  font-size:12px;font-weight:600;
  z-index:9000;white-space:nowrap;
  box-shadow:0 8px 24px rgba(0,0,0,0.6);
  animation:fadeUp 0.18s ease;
  max-width:calc(100vw - 40px);
  overflow:hidden;text-overflow:ellipsis;
  display:flex;align-items:center;gap:8px;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
.toast::before{content:'✓';display:inline-flex;width:16px;height:16px;border-radius:4px;background:#66BB6A;color:#000;font-size:9px;font-weight:900;align-items:center;justify-content:center;flex-shrink:0}
.toast.error::before{content:'!';background:#EF5350}

/* Pills: eckiger */
.pill{
  display:inline-flex;align-items:center;gap:4px;
  padding:2px 7px;border-radius:4px;
  font-size:10px;font-weight:700;letter-spacing:0.3px;
}

/* Badge */
.badge{display:inline-flex;align-items:center;border-radius:4px;padding:2px 7px;font-size:10px;font-weight:700}

/* Streak */
.streak-fire{
  display:inline-flex;align-items:center;gap:5px;
  background:rgba(255,107,53,0.1);
  border:1px solid rgba(255,107,53,0.2);
  border-radius:6px;padding:4px 10px;
  font-size:11px;font-weight:700;color:#FF6B35;
}

/* Empty state */
.empty-state{text-align:center;padding:40px 20px;color:rgba(255,255,255,0.2);display:flex;flex-direction:column;align-items:center;gap:8px;animation:fadeUp 0.25s ease both}
.empty-state .empty-icon{font-size:40px;opacity:0.3;margin-bottom:4px}
.empty-state strong{font-size:14px;font-weight:700;color:rgba(255,255,255,0.38)}
.empty-state span{font-size:12px;color:rgba(255,255,255,0.2);max-width:200px;line-height:1.5}

/* Skeleton */
.skeleton{
  background:linear-gradient(90deg,var(--bg2) 25%,var(--bg3) 50%,var(--bg2) 75%);
  background-size:200% 100%;
  animation:shimmer 1.8s infinite;
  border-radius:4px;
}

/* Splash */
#splash-title{font-family:'DM Serif Display',serif;font-size:28px;color:#fff;animation:fadeUp 0.5s 0.25s both;letter-spacing:-0.3px}
#splash-sub{font-size:10px;color:rgba(255,255,255,0.2);letter-spacing:3px;text-transform:uppercase;animation:fadeUp 0.5s 0.4s both}
#splash-bar{width:36px;height:1px;background:rgba(255,255,255,0.07);border-radius:1px;margin-top:8px;overflow:hidden;animation:fadeUp 0.5s 0.5s both}

/* Lernplan */
.lernplan-day{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);padding:12px;display:flex;flex-direction:column;gap:6px}
.lernplan-session{background:rgba(171,71,188,0.08);border:1px solid rgba(171,71,188,0.18);border-radius:6px;padding:8px 12px;display:flex;align-items:center;gap:10px}
