/* ============================================================
   Стьюдент — общие стили Mini App в стиле iOS: палитры обеих тем,
   шапка, карточки, строки, переключатели, кнопки, тост.
   Основа — вёрстка Catcher Mini App.
   ============================================================ */

:root{
  /* дневная тема — системные цвета iOS (grouped background) */
  --accent:#007aff;
  --green:#34c759;
  --danger:#ff3b30;
  --page:#f2f2f7;
  --card:#fff;
  --card-text:#000;
  --sep:rgba(60,60,67,.24);
  --hint:rgba(60,60,67,.6);
  --caption:rgba(60,60,67,.6);
  --value:rgba(60,60,67,.6);
  --chevron:rgba(60,60,67,.3);
  --fill:rgba(118,118,128,.12);
  --switch-off:rgba(120,120,128,.16);
  --shadow:none;
  --bar:rgba(242,242,247,.72);
  --bar-line:rgba(0,0,0,.1);
  --glass:rgba(255,255,255,.66);
  --glass-edge:rgba(255,255,255,.95);
  --glass-shadow:0 8px 28px rgba(0,0,0,.12),0 1px 4px rgba(0,0,0,.06);
  --lens:rgba(0,0,0,.07);

  --gap:16px;
  --radius-card:24px;
  --topbar-h:calc(44px + var(--tg-content-safe-area-inset-top,0px));
  /* нижний безопасный отступ: Telegram (Bot API 8.0+) либо сам WebView */
  --safe-bottom:max(var(--tg-safe-area-inset-bottom,0px),env(safe-area-inset-bottom,0px));
}

html[data-theme="dark"]{
  --accent:#0a84ff;
  --green:#30d158;
  --danger:#ff453a;
  --page:#000;
  --card:#1c1c1e;
  --card-text:#fff;
  --sep:rgba(84,84,88,.6);
  --hint:rgba(235,235,245,.6);
  --caption:rgba(235,235,245,.6);
  --value:rgba(235,235,245,.6);
  --chevron:rgba(235,235,245,.3);
  --fill:rgba(118,118,128,.24);
  --switch-off:rgba(120,120,128,.32);
  --bar:rgba(10,10,10,.7);
  --bar-line:rgba(255,255,255,.1);
  --glass:rgba(40,40,42,.62);
  --glass-edge:rgba(255,255,255,.26);
  --glass-shadow:0 8px 28px rgba(0,0,0,.5),0 1px 4px rgba(0,0,0,.3);
  --lens:rgba(255,255,255,.12);
}

*,*::before,*::after{box-sizing:border-box}

html,body{margin:0;padding:0;height:100%}

html{
  background:var(--page);
  overscroll-behavior:none;
}

body{
  overflow:hidden;
  color:var(--card-text);
  background:var(--page);
  font:400 17px/1.3 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
  -webkit-text-size-adjust:100%;
}

button{font:inherit;color:inherit}

/* ---------------- Шапка ---------------- */
/* Как в iOS: при прокрутке крупный заголовок уезжает и гаснет, а в шапке
   проявляются стекло и мелкий заголовок. Прогресс (0…1) кладёт в
   --title-progress функция UI.watchTitle. */
.topbar{
  position:fixed;
  top:0;
  left:0;
  right:0;
  z-index:10;
  display:flex;
  align-items:flex-end;
  justify-content:center;
  height:var(--topbar-h);
  padding:0 56px 11px;
  color:var(--card-text);
  pointer-events:none;
}
.topbar::before{
  content:"";
  position:absolute;
  left:0;
  right:0;
  top:-100vh;
  bottom:0;
  background:var(--bar);
  box-shadow:inset 0 -0.5px 0 var(--bar-line);
  opacity:var(--title-progress,0);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
}
.topbar__title{
  position:relative;
  font-size:17px;
  font-weight:600;
  letter-spacing:-.4px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
  opacity:calc((var(--title-progress,0) - .45) / .55);
  transform:translateY(calc((1 - var(--title-progress,0)) * 7px));
}

.large-title{
  margin:4px 0 6px;
  font-size:clamp(28px,8.4vw,34px);
  font-weight:700;
  line-height:1.12;
  letter-spacing:-.8px;
  transform-origin:left center;
  opacity:calc(1 - var(--title-progress,0) / .7);
  transform:scale(calc(1 - .1 * var(--title-progress,0)));
}
.lead{
  margin:0 0 4px;
  font-size:15px;
  line-height:1.38;
  color:var(--hint);
}

