/* =====================================================================
   Motivational poster maker — оформление рабочей области.
   Значения ниже — переменные-дефолты; рабочие проставляются на лету по выбранному стилю.
   ===================================================================== */

.mot {
    --mot-accent:        #1f6fb2;
    --mot-accent-hover:  #185d97;
    --mot-accent-soft:   #eaf3fb;
    --mot-stage-bg:      #f1f5f9;
    --mot-card-border:   #e6e8ec;
    --mot-line:          #dde1e8;
    --mot-text:          #1f2733;
    --mot-muted:         #6b7480;
    --mot-btn-outline:   #d7dbe2;
    --mot-radius:        16px;
    --mot-radius-sm:     12px;
    --mot-radius-xs:     10px;

    /* постер: палитра и геометрия — дефолты */
    --mot-bg:          #000;
    --mot-frame-color: #fff;
    --mot-txt-color:   #fff;
    --mot-sub-color:   #fff;
    --mot-title-font:  'Times New Roman', Times, serif;
    --mot-sub-font:    Arial, Helvetica, sans-serif;
    --mot-track:       0;
    --mot-dark:        0;
    --mot-grad:        none;
    --mot-vig:         0;
    --mot-k:           1;
    --mot-img-w:       540px;
    --mot-img-h:       360px;
    --mot-border:      3px;
    --mot-pad:         4px;
    --mot-side:        46px;
    --mot-top:         34px;
    --mot-gap-title:   16px;
    --mot-gap-sub:     6px;
    --mot-bottom:      22px;
    --mot-full-pad:    26px;
    --mot-title-size:  68px;
    --mot-sub-size:    25px;
    --mot-shadow:      none;

    max-width: 880px;
    margin-inline: auto;
    background: #fff;
    border: 1px solid var(--mot-card-border);
    border-radius: var(--mot-radius);
    box-shadow: 0 2px 14px rgba(20, 30, 60, .06);
    padding: 24px;
    color: var(--mot-text);
    font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
    line-height: 1.45;
}

.mot *,
.mot *::before,
.mot *::after { box-sizing: border-box; }

/* Фокус: без браузерного обрамления при клике, видимый — только с клавиатуры */
.mot__frame:focus, .mot__title:focus, .mot__sub:focus, .mot__lock:focus,
.mot__range:focus, .mot__size-field input:focus, .mot__choose:focus,
.mot__style:focus, .mot__toggle input:focus, .mot__label:focus,
.mot select:focus, .mot input[type="color"]:focus, .mot__more:focus { outline: none; }
.mot__frame:focus-visible, .mot__lock:focus-visible, .mot__style:focus-visible,
.mot__range:focus-visible, .mot__size-field input:focus-visible,
.mot__toggle input:focus-visible, .mot__label:focus-visible,
.mot select:focus-visible, .mot__more:focus-visible {
    outline: 2px solid var(--mot-accent); outline-offset: 2px;
}

/* ---------------- общие кнопки ---------------- */
.mot .btn { display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
            font-weight: 600; border-radius: var(--mot-radius-xs); border: 1px solid transparent;
            padding: .6rem 1.05rem; font-size: .95rem; line-height: 1.2; }
