/* =========================================================
   Интерактивный учебник Python — общие стили
   Токены: холодная "бумага" + охра (нод к Python) + тёмно-
   тифловые code-панели. Без клише "крем+терракота".
   ========================================================= */

:root{
  /* Цвет */
  --paper:        #EEF0EA;
  --paper-2:      #E3E7DD;
  --paper-3:      #D9DECF;
  --ink:          #1A2420;
  --ink-soft:     #4B564E;
  --ink-faint:    #7C8579;
  --border:       #CDD3C2;

  --accent:       #C1811F;   /* охра */
  --accent-ink:   #6E4A10;
  --accent-soft:  #F3E3C4;

  --teal:         #1F6F63;
  --teal-soft:    #DEEBE6;
  --teal-ink:     #123F38;

  --danger:       #A8452A;
  --danger-soft:  #F3DFD6;

  --code-bg:      #D4D4D4;
  --code-bg-2:    #C6C6C6;
  --code-text:    #4D4D4D;
  --code-text-dim:#6E6E6E;
  --code-accent:  #1F6F63;
  --code-border:  #B3B3B3;

  /* Типографика */
  --f-display: 'Unbounded', system-ui, sans-serif;
  --f-body:    'Manrope', system-ui, sans-serif;
  --f-mono:    'JetBrains Mono', ui-monospace, 'Courier New', monospace;

  /* Разное */
  --radius: 10px;
  --radius-lg: 16px;
  --shadow: 0 2px 14px rgba(26,36,32,0.07);
  --sidebar-w: 280px;
  --content-w: 760px;
}

*{ box-sizing: border-box; }
html{ scroll-behavior: smooth; }

body{
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--f-body);
  font-size: 17px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior: auto; }
  *{ animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
}

a{ color: var(--teal-ink); }
:focus-visible{ outline: 3px solid var(--teal); outline-offset: 2px; }

/* ---------- Layout ---------- */

.app{
  display: flex;
  min-height: 100vh;
}

.sidebar{
  width: var(--sidebar-w);
  flex-shrink: 0;
  background: var(--ink);
  color: var(--paper);
  padding: 28px 22px 22px;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}

.sidebar-brand{
  font-family: var(--f-display);
  font-size: 15px;
  letter-spacing: 0.02em;
  line-height: 1.4;
  color: var(--paper);
  text-decoration: none;
  display: block;
  margin-bottom: 6px;
}
.sidebar-brand span{ color: var(--code-accent); }

.sidebar-sub{
  font-size: 13px;
  color: #93A093;
  margin-bottom: 26px;
}