.page{
  display:flex;
  flex-direction:column;
  width:100%;
  max-width:560px;
  min-height:calc(100% + 1px);   /* всегда прокручивается — «резинка» работает */
  margin:0 auto;
  padding:calc(12px + var(--tg-content-safe-area-inset-top,0px)) var(--gap) calc(28px + var(--safe-bottom));
}

/* ---------------- Карточки и строки ---------------- */
.card{
  --sep-inset:16px;
  flex:0 0 auto;
  border-radius:var(--radius-card);
  background:var(--card);
  color:var(--card-text);
  box-shadow:var(--shadow);
  overflow:hidden;
}
.card + .card{margin-top:20px}
.card--icons{--sep-inset:60px}

.row{
  position:relative;
  display:flex;
  align-items:center;
  gap:12px;
  width:100%;
  min-height:52px;
  margin:0;
  padding:7px 16px;
  border:0;
  background:none;
  text-align:left;
  cursor:pointer;
  user-select:none;
  -webkit-user-select:none;
  -webkit-appearance:none;
  appearance:none;
}
.row+.row::before{
  content:"";
  position:absolute;
  top:0;
  left:var(--sep-inset);
  right:0;
  height:1px;
  background:var(--sep);
  transform:scaleY(.5);
}
.row:active{background:color-mix(in srgb,var(--card-text) 7%,transparent)}
div.row{cursor:default}
div.row:active{background:none}
.row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

.row__label{
  flex:1 1 auto;
  min-width:0;
  font-size:17px;
  letter-spacing:-.4px;
}
.row__label--accent{color:var(--accent)}
.row__text{flex:1 1 auto;min-width:0}
.row__text .row__label{display:block}
.row__sub{
  display:block;
  margin-top:1px;
  font-size:13px;
  line-height:1.3;
  color:var(--hint);
}
.row__value{
  flex:0 1 auto;
  min-width:0;
  max-width:55%;
  overflow:hidden;
  white-space:nowrap;
  text-overflow:ellipsis;
  font-size:17px;
  letter-spacing:-.4px;
  color:var(--value);
}

/* стрелка «›» */
.row--link::after{
  content:"";
  flex:0 0 auto;
  width:7px;
  height:7px;
  margin-left:2px;
  border-right:2px solid var(--chevron);
  border-bottom:2px solid var(--chevron);
  border-radius:1px;
  transform:rotate(-45deg);
}

/* галочка выбранного варианта */
.row__check{
  flex:0 0 auto;
  width:20px;
  height:20px;
  color:var(--accent);
  fill:none;
  visibility:hidden;
}
.row.is-selected .row__check{visibility:visible}

/* цветной квадрат с иконкой — как в Настройках iOS */
.row__icon{
  flex:0 0 auto;
  display:grid;
  place-items:center;
  width:30px;
  height:30px;
  margin-right:2px;
  border-radius:8px;
  background:
    linear-gradient(180deg,rgba(255,255,255,.24),rgba(255,255,255,0) 70%),
    var(--icon-bg,#8e8e93);
  box-shadow:inset 0 .5px 0 rgba(255,255,255,.3);
  color:#fff;
}
.row__icon svg{width:19px;height:19px;display:block;fill:currentColor}
.row__icon img{width:100%;height:100%;border-radius:inherit;object-fit:cover}

/* строка-выбор с невидимым системным <select> поверх (родное окно iOS) */
.row__select{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  opacity:0;
  font-size:16px;
  cursor:pointer;
  -webkit-appearance:none;
  appearance:none;
}

/* ---------------- Переключатель ---------------- */
.row__input{
  position:absolute;
  opacity:0;
  width:0;
  height:0;
  margin:0;
  pointer-events:none;
}
.switch{
  flex:0 0 auto;
  position:relative;
  width:63px;
  height:28px;
  border-radius:14px;
  background:var(--switch-off);
  transition:background .25s ease;
}
.switch__knob{
  position:absolute;
  top:2px;
  left:2px;
  width:37px;
  height:24px;
  border-radius:12px;
  background:#fff;
  box-shadow:0 2px 6px rgba(0,0,0,.18),0 0 0 .5px rgba(0,0,0,.04);
  transition:transform .3s cubic-bezier(.3,1.3,.5,1);
}
.row__input:checked~.switch{background:var(--green)}
.row__input:checked~.switch .switch__knob{transform:translateX(22px)}
.row__input:focus-visible~.switch{outline:2px solid var(--accent);outline-offset:2px}

/* ---------------- Кнопки ---------------- */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  min-height:44px;
  padding:0 18px;
  border:0;
  border-radius:999px;
  font-size:16px;
  font-weight:600;
  line-height:1;
  letter-spacing:-.3px;
  cursor:pointer;
  transition:transform .15s ease,filter .15s ease,opacity .2s ease;
  -webkit-appearance:none;
  appearance:none;
}
.btn:active{transform:scale(.97);filter:brightness(.94)}
.btn:disabled{opacity:.4;pointer-events:none}
.btn svg{
  width:18px;
  height:18px;
  fill:none;
  stroke:currentColor;
  stroke-width:2;
  stroke-linecap:round;
  stroke-linejoin:round;
}
.btn--primary{background:var(--accent);color:#fff}
.btn--secondary{background:var(--fill);color:var(--accent)}
.btn--large{width:100%;min-height:52px;font-size:17px}
.btn .spinner{color:currentColor}

/* текстовая кнопка-ссылка */
.link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:40px;
  padding:0 10px;
  border:0;
  background:none;
  color:var(--accent);
  font-size:16px;
  font-weight:500;
  letter-spacing:-.3px;
  cursor:pointer;
}
.link:active{opacity:.5}