.mot .btn i { font-size: 1.05em; line-height: 0; }
.mot__btn-sm { padding: .42rem .7rem; font-size: .86rem; }
.mot__btn-primary { background: var(--mot-accent); color: #fff; border-color: var(--mot-accent); }
.mot__btn-primary:hover,
.mot__btn-primary:focus-visible { background: var(--mot-accent-hover); color: #fff; border-color: var(--mot-accent-hover); }
.mot__btn-outline { background: #fff; color: var(--mot-text); border-color: var(--mot-btn-outline); }
.mot__btn-outline:hover,
.mot__btn-outline:focus-visible { background: #f4f8fc; color: var(--mot-text); border-color: #c7ccd6; }

.mot__cap { font-size: .92rem; font-weight: 700; }

/* =====================================================================
   СЦЕНА И ПОСТЕР
   ===================================================================== */
.mot__stage { background: var(--mot-stage-bg); border-radius: var(--mot-radius-sm);
              padding: 18px; display: flex; justify-content: center; overflow-x: auto; }

.mot__poster {
    background: var(--mot-bg);
    text-align: center;
    width: max-content;
    max-width: 100%;
    box-shadow: 0 2px 12px rgba(20, 30, 60, .18);
    user-select: none;            /* выделение только внутри редактируемых полей */
    padding: var(--mot-top) var(--mot-side) var(--mot-bottom);
}
/* раскладка «фото на весь постер»: полей нет, текст ложится поверх кадра */
.mot[data-layout="full"] .mot__poster { padding: 0; }

.mot__media { position: relative; display: inline-block; vertical-align: top; max-width: 100%; }
.mot[data-layout="full"] .mot__media { display: block; }

/* Рамка с фото (она же зона перетаскивания); зазор внутри — цвет поля */
/* width: max-content обязателен: без него рамка растягивалась на всю ширину постера,
   и стоило заголовку стать шире кадра, как фото прижималось к левому краю */
.mot__frame { position: relative; display: block; width: max-content; max-width: 100%;
              margin-inline: auto;
              border: var(--mot-border) var(--mot-frame-style, solid) var(--mot-frame-color);
              padding: var(--mot-pad); cursor: pointer; line-height: 0; }
.mot__img { display: block; width: var(--mot-img-w); height: var(--mot-img-h); object-fit: fill; }
.mot[data-layout="full"] .mot__img { object-fit: cover; }

/* слои поверх фото: затемнение, градиент к низу, виньетка */
.mot__layer { position: absolute; inset: var(--mot-border); pointer-events: none; }
.mot__layer--dark { background: rgba(0, 0, 0, var(--mot-dark)); }
.mot__layer--grad { background: var(--mot-grad); }
.mot__layer--vig  { background: radial-gradient(ellipse at 50% 50%,
                    rgba(0,0,0,0) 42%, rgba(0,0,0,var(--mot-vig)) 100%); }

/* Оверлей загрузки — поверх фото, пока пользователь не выбрал своё */
.mot__upload { position: absolute; inset: 0; display: flex; flex-direction: column;
               align-items: center; justify-content: center; gap: .3rem;
               background: rgba(6, 10, 18, .58); color: #fff; text-align: center;
               padding: 12px; cursor: pointer; line-height: 1.3; z-index: 4; }
.mot[data-has-image="1"] .mot__upload { display: none; }
.mot__upload-icon { font-size: 2rem; line-height: 1; margin-bottom: .1rem; }
.mot__upload-title { font-size: 1rem; font-weight: 600; }
.mot__upload-or { font-size: .85rem; opacity: .85; margin-bottom: .25rem; }
.mot__frame.is-drag { outline: 3px dashed #fff; outline-offset: 3px; }

/* ---------------- базовые строки ----------------
   Строки разложены колонкой ФЛЕКСОМ, а зазор между ними задан отступом самой строки,
   а не полем текста. Иначе отступ пустой подписи схлопывался и «вылезал» под постером:
   стоило спрятать подсказку — и поле подрастало снизу на 6px (замер: 22 против 28).
   Проверяется `mot_height_probe.js`.
   z-index выше приглашения «выбери фото»: иначе в стилях с текстом ПОВЕРХ кадра
   строки оказывались под оверлеем, и в них нельзя было кликнуть, пока нет фото. */
.mot__texts { position: relative; z-index: 6; display: flex; flex-direction: column; }
/* текст поверх кадра: прижимается к верху / центру / низу фото */
.mot[data-place="top"] .mot__texts,
.mot[data-place="center"] .mot__texts,
.mot[data-place="bottom"] .mot__texts {
    position: absolute; left: 0; right: 0;
    padding: 0 var(--mot-full-pad);
}
.mot[data-place="top"] .mot__texts    { top: var(--mot-full-pad); }
.mot[data-place="center"] .mot__texts { top: 50%; transform: translateY(-50%); }
.mot[data-place="bottom"] .mot__texts { bottom: var(--mot-full-pad); }

.mot__title, .mot__sub {
    color: var(--mot-txt-color);
    width: 100%;
    margin: 0 auto;
    text-align: center;
    white-space: pre-wrap;
    overflow-wrap: break-word;
    word-break: break-word;
    cursor: text;
    line-height: 1.05;
    text-shadow: var(--mot-shadow);
}
.mot__title {
    font-family: var(--mot-title-font);
    font-size: var(--mot-title-size);
    letter-spacing: calc(var(--mot-track) * 1em);
    min-height: calc(var(--mot-title-size) * 1.05);
}
/* отступ от фото задаёт СТРОКА, а не поле текста: у поля он схлопывался по-разному,
   когда строка пуста и когда в ней есть символ, и подпись прыгала на эти же 16px */
.mot[data-place="below"] #mot-line-title { margin-top: var(--mot-gap-title); }
.mot.is-caps .mot__title { text-transform: uppercase; }
.mot__sub {
    color: var(--mot-sub-color);
    font-family: var(--mot-sub-font);
    font-size: var(--mot-sub-size);
    line-height: 1.2;
    min-height: calc(var(--mot-sub-size) * 1.2);
}
#mot-line-sub { margin-top: var(--mot-gap-sub); }
/* выделенное слово: цвет берётся из стиля, править может пользователь */
.mot__accent { color: var(--mot-accent-color, #ffd75e); }

/* Плейсхолдер — НЕ псевдоэлемент, а свой элемент: только так крестик встаёт
   в правый верхний угол САМОГО текста подсказки, а не у края постера.
   Показывается, пока строка пуста и подсказку не погасили (класс ставит движок). */
.mot__line { position: relative; }
.mot__ph {
    position: absolute; left: 50%; top: 0; transform: translateX(-50%);
    display: none; max-width: 100%;
    /* цвет — как у текста постера: подсказка стоит РЯДОМ со строкой, а не внутри неё,
       и без этого наследовала бы тёмный цвет панели инструмента */
    color: var(--mot-txt-color);
    font-style: italic; pointer-events: none; white-space: pre-wrap;
}
/* приглушён только САМ текст подсказки: будь прозрачность на контейнере,
   вместе с ней тускнел бы и крестик, и его было бы не разглядеть */
.mot__ph-text { opacity: .45; }
.mot__line.is-ph .mot__ph { display: inline-block; }
#mot-ph-title { font-family: var(--mot-title-font); font-size: var(--mot-title-size);
                line-height: 1.05; letter-spacing: calc(var(--mot-track) * 1em); }
#mot-ph-sub   { font-family: var(--mot-sub-font); font-size: var(--mot-sub-size); line-height: 1.2; }
.mot.is-caps #mot-ph-title { text-transform: uppercase; }

/* Крестик показывается по наведению мышью, а на телефоне — когда в строку тапнули
   (класс `is-focus` ставит движок). И только пока строка пуста: набрал первый символ —
   подсказка вместе с крестиком ушла. Размер НЕ зависит от кегля: при заголовке в 68px
   он иначе раздувался в кружок с ладонь, а у подписи налезал на текст. */
.mot__line.is-ph .mot__ph-x { display: none; }
@media (hover: hover) {
    .mot__line.is-ph:hover .mot__ph-x { display: inline-flex; }
}
@media (hover: none) {
    .mot__line.is-ph.is-focus .mot__ph-x { display: inline-flex; }
}
.mot__ph-x {
    position: absolute; top: 0; right: -22px;
    display: inline-flex; align-items: center; justify-content: center;
    width: 18px; height: 18px;
    padding: 0; line-height: 1; pointer-events: auto;
    font-family: system-ui, Arial, sans-serif; font-size: 14px; font-style: normal;
    /* цвет берём у текста постера, а не наследуем от панели: иначе на чёрном поле
       крестик оказывался тёмным на сером и не читался */
    color: var(--mot-txt-color); opacity: .95;
    background: rgba(128, 128, 128, .34);
    border: 1px solid rgba(128, 128, 128, .4);
    border-radius: 50%; cursor: pointer;
}
.mot__ph-x:hover, .mot__ph-x:focus-visible { opacity: 1; background: rgba(128, 128, 128, .6); }

/* ---------------- свободные надписи ---------------- */
.mot__labels { position: absolute; inset: 0; z-index: 5; pointer-events: none; }
.mot__label {
    position: absolute;
    transform: translate(-50%, -50%);
    max-width: 92%;
    padding: 2px 4px;
    color: #fff;
    font-family: var(--mot-sub-font);
    font-size: 28px;
    line-height: 1.1;
    white-space: pre-wrap;
    overflow-wrap: break-word;
    cursor: move;
    pointer-events: auto;
    text-shadow: var(--mot-shadow);
    border: 1px dashed transparent;
}
.mot__label.is-active { border-color: rgba(255, 255, 255, .7); }
.mot__label:empty::before { content: attr(data-ph); opacity: .6; }

/* мягкая подсказка о длине строки — не ошибка, поэтому без красного */
.mot__hint { margin: .6rem 0 0; text-align: center; font-size: .82rem; color: var(--mot-muted); }

/* =====================================================================
   ВЫБОР СТИЛЯ
   ===================================================================== */
.mot__styles { margin-top: 1.1rem; }
.mot__styles-head { display: flex; align-items: center; justify-content: space-between;
                    gap: .6rem; margin-bottom: .5rem; }
.mot__more { background: none; border: 0; padding: .15rem .1rem; cursor: pointer;
             color: var(--mot-accent); font-size: .88rem; font-weight: 600;
             display: inline-flex; align-items: center; gap: .3rem; }
.mot__more i { transition: transform .15s ease; }
.mot__more[aria-expanded="true"] i { transform: rotate(180deg); }

.mot__styles-row { display: flex; flex-wrap: wrap; gap: .55rem; }
.mot__styles-row--extra { margin-top: .55rem; padding-top: .55rem;
                          border-top: 1px dashed var(--mot-line); }

.mot__style { width: 76px; background: none; border: 0; padding: 0; cursor: pointer;
              display: flex; flex-direction: column; align-items: center; gap: .25rem; }
.mot__style-pv { position: relative; display: block; width: 100%; aspect-ratio: 3 / 4;
                 background: var(--pv-bg); border-radius: 6px;
                 border: 2px solid transparent; box-shadow: 0 1px 4px rgba(20,30,60,.18);
                 overflow: hidden; }
/* «фото» в превью: у стиля с кадром на весь постер занимает всю карточку */
.mot__style-pv-frame { position: absolute; left: var(--pv-photo-inset); right: var(--pv-photo-inset);
                       top: var(--pv-photo-top); height: var(--pv-photo-h);
                       border: var(--pv-frame-w) solid var(--pv-frame);
                       background: linear-gradient(160deg, rgba(255,255,255,.30), rgba(255,255,255,.10)); }
.mot__style-pv-t { position: absolute; left: 16%; right: 16%; top: var(--pv-t-top); height: 14%;
                   background: var(--pv-title); border-radius: 1px; }
.mot__style-pv-s { position: absolute; left: 26%; right: 26%; top: var(--pv-s-top); height: 7%;
                   background: var(--pv-sub); border-radius: 1px; opacity: .8; }
/* выбранный пресет: кольцо снаружи карточки — оно видно и на чёрном поле, и на синем,
   в отличие от рамки по краю, которая сливалась с тёмными превью */
.mot__style.is-on .mot__style-pv {
    border-color: #fff;
    box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--mot-accent), 0 1px 6px rgba(20, 30, 60, .25);
}
.mot__style-name { font-size: .74rem; color: var(--mot-muted); line-height: 1.15;
                   text-align: center; }
.mot__style.is-on .mot__style-name { color: var(--mot-text); font-weight: 600; }

/* =====================================================================
   ТОНКАЯ НАСТРОЙКА
   ===================================================================== */
.mot__tune { display: flex; flex-wrap: wrap; gap: .9rem 1.6rem; margin-top: 1.1rem;
             padding-top: 1rem; border-top: 1px solid var(--mot-line); }
.mot__tune-group { display: flex; align-items: flex-end; flex-wrap: wrap; gap: .6rem; }
.mot__tune-group > .mot__cap { flex: 0 0 100%; margin-bottom: -.15rem; }
/* переключатели текста занимают свою строку — иначе следующая группа
   («Photo») подтягивается к ним и её заголовок повисает посреди строки */
.mot__tune-group--switches { align-items: center; gap: .9rem; flex: 1 0 100%; }

.mot__field { display: flex; flex-direction: column; gap: .2rem; margin: 0; }
.mot__field > span { font-size: .78rem; color: var(--mot-muted); }
.mot__field input[type="color"] { width: 44px; height: 38px; padding: 3px;
                                  border: 1px solid var(--mot-btn-outline);
                                  border-radius: var(--mot-radius-xs); background: #fff; }
.mot__field--num input { width: 4.6em; border: 1px solid var(--mot-btn-outline);
                         border-radius: var(--mot-radius-xs); padding: .4rem .5rem;
                         font-size: .95rem; font-weight: 600; text-align: center; }
/* ползунок внутри поля-колонки: тянется по ширине поля, а не по остатку строки */
.mot__field--range { width: 150px; }
.mot__field--range .mot__range { flex: none; width: 100%; align-self: stretch; margin-bottom: .5rem; }
.mot__field-btn { align-self: flex-end; }
.mot__field select { border: 1px solid var(--mot-btn-outline); border-radius: var(--mot-radius-xs);
                     padding: .45rem 1.9rem .45rem .55rem; font-size: .9rem; background-color: #fff; }

/* выбор начертания рамки: в списке показан её УГОЛОК, а не слово —
   так сразу видно, на что переключаешься */
.mot__fstyle-btn { padding: .34rem .5rem; }
.mot__fstyle-menu .dropdown-item { display: flex; align-items: center; gap: .55rem;
                                   font-size: .9rem; }
.mot__corner { display: inline-block; width: 20px; height: 20px;
               border-width: 3px; border-style: solid;
               border-color: var(--mot-text) transparent transparent var(--mot-text); }

.mot__toggle { display: inline-flex; align-items: center; gap: .45rem; cursor: pointer;
               font-size: .9rem; color: var(--mot-text); margin: 0; }
.mot__toggle input { margin: 0; cursor: pointer; }
.mot__toggle input:checked { background-color: var(--mot-accent); border-color: var(--mot-accent); }

/* размер фото — десктоп */
.mot__sizes { display: flex; align-items: flex-end; flex-wrap: wrap; gap: .7rem;
              margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--mot-line); }
.mot__sizes > .mot__cap { flex: 0 0 100%; margin-bottom: -.15rem; }
.mot__size-field { display: flex; flex-direction: column; gap: .2rem; }
.mot__size-field label { font-size: .78rem; color: var(--mot-muted); }
.mot__size-field input { width: 5.2em; border: 1px solid var(--mot-btn-outline);
                         border-radius: var(--mot-radius-xs); padding: .4rem .55rem;
                         font-size: .95rem; font-weight: 600; color: var(--mot-text);
                         background: #fff; text-align: center; }
.mot__size-field input::-webkit-outer-spin-button,
.mot__size-field input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.mot__size-field input { -moz-appearance: textfield; }

.mot__lock { align-self: flex-end; margin-bottom: .12rem; background: #fff; cursor: pointer;
             border: 1px solid var(--mot-btn-outline); border-radius: var(--mot-radius-xs);
             width: 38px; height: 38px; color: var(--mot-muted); font-size: 1.2rem;
             display: inline-flex; align-items: center; justify-content: center; }
.mot__lock:hover { border-color: #c2c8d2; color: var(--mot-text); }
.mot__lock.is-on { background: var(--mot-accent-soft); border-color: var(--mot-accent);
                   color: var(--mot-accent); }

.mot__range { flex: 1 1 140px; min-width: 110px; align-self: center; margin-bottom: .35rem;
              -webkit-appearance: none; appearance: none; height: 6px; border-radius: 999px;
              background: var(--mot-line); cursor: pointer; }
.mot__range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none;
              width: 18px; height: 18px; border-radius: 50%; background: var(--mot-accent);
              border: 2px solid #fff; box-shadow: 0 1px 4px rgba(20,30,60,.3); cursor: pointer; }
.mot__range::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%;
              background: var(--mot-accent); border: 2px solid #fff;
              box-shadow: 0 1px 4px rgba(20,30,60,.3); cursor: pointer; }

/* главные действия */
.mot__actions { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem;
                margin-top: 1.1rem; padding-top: 1rem; border-top: 1px solid var(--mot-line); }
.mot__download { display: inline-flex; flex: 0 0 auto; }
.mot__dl-main, .mot__dl-split { border-radius: 0; }
.mot__dl-main { border-top-left-radius: var(--mot-radius-xs); border-bottom-left-radius: var(--mot-radius-xs); }
.mot__dl-split { border-top-right-radius: var(--mot-radius-xs); border-bottom-right-radius: var(--mot-radius-xs);
                 border-left: 1px solid rgba(255,255,255,.35); }
.mot__dl-menu { font-size: .92rem; }
.mot__copy[disabled] { pointer-events: none; opacity: .5; }

/* панель выбранной надписи */
.mot__label-bar { display: flex; align-items: flex-end; flex-wrap: wrap; gap: .7rem;
                  margin-top: .9rem; padding: .8rem; border: 1px solid var(--mot-line);
                  border-radius: var(--mot-radius-sm); background: #f8fafc; }
.mot__label-bar > .mot__cap { flex: 0 0 100%; }

.mot__formats { text-align: center; color: var(--mot-muted); font-size: .82rem; margin: .9rem 0 0; }
.mot__formats-dot { margin: 0 .4rem; }

/* тост «скопировано» / ошибка */
.mot__toast { position: fixed; left: 50%; bottom: 28px; transform: translateX(-50%);
              background: #1f2733; color: #fff; font-size: .88rem; padding: .55rem .95rem;
              border-radius: 999px; box-shadow: 0 6px 20px rgba(0,0,0,.2); z-index: 1085;
              max-width: 90vw; text-align: center; }
.mot__toast.is-error { background: #b21e1f; }

/* =====================================================================
   Узкие экраны: размер фото скрыт (вписывается сам), действия — в столбик.
   ===================================================================== */
@media (max-width: 575px) {
    .mot { padding: 14px; }
    .mot__stage { padding: 10px; }
    .mot__sizes { display: none; }
    .mot__tune { gap: .8rem 1.1rem; }
    .mot__style { width: 64px; }
    .mot__download { flex: 1 0 100%; display: flex; }
    .mot__dl-main { flex: 1 1 auto; }
    .mot__actions .mot__btn-outline { flex: 1 1 0; white-space: nowrap; }
}

@media (max-width: 360px) {
    .mot__actions .mot__btn-outline { font-size: .88rem; padding: .55rem .6rem; }
    .mot__toggle { font-size: .85rem; }
    .mot__style { width: 58px; }
}