.lesson-nav{
  list-style: none;
  margin: 0 0 20px;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.lesson-nav a{
  display: flex;
  align-items: baseline;
  gap: 12px;
  text-decoration: none;
  color: #C7D0C5;
  padding: 10px 10px;
  border-radius: 8px;
  border-left: 3px solid transparent;
  font-size: 14.5px;
  transition: background 0.15s ease, color 0.15s ease;
}
.lesson-nav a:hover{ background: rgba(255,255,255,0.06); color: var(--paper); }
.lesson-nav-divider{
  font-family: var(--f-mono);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #6E7A6E;
  padding: 16px 10px 6px;
  border-top: 1px solid rgba(255,255,255,0.1);
  margin-top: 6px;
}
.lesson-nav-divider:first-child{ border-top: none; margin-top: 0; padding-top: 0; }

.lesson-nav a.is-current{
  background: rgba(127,217,185,0.1);
  border-left-color: var(--code-accent);
  color: var(--paper);
}
.lesson-nav a.is-disabled{
  opacity: 0.4;
  pointer-events: none;
}
.lesson-num{
  font-family: var(--f-display);
  font-size: 13px;
  color: var(--code-accent);
  flex-shrink: 0;
}
.lesson-nav a.is-current .lesson-num{ color: var(--code-accent); }
.lesson-check{
  margin-left: auto;
  font-size: 13px;
  color: var(--code-accent);
  opacity: 0;
}
.lesson-nav a.is-done .lesson-check{ opacity: 1; }

.sidebar-footer{
  margin-top: auto;
  padding-top: 16px;
  border-top: 1px solid rgba(255,255,255,0.12);
  font-size: 13px;
  color: #93A093;
}
.sidebar-user{
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.sidebar-user-name{
  color: var(--paper);
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.link-btn{
  background: none;
  border: none;
  color: #93A093;
  font-size: 12.5px;
  cursor: pointer;
  text-decoration: underline;
  padding: 0;
  font-family: var(--f-body);
}
.link-btn:hover{ color: var(--code-accent); }

.progress-track{
  height: 5px;
  border-radius: 4px;
  background: rgba(255,255,255,0.12);
  overflow: hidden;
  margin-top: 10px;
}
.progress-fill{
  height: 100%;
  background: var(--code-accent);
  border-radius: 4px;
  transition: width 0.3s ease;
}

.main{
  flex: 1;
  min-width: 0;
  padding: 48px clamp(20px, 5vw, 72px) 100px;
}

.content{
  max-width: var(--content-w);
  margin: 0 auto;
}

/* Мобильное меню */
.mobile-bar{ display: none; }
@media (max-width: 900px){
  .app{ display: block; }
  .sidebar{
    position: fixed;
    left: 0; top: 0;
    height: 100vh;
    z-index: 40;
    transform: translateX(-100%);
    transition: transform 0.25s ease;
    box-shadow: 0 0 40px rgba(0,0,0,0.35);
  }
  .sidebar.is-open{ transform: translateX(0); }
  .sidebar-overlay{
    display: none;
    position: fixed; inset: 0;
    background: rgba(15,20,18,0.45);
    z-index: 35;
  }
  .sidebar-overlay.is-open{ display: block; }
  .mobile-bar{
    display: flex;
    align-items: center;
    gap: 12px;
    position: sticky;
    top: 0;
    z-index: 20;
    background: var(--paper);
    border-bottom: 1px solid var(--border);
    padding: 14px 18px;
  }
  .mobile-bar button{
    background: var(--ink);
    color: var(--paper);
    border: none;
    border-radius: 8px;
    width: 36px; height: 36px;
    font-size: 18px;
    cursor: pointer;
  }
  .main{ padding: 28px 18px 80px; }
}

/* ---------- Заголовок урока ---------- */

.lesson-head{
  display: flex;
  align-items: flex-start;
  gap: 22px;
  margin-bottom: 8px;
}
.lesson-head-num{
  font-family: var(--f-display);
  font-size: clamp(46px, 8vw, 68px);
  line-height: 1;
  color: var(--accent-soft);
  -webkit-text-stroke: 1.5px var(--accent);
  color: transparent;
  flex-shrink: 0;
}
.lesson-head-text{ padding-top: 8px; }
.lesson-kicker{
  font-family: var(--f-mono);
  font-size: 12.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--teal-ink);
  background: var(--teal-soft);
  display: inline-block;
  padding: 3px 9px;
  border-radius: 5px;
  margin-bottom: 10px;
}
.lesson-title{
  font-family: var(--f-display);
  font-size: clamp(24px, 4vw, 32px);
  line-height: 1.25;
  margin: 0;
}
.lesson-source{
  font-size: 13.5px;
  color: var(--ink-faint);
  margin-top: 10px;
}

.lesson-lede{
  font-size: 18.5px;
  color: var(--ink-soft);
  margin: 22px 0 8px;
}

hr.divider{
  border: none;
  border-top: 1px solid var(--border);
  margin: 40px 0;
}

h2.section-title{
  font-family: var(--f-display);
  font-size: 21px;
  margin: 44px 0 16px;
  display: flex;
  align-items: center;
  gap: 10px;
}
h3{ font-family: var(--f-body); font-weight: 800; font-size: 17.5px; margin: 26px 0 10px; }

.callout{
  border: 1px solid var(--border);
  background: var(--paper-2);
  border-radius: var(--radius-lg);
  padding: 16px 20px;
  margin: 18px 0;
}
.callout-term{
  border-left: 4px solid var(--accent);
}
.callout-term .callout-label{ color: var(--accent-ink); }
.callout-label{
  font-family: var(--f-mono);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--teal-ink);
  margin-bottom: 6px;
  display: block;
}

code.inline{
  font-family: var(--f-mono);
  background: var(--paper-3);
  padding: 2px 6px;
  border-radius: 5px;
  font-size: 0.9em;
}

/* ---------- Код-панели ---------- */

.code-panel{
  background: var(--code-bg);
  border: 1px solid var(--code-border);
  border-radius: var(--radius-lg);
  margin: 20px 0;
  overflow: hidden;
  box-shadow: var(--shadow);
}
.code-panel-head{
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 16px;
  background: var(--code-bg-2);
  border-bottom: 1px solid var(--code-border);
}
.code-panel-label{
  font-family: var(--f-mono);
  font-size: 12.5px;
  color: var(--code-text-dim);
}
.code-dots{ display: flex; gap: 6px; }
.code-dots span{
  width: 8px; height: 8px; border-radius: 50%;
  background: #9A9A9A;
}

.code-run-btn{
  font-family: var(--f-mono);
  font-size: 13px;
  background: var(--teal);
  color: #EAFBF4;
  border: none;
  padding: 6px 14px;
  border-radius: 7px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: background 0.15s ease;
}
.code-run-btn:hover{ background: #185950; }
.code-run-btn:disabled{ opacity: 0.5; cursor: wait; }

.CodeMirror{
  font-family: var(--f-mono) !important;
  font-size: 14.5px !important;
  background: var(--code-bg) !important;
  color: var(--code-text) !important;
  height: auto !important;
  padding: 6px 4px;
}
.CodeMirror-gutters{ background: var(--code-bg) !important; border: none !important; }
.CodeMirror-linenumber{ color: #8A8A8A !important; }
.CodeMirror-cursor{ border-left-color: var(--code-accent) !important; }

.code-output{
  font-family: var(--f-mono);
  font-size: 13.5px;
  font-weight: 500;
  color: var(--code-text);
  background: var(--code-bg-2);
  padding: 12px 18px;
  border-top: 1px solid var(--code-border);
  white-space: pre-wrap;
  word-break: break-word;
  min-height: 20px;
}
.code-output:empty{ display: none; }
.code-output.has-error{ color: var(--danger); }
.code-output-label{
  font-family: var(--f-mono);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--code-text-dim);
  display: block;
  margin-bottom: 4px;
}

/* ---------- Статичный код (внутри степпера, для иллюстрации) ---------- */

.code-static{
  background: var(--code-bg);
  border: 1px solid var(--code-border);
  border-radius: 10px;
  padding: 14px 18px;
  margin: 12px 0;
  overflow-x: auto;
}
.code-static pre{
  margin: 0;
  font-family: var(--f-mono);
  font-size: 13.5px;
  color: var(--code-text);
  white-space: pre;
}
.code-static .out{ color: var(--code-text-dim); }
.code-static .out::before{ content: '# вывод: '; color: #8A8A8A; }

/* ---------- Практика с автопроверкой ---------- */

.exercise{
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: #F6F7F2;
  padding: 20px 22px 22px;
  margin: 22px 0;
}
.exercise-eyebrow{
  font-family: var(--f-mono);
  font-size: 12px;
  color: var(--accent-ink);
  text-transform: uppercase;
  letter-spacing: 0.07em;
  margin-bottom: 6px;
}
.exercise-title{ font-weight: 800; margin: 0 0 8px; font-size: 16.5px; }
.exercise-desc{ color: var(--ink-soft); margin-bottom: 14px; }
.exercise-expected{
  font-family: var(--f-mono);
  font-size: 13px;
  color: var(--ink-faint);
  margin-top: 10px;
}
.exercise-verdict{
  margin-top: 12px;
  padding: 10px 14px;
  border-radius: 8px;
  font-size: 14.5px;
  display: none;
}
.exercise-verdict.show{ display: block; }
.exercise-verdict.ok{ background: var(--teal-soft); color: var(--teal-ink); }
.exercise-verdict.fail{ background: var(--danger-soft); color: var(--danger); }

.exercise-help{
  display: flex;
  gap: 8px;
  margin-top: 14px;
  flex-wrap: wrap;
}
.help-btn{
  font-family: var(--f-body);
  font-size: 13px;
  font-weight: 700;
  background: none;
  border: 1px dashed var(--border);
  color: var(--ink-soft);
  padding: 7px 13px;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.15s ease;
}
.help-btn:hover{ border-color: var(--accent); color: var(--accent-ink); border-style: solid; }
.help-btn.is-active{ border-style: solid; border-color: var(--teal); color: var(--teal-ink); background: var(--teal-soft); }
.help-reveal{
  display: none;
  margin-top: 10px;
  border-radius: 10px;
  padding: 13px 16px;
  font-size: 14px;
  line-height: 1.55;
}
.help-reveal.show{ display: block; }
.help-reveal.hint-box{
  background: var(--accent-soft);
  color: var(--accent-ink);
}
.help-reveal.solution-box{
  background: #fff;
  border: 1px solid var(--border);
  padding: 0;
  overflow: hidden;
}
.solution-box .solution-code{
  font-family: var(--f-mono);
  font-size: 13.5px;
  background: var(--code-bg);
  color: var(--code-text);
  padding: 14px 16px;
  margin: 0;
  white-space: pre;
  overflow-x: auto;
}
.solution-box .solution-actions{
  padding: 10px 14px;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: flex-end;
}

/* ---------- Степпер ---------- */

.stepper{
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: #fff;
  margin: 22px 0;
  overflow: hidden;
}
.stepper-head{
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 20px;
  background: var(--paper-2);
}
.stepper-title{ font-weight: 800; font-size: 15.5px; }
.stepper-count{ font-family: var(--f-mono); font-size: 13px; color: var(--ink-faint); }
.stepper-body{ padding: 20px 22px; }
.stepper-controls{
  display: flex;
  justify-content: space-between;
  padding: 12px 20px 18px;
}
.btn{
  font-family: var(--f-body);
  font-weight: 700;
  font-size: 14px;
  padding: 9px 18px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: #fff;
  cursor: pointer;
  transition: all 0.15s ease;
}
.btn:hover{ border-color: var(--teal); color: var(--teal-ink); }
.btn:disabled{ opacity: 0.35; cursor: default; }
.btn-primary{
  background: var(--ink);
  color: var(--paper);
  border-color: var(--ink);
}
.btn-primary:hover{ background: #2A3A34; color: #fff; }
.stepper-dots{ display:flex; gap:6px; align-items:center; }
.stepper-dots span{
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--paper-3);
}
.stepper-dots span.is-active{ background: var(--teal); }

/* ---------- Флеш-карточки ---------- */

.flash-wrap{ margin: 22px 0; }
.flash-grid{
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
  gap: 12px;
}
.flash-card{
  perspective: 1000px;
  height: 128px;
  cursor: pointer;
}
.flash-inner{
  position: relative;
  width: 100%; height: 100%;
  transition: transform 0.5s cubic-bezier(.2,.8,.2,1);
  transform-style: preserve-3d;
}
.flash-card.is-flipped .flash-inner{ transform: rotateY(180deg); }
.flash-face{
  position: absolute; inset: 0;
  border-radius: 12px;
  padding: 14px 16px;
  backface-visibility: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  border: 1px solid var(--border);
}
.flash-front{
  background: #fff;
}
.flash-front .flash-term{
  font-family: var(--f-mono);
  font-weight: 700;
  font-size: 15.5px;
  color: var(--ink);
}
.flash-front .flash-hint{
  font-size: 12px;
  color: var(--ink-faint);
  margin-top: 8px;
}
.flash-back{
  background: var(--teal);
  color: #EAFBF4;
  transform: rotateY(180deg);
  font-size: 13.5px;
  line-height: 1.5;
}

/* ---------- Квиз ---------- */

.quiz{
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: #fff;
  margin: 22px 0;
  padding: 22px 24px 24px;
}
.quiz-progress{
  font-family: var(--f-mono);
  font-size: 12.5px;
  color: var(--ink-faint);
  margin-bottom: 10px;
}
.quiz-q{ font-weight: 800; font-size: 16.5px; margin-bottom: 14px; }
.quiz-options{ display: flex; flex-direction: column; gap: 8px; }
.quiz-option{
  text-align: left;
  border: 1px solid var(--border);
  background: var(--paper-2);
  border-radius: 9px;
  padding: 11px 14px;
  font-family: var(--f-body);
  font-size: 15px;
  cursor: pointer;
  transition: all 0.12s ease;
}
.quiz-option:hover{ border-color: var(--teal); }
.quiz-option.correct{ background: var(--teal-soft); border-color: var(--teal); color: var(--teal-ink); }
.quiz-option.wrong{ background: var(--danger-soft); border-color: var(--danger); color: var(--danger); }
.quiz-option:disabled{ cursor: default; }
.quiz-explain{
  margin-top: 14px;
  font-size: 14.5px;
  color: var(--ink-soft);
  background: var(--paper-2);
  border-radius: 8px;
  padding: 12px 14px;
  display: none;
}
.quiz-explain.show{ display: block; }
.quiz-footer{
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 18px;
}
.quiz-result{
  text-align: center;
  padding: 20px 0 6px;
}
.quiz-result-score{
  font-family: var(--f-display);
  font-size: 40px;
  color: var(--teal-ink);
}

/* ---------- Прочее ---------- */

.qa-list{ padding-left: 0; list-style: none; }
.qa-list li{
  counter-increment: qa;
  padding: 10px 0 10px 34px;
  border-bottom: 1px solid var(--border);
  position: relative;
}
.qa-list{ counter-reset: qa; }
.qa-list li::before{
  content: counter(qa);
  position: absolute; left: 0; top: 10px;
  font-family: var(--f-mono);
  font-size: 13px;
  color: var(--accent-ink);
  background: var(--accent-soft);
  width: 22px; height: 22px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
}

.lesson-footer-nav{
  display: flex;
  justify-content: space-between;
  margin-top: 56px;
  padding-top: 24px;
  border-top: 1px solid var(--border);
  gap: 12px;
}
.footer-nav-link{
  text-decoration: none;
  color: var(--ink);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px 16px;
  max-width: 46%;
  font-size: 14px;
}
.footer-nav-link:hover{ border-color: var(--teal); }
.footer-nav-link .fk{ display:block; font-family: var(--f-mono); font-size: 11px; color: var(--ink-faint); margin-bottom: 3px;}

.modal-overlay{
  position: fixed; inset: 0;
  background: rgba(20,26,23,0.5);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 100;
  padding: 20px;
}
.modal-overlay.show{ display: flex; }
.modal{
  background: #fff;
  border-radius: var(--radius-lg);
  padding: 28px 26px;
  max-width: 380px;
  width: 100%;
}
.modal h3{ margin-top: 0; font-family: var(--f-display); font-size: 18px; }
.modal p{ color: var(--ink-soft); font-size: 14.5px; }
.modal input{
  width: 100%;
  padding: 10px 12px;
  border-radius: 8px;
  border: 1px solid var(--border);
  font-family: var(--f-body);
  font-size: 15px;
  margin: 10px 0 16px;
}
.modal-actions{ display: flex; gap: 10px; justify-content: flex-end; }