/* ---------------- Подписи ---------------- */
.section-title{
  display:flex;
  justify-content:space-between;
  gap:12px;
  margin:24px 16px 7px;
  font-size:13px;
  line-height:1.3;
  color:var(--caption);
  text-transform:uppercase;
  letter-spacing:.1px;
}
.section-title + .card{margin-top:0}
.footnote{
  margin:8px 16px 0;
  font-size:13px;
  line-height:1.38;
  color:var(--caption);
}
.footnote + .card,.footnote + .section-title{margin-top:24px}

/* ---------------- Тост ---------------- */
.toast{
  position:fixed;
  left:50%;
  bottom:calc(var(--toast-bottom,24px) + var(--safe-bottom));
  z-index:40;
  display:flex;
  align-items:center;
  gap:8px;
  max-width:calc(100% - 32px);
  padding:11px 18px;
  border-radius:999px;
  background:var(--glass);
  color:var(--card-text);
  box-shadow:var(--glass-shadow),inset 0 0 0 .5px var(--glass-edge);
  font-size:15px;
  font-weight:500;
  white-space:nowrap;
  pointer-events:none;
  opacity:0;
  translate:-50% 12px;
  scale:.96;
  transition:opacity .22s ease,translate .32s cubic-bezier(.3,1.3,.5,1),scale .32s cubic-bezier(.3,1.3,.5,1);
  -webkit-backdrop-filter:blur(18px) saturate(180%);
  backdrop-filter:blur(18px) saturate(180%);
}
.toast.is-shown{opacity:1;translate:-50% 0;scale:1}
.toast svg{width:18px;height:18px;flex:0 0 auto;fill:currentColor}
.toast .toast__ok{color:var(--green)}
.toast .toast__soon{color:var(--accent)}

/* ---------------- Аватарка ---------------- */
.ava{
  --ava:32px;
  flex:0 0 auto;
  display:grid;
  place-items:center;
  width:var(--ava);
  height:var(--ava);
  border-radius:50%;
  background:linear-gradient(180deg,var(--a1,#98989f),var(--a2,#7c7c84));
  color:#fff;
  font-size:calc(var(--ava) * .4);
  font-weight:600;
  letter-spacing:.2px;
  overflow:hidden;
}
.ava > *{grid-area:1/1}
.ava img{width:100%;height:100%;object-fit:cover}

/* ---------------- Загрузка ---------------- */
.spinner{
  flex:0 0 auto;
  display:inline-grid;
  place-items:center;
  width:20px;
  height:20px;
  color:var(--value);
}
.spinner svg{width:100%;height:100%;animation:spinner-turn .8s steps(8) infinite}
@keyframes spinner-turn{to{transform:rotate(360deg)}}
.is-loading .row__value,.is-loading .row__check{display:none}

/* смена темы: цвета плавно перетекают */
html.theme-switching,
html.theme-switching *,
html.theme-switching *::before,
html.theme-switching *::after{
  transition:background-color .35s ease,color .35s ease,border-color .35s ease,fill .35s ease !important;
}

@media (prefers-reduced-motion:reduce){
  *{transition-duration:0s!important;animation-duration:0s!important}
  .spinner svg{animation-duration:.8s!important}
}
