/* ============================================================
   Uploader design system (redesign) — neutral, warm, themeable.
   Layered over fileuploader2.css; legacy hooks (ids/classes) preserved.
   Partner theming: override tokens on #modalUploader, e.g.
   #modalUploader{--upl-acc:#7c3aed;--upl-acc-soft:#f1ecfe}
   ============================================================ */

#modalUploader{
    --upl-acc:#2f7fd1;
    --upl-acc-contrast:#ffffff;
    --upl-acc-soft:#eaf2fb;
    --upl-acc-ink:#1b5a92;
    --upl-surface:#ffffff;
    --upl-canvas:#faf9f7;
    --upl-track:#f1f0ed;
    --upl-ink:#1f2328;
    --upl-ink-2:#5b6270;
    --upl-muted:#9aa0a8;
    --upl-line:#ededea;
    --upl-line-strong:#dcdad5;
    --upl-radius:10px;
    --upl-radius-lg:16px;
    --upl-radius-xl:18px;
    /* единая fluid-единица масштаба модалки: растёт с шириной вьюпорта в комфортных границах */
    --upl-u:clamp(15px, 0.85vw, 24px);
}

/* ---------- modal shell ---------- */
#modalUploader .modal-dialog{width:min(calc(var(--upl-u) * 48), 96vw);max-width:none;}
#modalUploader .modal-content{border:1px solid var(--upl-line);border-radius:var(--upl-radius-xl);box-shadow:0 24px 70px -24px rgba(20,24,31,.28);overflow:hidden;}
#modalUploader .modal-header{border-bottom:1px solid var(--upl-line);position:relative;text-align:center;padding-bottom:12px;}
#modalUploader .modal-title h3{color:var(--upl-ink);font-weight:500;font-size:calc(var(--upl-u) * 1.37);letter-spacing:-.01em;margin:0;}
#modalUploader .modal-header .close{position:absolute;right:16px;top:14px;opacity:.5;font-weight:400;}
#modalUploader .modal-body{background:var(--upl-surface);}

/* settings (format/paper) — centered chips */
#modalUploader .full-interface{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px;margin-top:8px;}
#modalUploader .full-interface h4{font-size:calc(var(--upl-u) * 0.94);color:var(--upl-muted);font-weight:400;margin:0;display:inline;}
#modalUploader .full-interface .dropdown > .btn.dropdown-toggle{border:1px solid var(--upl-line);background:var(--upl-surface);border-radius:999px;padding:7px 15px;font-size:calc(var(--upl-u) * 0.94);color:var(--upl-ink-2);box-shadow:none;height:auto;line-height:1.4;}
#modalUploader .full-interface .dropdown > .btn.dropdown-toggle:hover{border-color:var(--upl-line-strong);}

/* ---------- source switcher (segmented, from .fileuploader-nav-tabs) ---------- */
/* display сегмента БЕЗ !important: на время загрузки легаси прячет вкладки jQuery-hide
   (upload-start) — иначе при «Готовим фото» можно уйти в источники и зашумить экран */
#fullUploader > div:first-child{text-align:center;}
.fileuploader-nav-tabs{display:inline-flex;width:auto !important;background:var(--upl-track);border-radius:12px;padding:3px;gap:2px;border:0;margin:6px 0 16px;}
.fileuploader-nav-tabs > li{width:auto !important;float:none;background:transparent;border:0;margin:0;text-align:center;}
.fileuploader-nav-tabs > li > a{border:0 !important;background:transparent !important;border-radius:9px !important;color:var(--upl-ink-2) !important;font-size:var(--upl-u);font-weight:400;padding:9px 18px !important;margin:0;line-height:1.3;outline:none;}
.fileuploader-nav-tabs > li > a:hover,.fileuploader-nav-tabs > li > a:focus{color:var(--upl-ink) !important;background:transparent !important;outline:none;}
.fileuploader-nav-tabs > li.active > a,.fileuploader-nav-tabs > li.active > a:hover,.fileuploader-nav-tabs > li.active > a:focus{background:var(--upl-surface) !important;color:var(--upl-acc) !important;font-weight:400;box-shadow:0 1px 3px rgba(20,24,31,.1);border:0 !important;}
.fileuploader-nav-tabs:has(> li:only-child){display:none !important;}

/* ---------- dropzone canvas (#file-uploader) ---------- */
#file-uploader.b-fileup__comp{box-sizing:border-box;display:flex !important;flex-direction:column;align-items:center;justify-content:center;height:auto !important;min-height:calc(var(--upl-u) * 14);min-width:0 !important;background:var(--upl-canvas);border:2px dashed var(--upl-line-strong);border-radius:var(--upl-radius-lg);padding:calc(var(--upl-u) * 1.4) 26px;text-align:center;overflow:visible;}
.b-fileup__comp__text2{text-align:center;color:var(--upl-ink-2);}
.b-fileup__comp__text2 .upl-drop-ic{width:calc(var(--upl-u) * 3.4);height:calc(var(--upl-u) * 3.4);border-radius:50%;background:var(--upl-acc-soft);color:var(--upl-acc);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;cursor:pointer;transition:background .15s;}
.b-fileup__comp__text2 .upl-drop-ic:hover{background:#dcebfb;}
.b-fileup__comp__text2 .upl-drop-t{font-size:calc(var(--upl-u) * 1.25);font-weight:500;color:var(--upl-ink);}
.b-fileup__comp__text2 .upl-drop-ic svg{display:block;width:calc(var(--upl-u) * 1.55);height:calc(var(--upl-u) * 1.55);}
.b-fileup__comp__text2 #upload-button{font-size:calc(var(--upl-u) * 1.25);font-weight:500;cursor:pointer;}
.b-fileup__comp__text2 #upload-button,.b-fileup__comp__text2 #upload-button:link,.b-fileup__comp__text2 #upload-button:visited,.b-fileup__comp__text2 #upload-button:hover{color:var(--upl-acc);text-decoration:none;border:0;}
.b-fileup__comp__text2 .upl-drop-sub{color:var(--upl-muted);font-size:calc(var(--upl-u) * 0.94);margin-top:6px;letter-spacing:.02em;}

/* other source panels — calm surface, not dashed */
#vkFileUploader.b-fileup__comp,#fbFileUploader.b-fileup__comp,#instFileUploader.b-fileup__comp,#yandexDiskUploaderMd.b-fileup__comp{background:var(--upl-canvas);border:1px solid var(--upl-line);border-radius:var(--upl-radius-lg);height:auto !important;min-height:220px;padding:24px;}

/* ---------- hint blocks ---------- */
.b-uploadhints{margin-top:14px;}
.b-uploadhint{background:var(--upl-surface);border:1px solid var(--upl-line);border-radius:14px;padding:12px 14px;margin:8px auto 0;max-width:560px;text-align:left;}
.b-uploadhint__title{font-weight:500;color:var(--upl-ink);margin-bottom:8px;font-size:calc(var(--upl-u) * 0.94);}
.b-uploadhint__list{list-style:none;margin:0;padding:0;}
.b-uploadhint__item{display:flex;gap:11px;align-items:flex-start;margin:10px 0;font-size:calc(var(--upl-u) * 0.94);line-height:1.5;color:var(--upl-ink-2);}
.b-uploadhint__icon{color:var(--upl-acc);flex:none;font-size:16px;line-height:1;margin-top:1px;display:inline-flex;width:20px;justify-content:center;}
.b-uploadhint__icon svg{display:block;width:20px;height:20px;}

/* ---------- source lists ---------- */
div.b-upfile__soc__list{border:1px solid var(--upl-line);border-radius:var(--upl-radius);background:var(--upl-surface);height:auto;max-height:220px;overflow:auto;padding:4px;}
.b-upfile__soc__list li a{display:block;padding:9px 12px;color:var(--upl-ink-2);text-decoration:none;border:0;border-radius:8px;}
.b-upfile__soc__list li a:hover{background:var(--upl-track);color:var(--upl-ink);}
.b-upfile__soc__list li.active a,.b-upfile__soc__list li.active>a{background:var(--upl-acc-soft) !important;color:var(--upl-acc) !important;font-weight:500;border:0 !important;}
.b-fileup__ya__title{color:var(--upl-ink);}

/* ---------- inputs ---------- */
#modalUploader input[type="text"]{background:var(--upl-surface);border:1px solid var(--upl-line);border-radius:var(--upl-radius);box-shadow:none;height:36px;padding:0 12px;color:var(--upl-ink);}
#modalUploader input[type="text"]:focus{border-color:var(--upl-acc);outline:none;box-shadow:0 0 0 3px var(--upl-acc-soft);}
.b-fileup__ya__form input[type="text"]{vertical-align:middle;}
.b-fileup__ya__form button{margin-left:8px;}

/* ---------- buttons ---------- */
.uploader-b-form-but,.b-form-but,.b-form-but2,.b-form-but31,.b-fileup__ya__form button,.ya_disk_gallery_button{background:var(--upl-acc) !important;color:var(--upl-acc-contrast) !important;opacity:1 !important;border:0 !important;border-radius:var(--upl-radius) !important;height:auto !important;padding:calc(var(--upl-u) * 0.62) calc(var(--upl-u) * 1.05) !important;line-height:1.2;font-weight:500;font-size:calc(var(--upl-u) * 1.0);box-shadow:none;text-shadow:none;vertical-align:middle;}
.uploader-b-form-but:hover,.b-form-but:hover,.b-form-but2:hover,.b-form-but31:hover,.b-fileup__ya__form button:hover,.ya_disk_gallery_button:hover{filter:brightness(.95);}
.b-upfile__soc__buttons,.b-upfile__soc__buttons2{margin:16px 0 0 !important;text-align:center;}

/* ---------- progress ---------- */
#file-upload-progress,#mini-file-upload-progress{background:var(--upl-surface) !important;}
#modalUploader .progress{background:#eee;border-radius:99px;box-shadow:none;height:8px;}
#modalUploader .progress-bar,#modalUploader .progress-bar-success{background-color:var(--upl-acc) !important;box-shadow:none;}

/* ---------- kill legacy greens/yellows ---------- */
#modalUploader .tab-pane{background:var(--upl-surface);}
#modalUploader .modal-body,#modalUploader .miniuploader-list-panel{background:var(--upl-surface) !important;}

/* ---------- signature «Готовим фото» (#file-upload-progress) ---------- */
#file-upload-progress.upl-prep{display:block;background:var(--upl-surface) !important;border:0 !important;height:auto !important;min-width:0 !important;padding:calc(var(--upl-u) * 0.2) 0;text-align:left;}
.upl-prep__in{display:block;width:100%;text-align:left;}
.upl-prep__head{display:flex;align-items:center;gap:calc(var(--upl-u) * 0.7);}
.upl-prep__ring{width:calc(var(--upl-u) * 2);height:calc(var(--upl-u) * 2);border-radius:50%;border:3px solid var(--upl-acc-soft);border-top-color:var(--upl-acc);flex:none;animation:upl-spin 1s linear infinite;}
@keyframes upl-spin{to{transform:rotate(360deg)}}
.upl-prep__title{font-size:calc(var(--upl-u) * 0.98);font-weight:500;color:var(--upl-ink);}
.upl-prep__sub{font-size:calc(var(--upl-u) * 0.8);color:var(--upl-ink-2);margin-top:2px;}
.upl-prep__thumbs{margin:calc(var(--upl-u) * 1.1) 0 calc(var(--upl-u) * 1.0);overflow:hidden;}
.upl-prep__track{display:flex;gap:calc(var(--upl-u) * 0.6);transition:transform .6s ease;will-change:transform;}
.upl-prep__th{width:calc(var(--upl-u) * 6);height:calc(var(--upl-u) * 6);flex:none;border-radius:10px;background-color:#e9e7e2;background-size:cover;background-position:center;background-repeat:no-repeat;position:relative;overflow:hidden;}
.upl-prep__th.is-done::after{content:"";position:absolute;inset:0;background:rgba(30,158,106,.18);}
.upl-prep__th.is-done::before{content:"";position:absolute;left:50%;top:52%;width:34%;height:18%;border-left:2px solid #1d9e75;border-bottom:2px solid #1d9e75;transform:translate(-50%,-60%) rotate(-45deg);z-index:1;}
.upl-prep__th.is-load::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(47,127,209,.30) 45%,transparent 45%);}
.upl-prep__bar{height:8px;border-radius:99px;background:#eee;overflow:hidden;}
.upl-prep__bar span{display:block;height:100%;width:0;background:var(--upl-acc);border-radius:99px;transition:width .5s;}
.upl-prep__foot{display:flex;justify-content:space-between;margin-top:calc(var(--upl-u) * 0.5);font-size:calc(var(--upl-u) * 0.75);color:var(--upl-muted);}
.upl-prep__tip{display:flex;gap:10px;align-items:flex-start;background:var(--upl-acc-soft);border-radius:10px;padding:11px 12px;margin-top:calc(var(--upl-u) * 0.7);min-height:calc(var(--upl-u) * 2.6);}
.upl-prep__tip-ic{flex:none;color:var(--upl-acc);line-height:0;margin-top:1px;}
.upl-prep__tip-ic svg{width:calc(var(--upl-u) * 0.95);height:calc(var(--upl-u) * 0.95);display:block;}
.upl-prep__tip-tx{margin:0;font-size:calc(var(--upl-u) * 0.8);line-height:1.45;color:var(--upl-acc-ink);transition:opacity .3s;}
.upl-prep__dots{display:flex;gap:5px;justify-content:center;margin-top:10px;}
.upl-prep__dots b{width:6px;height:6px;border-radius:50%;background:#d7d5cf;display:inline-block;}
.upl-prep__dots b.on{background:var(--upl-acc);}
#file-upload-progress .js-error-list{margin-top:10px;color:#c0392b;font-size:calc(var(--upl-u) * 0.75);list-style:none;padding:0;}
/* строка ошибки с мини-превью не принятого файла (фидбек тестеров: имена из
   in-app браузеров нечитабельны — файл опознаётся по картинке) */
#modalUploader .js-error-list li,#modalUploader .js-mini-uploader-error-list li{
  display:flex;align-items:center;gap:8px;margin:4px 0;}
#modalUploader .upl-err-thumb{
  width:40px;height:40px;object-fit:cover;border-radius:6px;flex:none;
  box-shadow:0 0 0 1px rgba(192,57,43,.4);}

/* ---------- mobile mini panel ---------- */
#miniUploaderPanel{text-align:center;}
#miniUploaderPanel .dropdown > .btn.dropdown-toggle{border:1px solid var(--upl-line);background:var(--upl-surface);border-radius:999px;padding:8px 16px;font-size:calc(var(--upl-u) * 0.9);color:var(--upl-ink);box-shadow:none;height:auto;line-height:1.4;margin:0 4px 14px;}
#miniUploader .thumbnail{display:flex;align-items:center;justify-content:center;text-align:center;border:1px solid var(--upl-line);border-radius:var(--upl-radius-lg);background:var(--upl-surface);color:var(--upl-ink-2);min-height:calc(var(--upl-u) * 3.4);padding:calc(var(--upl-u) * 0.8) 12px;margin-bottom:10px;box-shadow:none;font-size:calc(var(--upl-u) * 0.95);font-weight:500;transition:border-color .15s,color .15s;}
#miniUploader .thumbnail:hover,#miniUploader .thumbnail:active{border-color:var(--upl-acc);color:var(--upl-ink);}
#mini-file-uploader-button.thumbnail{background:var(--upl-acc);border-color:var(--upl-acc);color:var(--upl-acc-contrast);min-height:calc(var(--upl-u) * 5);font-size:calc(var(--upl-u) * 1.1);}
#mini-file-uploader-button.thumbnail:hover,#mini-file-uploader-button.thumbnail:active{color:var(--upl-acc-contrast);border-color:var(--upl-acc);filter:brightness(.97);}
#miniUploader .b-uploadhints{margin-top:12px;}
.mini-list-items li a{border:1px solid var(--upl-line) !important;border-radius:var(--upl-radius) !important;color:var(--upl-ink-2) !important;background:var(--upl-surface);padding:11px 14px;margin-bottom:6px;font-weight:400;}
.mini-list-items li.active a{background:var(--upl-acc-soft) !important;color:var(--upl-acc) !important;border-color:var(--upl-acc) !important;}

/* ---------- мобильная калибровка fluid-единицы ----------
   на узком вьюпорте 0.85vw крошечный и упирается в пол 15px → на телефонах всё на минимуме.
   На телефоне вьюпорт = вся ширина экрана, поэтому коэффициент выше (масштаб по ширине телефона). */
@media only screen and (max-width: 767px){
    #modalUploader{--upl-u:clamp(16px, 5vw, 22px);}
}

/* ===== единый интерфейс: десктоп-панель используется и на мобильном ===== */
.upl-m{display:none;}
#miniUploader{display:none !important;} /* плиточная мини-панель выведена из игры */

@media only screen and (max-width: 767px){
    #fullUploader{display:flex !important;}
    .upl-d{display:none !important;}
    .upl-m{display:inline !important;}

    /* формат/бумага «Печать:» — вернуть на мобильном (легаси прятал .full-interface) */
    #modalUploader .full-interface{display:flex !important;}
    #modalUploader .full-interface .dropdown > .btn.dropdown-toggle{font-size:calc(var(--upl-u) * 0.82);padding:6px 12px;}

    /* сегмент-источники во всю ширину, шрифт мельче чтобы ярлыки влезали целиком */
    .fileuploader-nav-tabs{display:flex;width:100% !important;margin:6px 0 14px;}
    .fileuploader-nav-tabs > li{flex:1 1 0;min-width:0;}
    .fileuploader-nav-tabs > li > a{width:100%;font-size:calc(var(--upl-u) * 0.72) !important;padding:calc(var(--upl-u) * 0.5) 4px !important;white-space:nowrap;}

    /* дропзона — крупнее тап-таргет */
    #file-uploader.b-fileup__comp{padding:calc(var(--upl-u) * 2) 16px;}
}

/* ============================================================
   Панели источников: Проекты / ВКонтакте / Я.Диск — под прототип
   (убрать легаси-зелёный #f4ffd6, JS-высоты, кастом-скроллбар) 
   ============================================================ */
/* холст-панель входа ВК и формы Я.Диск (аналог .panel в прототипе) */
#modalUploader #vkFileUploader.b-fileup__comp,
#modalUploader #fbFileUploader.b-fileup__comp,
#modalUploader #instFileUploader.b-fileup__comp,
#modalUploader #yandexDiskUploaderMd.b-fileup__comp{box-sizing:border-box;height:auto !important;min-height:calc(var(--upl-u) * 14);display:flex;flex-direction:column !important;align-items:center !important;justify-content:center !important;overflow:visible;background:var(--upl-canvas);border:1px solid var(--upl-line);border-radius:var(--upl-radius-lg);padding:calc(var(--upl-u) * 1.4);}
#modalUploader #vkFileUploader .b-fileup__comp__text,
#modalUploader #fbFileUploader .b-fileup__comp__text,
#modalUploader #instFileUploader .b-fileup__comp__text{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--upl-u) * 0.85);text-align:center;border:0;}
#modalUploader .upl-src-ic{color:var(--upl-muted);line-height:0;display:flex;align-items:center;justify-content:center;}
#modalUploader .upl-src-ic svg{width:calc(var(--upl-u) * 2.4);height:calc(var(--upl-u) * 2.4);}
#modalUploader .upl-src-txt{font-size:calc(var(--upl-u) * 1.0);color:var(--upl-ink-2);max-width:calc(var(--upl-u) * 22);line-height:1.5;}

/* список альбомов/персон (li>span) */
#modalUploader div.b-upfile__soc__list{background:var(--upl-surface) !important;border:1px solid var(--upl-line) !important;border-radius:var(--upl-radius);height:auto !important;max-height:300px !important;overflow:auto !important;padding:4px;}
#modalUploader .b-upfile__soc__list li{height:auto !important;line-height:normal !important;margin:0 !important;width:100% !important;}
#modalUploader .b-upfile__soc__list li span{display:block;height:auto !important;border-top:0 !important;color:var(--upl-ink-2) !important;font-size:calc(var(--upl-u) * 0.8) !important;padding:10px 12px !important;width:auto !important;border-radius:8px;cursor:pointer;}
#modalUploader .b-upfile__soc__list li span:hover{background:var(--upl-track);color:var(--upl-ink) !important;}
#modalUploader .b-upfile__soc__list li.active{background:transparent !important;}
#modalUploader .b-upfile__soc__list li.active span{background:var(--upl-acc-soft);color:var(--upl-acc) !important;font-weight:500;}
#modalUploader .b-upfile__soc__list__sep{display:none !important;}

/* два столбца: список слева, фото справа */
#modalUploader .b-upfile__soc-l{float:none !important;display:inline-block;vertical-align:top;width:230px !important;margin:0 !important;}
#modalUploader .b-upfile__soc-r{float:none !important;display:inline-block;vertical-align:top;width:calc(100% - 250px) !important;margin:0 0 0 16px !important;}

/* область фото — нативный скролл, компактно, сетка миниатюр */
#modalUploader .photoScrollbarContainer,#modalUploader .b-upfile__ya_disk{height:auto !important;}
#modalUploader .photoScrollbarContainer .viewport,#modalUploader .b-upfile__ya_disk .viewport{height:auto !important;max-height:300px !important;overflow:auto !important;}
#modalUploader .photoScrollbarContainer .scrollbar,#modalUploader .b-upfile__ya_disk .scrollbar{display:none !important;}
#modalUploader .b-upfile__soc__img{display:flex !important;flex-wrap:wrap;gap:10px;}
#modalUploader .b-upfile__soc__img > div{margin:0 !important;}
#modalUploader .b-upfile__soc__img div div{border-radius:10px;overflow:hidden;border:2px solid transparent;}
#modalUploader .b-upfile__soc__img div div.selected{border-color:var(--upl-acc) !important;}

/* «Выйти из соцсети» */
#modalUploader .b-upfile__logout{text-align:left;margin:8px 0;}
#modalUploader a.b-upfile__logout__but,#modalUploader a.b-upfile__logout__but:visited{color:var(--upl-muted);font-size:calc(var(--upl-u) * 0.75);text-decoration:underline;}

/* Я.Диск форма */
#modalUploader .b-fileup__ya{width:100% !important;max-width:520px;margin-left:auto !important;margin-right:auto !important;color:var(--upl-ink);}
#modalUploader .b-fileup__ya__title{color:var(--upl-ink-2) !important;font-size:calc(var(--upl-u) * 0.85);margin:0 0 12px;}
#modalUploader .b-fileup__ya__form{gap:8px;}
#modalUploader .b-fileup__ya__form input{flex:1;width:auto !important;border-radius:var(--upl-radius) !important;}
#modalUploader .b-fileup__ya__form button{border-radius:var(--upl-radius) !important;height:38px;}
#modalUploader .upl-ya-paste{background:transparent !important;color:var(--upl-acc) !important;border:1px solid var(--upl-line-strong) !important;text-shadow:none !important;box-shadow:none !important;font-weight:500;}
#modalUploader .ya_disk_folders_path > ul > li.active > span{color:var(--upl-acc) !important;}

/* --- Проекты/соцсети: доводка под прототип (перекрывает блок выше) --- */
#modalUploader .scrollbar{display:none !important;}                 /* легаси кастом-скроллбар (гориз. полоса) */
#modalUploader .b-upfile__soc-l{float:left !important;display:block;width:230px !important;margin:0 !important;border:0 !important;background:transparent !important;}
#modalUploader .b-upfile__soc-r{float:left !important;display:block;width:calc(100% - 246px) !important;margin:0 0 0 16px !important;padding:0 !important;}
#modalUploader .b-upfile__soc__list li span{font-size:calc(var(--upl-u) * 0.85) !important;}
#modalUploader .photoScrollbarContainer .viewport{max-height:320px !important;height:auto !important;overflow:auto !important;}
#modalUploader .b-upfile__soc__img{display:flex !important;flex-wrap:wrap;gap:10px;float:none !important;width:auto !important;}
#modalUploader .b-upfile__soc__img > div{float:none !important;width:auto !important;height:auto !important;margin:0 !important;padding:0 !important;}
#modalUploader .b-upfile__soc__img > div > div{display:block !important;width:96px !important;height:96px !important;border:2px solid transparent !important;border-radius:10px !important;box-shadow:none !important;padding:0 !important;overflow:hidden;background:#e9e7e2;}
#modalUploader .b-upfile__soc__img > div > div.selected{border-color:var(--upl-acc) !important;box-shadow:none !important;}
#modalUploader .b-upfile__soc__img div img{width:100% !important;height:100% !important;max-width:100% !important;max-height:100% !important;object-fit:cover;display:block;}

/* кнопки действий панелей: ghost + primary, по центру, крупнее */
#modalUploader .b-upfile__soc__buttons2,#modalUploader .b-upfile__soc__buttons,#modalUploader .ya_disk_actions{display:flex !important;justify-content:center;gap:10px;margin:16px 0 0 !important;padding:0 0 4px;}
#modalUploader .b-upfile__soc__buttons2 .uploader-b-form-but,#modalUploader .ya_disk_gallery_button{height:38px !important;line-height:36px !important;font-size:calc(var(--upl-u) * 0.78) !important;padding:0 18px !important;border-radius:var(--upl-radius) !important;}
#modalUploader .b-upfile__soc__buttons2 .uploader-b-form-but:first-child,#modalUploader .ya_disk_actions .ya_disk_gallery_button:first-child{background:transparent !important;color:var(--upl-acc) !important;border:1px solid var(--upl-line-strong) !important;text-shadow:none !important;box-shadow:none !important;}

/* --- нейтрализация легаси tinyscrollbar: нативный поток вместо JS-позиционирования --- */
#modalUploader .scrollbarContainer .viewport,#modalUploader .photoScrollbarContainer .viewport{width:auto !important;overflow-x:hidden !important;overflow-y:auto !important;}
#modalUploader .scrollbarContainer .overview,#modalUploader .photoScrollbarContainer .overview{position:static !important;top:0 !important;left:0 !important;width:100% !important;height:auto !important;}
#modalUploader div.b-upfile__soc__list{overflow-x:hidden !important;overflow-y:auto !important;}
#modalUploader div.b-upfile__soc__list .viewport{max-height:290px !important;}
#modalUploader ul.b-upfile__soc__list{width:100% !important;}
#modalUploader .b-upfile__soc__list li span{width:auto !important;white-space:normal;}

/* кнопки действий — крупнее текст */
#modalUploader .b-upfile__soc__buttons2 .uploader-b-form-but,#modalUploader .ya_disk_gallery_button{font-size:calc(var(--upl-u) * 0.85) !important;}

/* --- Проекты: доводка кеглей (относительно --upl-u) + ховер миниатюр --- */
#modalUploader .b-upfile__soc__list li span{font-size:calc(var(--upl-u) * 0.92) !important;padding:calc(var(--upl-u) * 0.55) calc(var(--upl-u) * 0.65) !important;}
#modalUploader .b-upfile__soc__buttons2 .uploader-b-form-but,#modalUploader .ya_disk_gallery_button{font-size:calc(var(--upl-u) * 1.0) !important;height:auto !important;line-height:1.2 !important;padding:calc(var(--upl-u) * 0.62) calc(var(--upl-u) * 1.1) !important;}
#modalUploader .b-upfile__soc__img > div > div:hover{border-color:var(--upl-acc) !important;}

/* --- выделение миниатюр: кольцо с белым зазором (не сливается с фото) --- */
#modalUploader .b-upfile__soc__img{gap:14px !important;}
#modalUploader .b-upfile__soc__img > div > div{border:0 !important;box-shadow:none !important;transition:box-shadow .12s ease;}
#modalUploader .b-upfile__soc__img > div > div:hover{box-shadow:0 0 0 2px var(--upl-surface),0 0 0 4px var(--upl-acc-soft) !important;}
#modalUploader .b-upfile__soc__img > div > div.selected{box-shadow:0 0 0 2px var(--upl-surface),0 0 0 4px var(--upl-acc) !important;}

/* --- запас под кольцо выделения, чтобы не срезалось краем скролл-области --- */
#modalUploader .b-upfile__soc__img{padding:6px !important;}
#modalUploader .photoScrollbarContainer .viewport{padding:0 !important;}

/* --- пуленепробиваемое центрирование контента в панелях-источниках --- */
#modalUploader #vkFileUploader .b-fileup__comp__text,
#modalUploader #fbFileUploader .b-fileup__comp__text,
#modalUploader #instFileUploader .b-fileup__comp__text{margin:auto !important;}
#modalUploader #btnLoginVk,#modalUploader #btnLoginFb,#modalUploader #btnLoginInst{margin:0 !important;}

/* --- grid-центрирование панелей-источников (железобетонно, мимо flex/псевдоэлементов) --- */
#modalUploader #vkFileUploader.b-fileup__comp,
#modalUploader #fbFileUploader.b-fileup__comp,
#modalUploader #instFileUploader.b-fileup__comp,
#modalUploader #yandexDiskUploaderMd.b-fileup__comp{display:grid;place-items:center !important;place-content:center !important;}
#modalUploader #vkFileUploader.b-fileup__comp::before,#modalUploader #vkFileUploader.b-fileup__comp::after,
#modalUploader #yandexDiskUploaderMd.b-fileup__comp::before,#modalUploader #yandexDiskUploaderMd.b-fileup__comp::after{display:none !important;}

/* --- абсолютное центрирование контента панелей-источников (последний рубеж) --- */
#modalUploader #vkFileUploader.b-fileup__comp,
#modalUploader #fbFileUploader.b-fileup__comp,
#modalUploader #instFileUploader.b-fileup__comp,
#modalUploader #yandexDiskUploaderMd.b-fileup__comp{position:relative !important;}
#modalUploader #vkFileUploader .b-fileup__comp__text,
#modalUploader #fbFileUploader .b-fileup__comp__text,
#modalUploader #instFileUploader .b-fileup__comp__text,
#modalUploader #yandexDiskUploaderMd .b-fileup__comp__text2{position:absolute !important;top:50% !important;left:50% !important;transform:translate(-50%,-50%) !important;width:calc(100% - 2 * var(--upl-u) * 1.4);}

/* --- одинаковая высота модалки на всех вкладках: grid-стек панелей ---
   Все панели-вкладки лежат в одной grid-ячейке → контейнер сам растягивается
   по самой высокой вкладке (что бы в ней ни было: подсказки/фото/логин), без
   магических чисел и без зависимости от контента. Неактивные прячем через
   visibility (остаются в потоке и держат высоту). Механика Bootstrap (.active). */
#fullUploader .tab-content{display:grid;grid-template-columns:minmax(0,1fr);}
#fullUploader .tab-content > *{grid-area:1 / 1;min-width:0;}
#fullUploader .tab-content > .js-tab.tab-pane{display:flex !important;flex-direction:column;}
#fullUploader .tab-content > .js-tab.tab-pane:not(.active){visibility:hidden;pointer-events:none;}
/* зоны-источники заполняют выровненную высоту вкладки (контент центрируется абсолютно) */
#modalUploader #vkFileUploader.b-fileup__comp,
#modalUploader #fbFileUploader.b-fileup__comp,
#modalUploader #instFileUploader.b-fileup__comp,
#modalUploader #yandexDiskUploaderMd.b-fileup__comp{flex:1 0 auto;}

/* ===== Проекты: адаптивная раскладка под переменную высоту =====
   2D-grid: [список | фото] сверху (растягиваются), кнопки — во всю ширину снизу. */
#modalUploader #tabs-4 > div{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:calc(var(--upl-u) * 13.5) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;column-gap:16px;row-gap:14px;}
#modalUploader #tabs-4 .b-upfile__soc-l{float:none !important;grid-column:1;grid-row:1;width:auto !important;margin:0 !important;min-height:0;display:flex;flex-direction:column;}
#modalUploader #tabs-4 .b-upfile__soc-r{float:none !important;grid-column:2;grid-row:1;width:auto !important;margin:0 !important;min-height:0;}
#modalUploader #tabs-4 .clear{display:none !important;}
#modalUploader #tabs-4 .b-upfile__soc__buttons2{grid-column:1 / -1;grid-row:2;margin:0 !important;align-self:end;}
/* список альбомов и область фото заполняют строку и скроллятся внутри */
#modalUploader #tabs-4 .b-upfile__soc-l div.b-upfile__soc__list{max-height:none !important;height:100%;flex:1;min-height:0;}
#modalUploader #tabs-4 .photoScrollbarContainer{height:100%;min-height:0;}
#modalUploader #tabs-4 .photoScrollbarContainer .viewport{max-height:none !important;height:100% !important;}

/* Я.Диск: поле ввода и кнопки — одинаковая высота, в одну линию */
#modalUploader .b-fileup__ya__form{align-items:center;}
#modalUploader .b-fileup__ya__form input{height:calc(var(--upl-u) * 2.5) !important;}
#modalUploader .b-fileup__ya__form button{height:calc(var(--upl-u) * 2.5) !important;padding-top:0 !important;padding-bottom:0 !important;line-height:calc(var(--upl-u) * 2.5) !important;}

/* ===== селекторы формата/бумаги «Печать:» — под дизайн-систему ===== */
#modalUploader .full-interface .dropdown-toggle .caret{display:none !important;}
#modalUploader .full-interface .dropdown > .btn.dropdown-toggle{position:relative;padding-right:calc(var(--upl-u) * 1.9);}
#modalUploader .full-interface .dropdown > .btn.dropdown-toggle::after{content:"";position:absolute;right:calc(var(--upl-u) * 0.75);top:50%;width:.42em;height:.42em;border-right:1.6px solid var(--upl-muted);border-bottom:1.6px solid var(--upl-muted);transform:translateY(-70%) rotate(45deg);transition:border-color .15s;}
#modalUploader .full-interface .dropdown > .btn.dropdown-toggle:hover::after,#modalUploader .full-interface .dropdown.open > .btn.dropdown-toggle::after{border-color:var(--upl-acc);}
#modalUploader .full-interface .dropdown.open > .btn.dropdown-toggle{border-color:var(--upl-acc);background:var(--upl-surface);color:var(--upl-ink);}
/* выпадающее меню */
#modalUploader .full-interface .dropdown-menu{min-width:calc(var(--upl-u) * 9);border:1px solid var(--upl-line);border-radius:var(--upl-radius);box-shadow:0 12px 32px -12px rgba(20,24,31,.28);padding:6px;margin-top:8px;background:var(--upl-surface);max-height:min(calc(var(--upl-u) * 32), 62vh);overflow-y:auto;overflow-x:hidden;}
/* только webkit-скроллбар (без scrollbar-width!) — кастомный, без стрелок */
#modalUploader .full-interface .dropdown-menu::-webkit-scrollbar{width:9px;}
#modalUploader .full-interface .dropdown-menu::-webkit-scrollbar-track{background:transparent;margin:6px 0;}
#modalUploader .full-interface .dropdown-menu::-webkit-scrollbar-thumb{background:var(--upl-line-strong);border-radius:99px;border:2px solid var(--upl-surface);}
#modalUploader .full-interface .dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--upl-muted);}
#modalUploader .full-interface .dropdown-menu::-webkit-scrollbar-button{display:none;height:0;width:0;}
#modalUploader .full-interface .dropdown-menu > li.dropdown-header{font-size:calc(var(--upl-u) * 0.68);color:var(--upl-muted);text-transform:uppercase;letter-spacing:.05em;padding:4px 10px 6px;font-weight:600;}
#modalUploader .full-interface .dropdown-menu > li > a{display:block;padding:8px 12px;border-radius:8px;color:var(--upl-ink-2) !important;font-size:calc(var(--upl-u) * 0.9);line-height:1.3;background:transparent;}
#modalUploader .full-interface .dropdown-menu > li > a:hover,#modalUploader .full-interface .dropdown-menu > li > a:focus{background:var(--upl-track) !important;color:var(--upl-ink) !important;}
#modalUploader .full-interface .dropdown-menu > li.active > a,#modalUploader .full-interface .dropdown-menu > li.active > a:hover{background:var(--upl-acc-soft) !important;color:var(--upl-acc) !important;font-weight:500;}

/* ============================================================
   Галерейные состояния после входа/вставки: ВКонтакте, Я.Диск
   Тот же приём, что «Проекты»: контент заполняет высоту вкладки,
   кнопки прижаты к низу, списки/фото скроллятся внутри.
   ВАЖНО: display у переключаемых JS блоков (#vkFileUploader(Images),
   #yandexDiskUploaderMd, #YaDiskGalleryMd) — БЕЗ !important, иначе
   он перебивает inline display:none от jQuery .hide().
   ============================================================ */

/* --- модалка никогда не выше экрана: header фиксирован, body ужимается,
   внутренние зоны скроллятся. 60px/20px — собственные вертикальные отступы
   bootstrap .modal-dialog (30px/10px сверху+снизу), не магия. --- */
#modalUploader .modal-content{display:flex;flex-direction:column;max-height:calc(100vh - 60px);max-height:calc(100dvh - 60px);}
@media (max-width:991px){#modalUploader .modal-content{max-height:calc(100vh - 20px);max-height:calc(100dvh - 20px);}}
#modalUploader .modal-body{min-height:0;display:flex;flex-direction:column;}
#modalUploader #fullUploader{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}
#fullUploader .tab-content{flex:1 1 auto;min-height:0;grid-template-rows:minmax(0,1fr);}
#fullUploader .tab-content > .js-tab.tab-pane{min-height:0;}
#fullUploader .tab-content > #tabs-1.js-tab.tab-pane{overflow-y:auto;}

/* ===== ВК: галерея после входа — grid [списки | фото], кнопки у низа,
   «Выход из Вконтакте» — слева на линии кнопок ===== */
#modalUploader #vkFileUploaderImages{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:calc(var(--upl-u) * 13.5) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;column-gap:16px;row-gap:14px;}
#modalUploader #vkFileUploaderImages .b-upfile__soc-l{float:none !important;grid-column:1;grid-row:1;width:auto !important;margin:0 !important;min-height:0;display:flex;flex-direction:column;gap:10px;}
#modalUploader #vkFileUploaderImages .b-upfile__soc-r{float:none !important;grid-column:2;grid-row:1;width:auto !important;margin:0 !important;min-height:0;}
#modalUploader #vkFileUploaderImages .clear{display:none !important;}
#modalUploader #vkFileUploaderImages .b-upfile__soc__buttons2{grid-column:1 / -1;grid-row:2;margin:0 !important;align-self:end;}
#modalUploader #vkFileUploaderImages .b-upfile__logout{grid-column:1;grid-row:2;align-self:center;justify-self:start;margin:0 !important;z-index:1;}
/* имя пользователя — спокойный заголовок колонки; легаси-«точка»-кнопка скрыта (выход есть ссылкой) */
#modalUploader #vkFileUploaderImages .b-upfile__soc__name{padding:0 4px;font-size:calc(var(--upl-u) * 0.92);font-weight:500;color:var(--upl-ink);}
#modalUploader #vkFileUploaderImages .b-upfile__soc__name span{display:none !important;}
/* два списка (персоны/альбомы) делят высоту колонки: персоны — по контенту (до 45%), альбомы — остальное */
#modalUploader #vkFileUploaderImages .b-upfile__soc-l div.b-upfile__soc__list{max-height:45% !important;height:auto;flex:0 1 auto;min-height:0;}
#modalUploader #vkFileUploaderImages .b-upfile__soc-l .b-upfile__soc__list__sep ~ div.b-upfile__soc__list{max-height:none !important;flex:1 1 0;}
#modalUploader #vkFileUploaderImages .b-upfile__soc-l div.b-upfile__soc__list .viewport{max-height:none !important;}
/* зона фото заполняет строку, скролл внутри */
#modalUploader #vkFileUploaderImages .photoScrollbarContainer{height:100%;min-height:0;}
#modalUploader #vkFileUploaderImages .photoScrollbarContainer .viewport{max-height:none !important;height:100% !important;}

/* «Проекты»: тот же анкап внутреннего viewport списка (был зажат 290px) */
#modalUploader #tabs-4 .b-upfile__soc-l div.b-upfile__soc__list .viewport{max-height:none !important;}

/* ===== Я.Диск: галерея после вставки ссылки — колонка [путь | фото | действия] =====
   Начальное скрытие #YaDiskGalleryMd — inline style в разметке (не в CSS),
   чтобы jQuery .show() дал display из этого правила (flex), а не block. */
#modalUploader #YaDiskGalleryMd{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:14px;}
#modalUploader #YaDiskGalleryMd .ya_disk_folders_path{flex:0 0 auto;display:flex;flex-direction:column;flex-wrap:nowrap;gap:8px;font-size:inherit;}
#modalUploader #YaDiskGalleryMd .b-upfile__ya_disk{flex:1 1 auto;min-height:0;height:auto !important;padding-top:0 !important;}
#modalUploader #YaDiskGalleryMd .b-upfile__ya_disk .viewport{max-height:none !important;height:100% !important;}
/* путь — хлебные крошки */
#modalUploader #yandexListFoldersMd{display:flex;flex-wrap:wrap;align-items:center;row-gap:4px;}
#modalUploader #yandexListFoldersMd li{display:flex;align-items:center;}
#modalUploader #yandexListFoldersMd li:not(:last-child)::after{content:"\203A";color:var(--upl-muted);margin:0 8px;font-size:calc(var(--upl-u) * 0.92);}
#modalUploader #yandexListFoldersMd li > span{font-size:calc(var(--upl-u) * 0.92);line-height:1.4;border-bottom:0;margin:0;color:var(--upl-acc) !important;cursor:pointer;}
#modalUploader #yandexListFoldersMd li.active > span{color:var(--upl-ink) !important;font-weight:500;cursor:default;}
/* подпапки — чипы */
#modalUploader #yandexListAlbumsMd{display:flex;flex-wrap:wrap;gap:8px;}
#modalUploader #yandexListAlbumsMd li > span{display:block;font-size:calc(var(--upl-u) * 0.85);line-height:1.3;padding:calc(var(--upl-u) * 0.38) calc(var(--upl-u) * 0.8);border:1px solid var(--upl-line-strong);border-radius:999px;margin:0;color:var(--upl-ink-2) !important;background:var(--upl-surface);cursor:pointer;}
#modalUploader #yandexListAlbumsMd li > span:hover{background:var(--upl-track);color:var(--upl-ink) !important;}
#modalUploader #yandexListAlbumsMd li.active > span{background:var(--upl-acc-soft);border-color:transparent;color:var(--upl-acc) !important;}
/* действия: пара «Загрузить…» строго по центру (фланговые 1fr), «Перейти к другой ссылке» — линк слева */
#modalUploader #YaDiskGalleryMd .ya_disk_actions{flex:0 0 auto;display:grid !important;grid-template-columns:1fr auto auto 1fr;gap:10px;align-items:center;margin:0 !important;padding:0 0 4px;}
#modalUploader #YaDiskGalleryMd #yaDiskLoadAllMd{grid-column:2;}
#modalUploader #YaDiskGalleryMd #yaDiskLoadMd{grid-column:3;}
#modalUploader #YaDiskGalleryMd #yandexDeselectMd{grid-column:1;grid-row:1;justify-self:start;background:transparent !important;border:0 !important;color:var(--upl-muted) !important;font-size:calc(var(--upl-u) * 0.75) !important;height:auto !important;line-height:1.4 !important;padding:0 !important;text-decoration:underline;font-weight:400;}
#modalUploader #YaDiskGalleryMd #yandexDeselectMd:hover{color:var(--upl-ink) !important;filter:none;}

/* ===== мобильный: галереи в одну колонку — списки сверху (ограничены), фото — остальное ===== */
@media only screen and (max-width: 767px){
    #modalUploader #vkFileUploaderImages{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto auto;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l{grid-column:1;grid-row:1;max-height:none;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-r{grid-column:1;grid-row:2;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc__buttons2{grid-column:1;grid-row:3;flex-wrap:wrap;}
    #modalUploader #vkFileUploaderImages .b-upfile__logout{grid-column:1;grid-row:4;justify-self:center;}

    #modalUploader #tabs-4 > div{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;}
    #modalUploader #tabs-4 .b-upfile__soc-l{grid-column:1;grid-row:1;max-height:none;}
    #modalUploader #tabs-4 .b-upfile__soc-r{grid-column:1;grid-row:2;}
    #modalUploader #tabs-4 .b-upfile__soc__buttons2{grid-column:1;grid-row:3;flex-wrap:wrap;}

    #modalUploader #YaDiskGalleryMd .ya_disk_actions{grid-template-columns:auto auto;justify-content:center;}
    #modalUploader #YaDiskGalleryMd #yaDiskLoadAllMd{grid-column:1;}
    #modalUploader #YaDiskGalleryMd #yaDiskLoadMd{grid-column:2;}
}

/* --- VK transport-див не должен занимать высоту (VK openapi кладёт туда iframe) --- */
#modalUploader #vk_api_transport{flex:0 0 auto;height:0;overflow:hidden;}

/* ===== единый скроллбар всех внутренних зон модалки — как у выпадающего
   списка форматов/бумаг (тонкий, без стрелок; scrollbar-width НЕ ставить) ===== */
#modalUploader ::-webkit-scrollbar{width:9px;height:9px;}
#modalUploader ::-webkit-scrollbar-track{background:transparent;margin:6px 0;}
#modalUploader ::-webkit-scrollbar-thumb{background:var(--upl-line-strong);border-radius:99px;border:2px solid var(--upl-surface);}
#modalUploader ::-webkit-scrollbar-thumb:hover{background:var(--upl-muted);}
#modalUploader ::-webkit-scrollbar-button{display:none;height:0;width:0;}
#modalUploader ::-webkit-scrollbar-corner{background:transparent;}

/* ===== глобальный оверлей-троббер отключён (индикатор загрузки живёт
   в карточках фото, см. ниже; в других местах троббер не нужен) ===== */
#modalUploader .b-fileup__trobber2{display:none !important;}

/* ===== «Выход из Вконтакте»: нейтрализовать легаси absolute (right:0;top:-4px уносил
   ссылку из grid-ячейки в угол) — обычный muted-линк слева на линии кнопок ===== */
#modalUploader .b-upfile__logout{height:auto !important;line-height:normal !important;text-align:left !important;position:static !important;}
#modalUploader a.b-upfile__logout__but,#modalUploader a.b-upfile__logout__but:visited{position:static !important;border-bottom:0 !important;color:var(--upl-muted) !important;text-decoration:underline;white-space:nowrap;}
#modalUploader a.b-upfile__logout__but:hover{color:var(--upl-ink) !important;}

/* быстрые клики по галерее: без native-drag картинок и без выделения текста */
#modalUploader .b-upfile__soc__img img{-webkit-user-drag:none;user-select:none;}
#modalUploader .b-upfile__soc__img > div > div{user-select:none;-webkit-user-select:none;}

/* ===== троббер №2 («кольцо с хвостом») в карточке фото: крутится, пока превью
   не подгрузилось (ленивые img в onScrollPhotos); после load/error JS ставит .is-loaded ===== */
#modalUploader .b-upfile__soc__img > div > div{position:relative;}
#modalUploader .b-upfile__soc__img > div > div::before{content:"";position:absolute;left:50%;top:50%;width:calc(var(--upl-u) * 1.5);height:calc(var(--upl-u) * 1.5);margin:calc(var(--upl-u) * -0.75) 0 0 calc(var(--upl-u) * -0.75);border-radius:50%;background:conic-gradient(from 0deg,transparent 15%,var(--upl-acc));-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px));animation:upl-spin .9s linear infinite;}
#modalUploader .b-upfile__soc__img > div > div.is-loaded::before{display:none;}
#modalUploader .b-upfile__soc__img div img{position:relative;z-index:1;}

/* ===== «Готовим фото»: баланс под выросшую (общую) высоту вкладок =====
   Основной блок (заголовок/лента/бар) центрируется в свободном пространстве,
   подсказка с точками прижата к низу как футер (в языке галерей: контент по
   центру, служебное у низа). На малой высоте auto-отступы схлопываются в 0 —
   компактная раскладка остаётся прежней. display БЕЗ !important (jQuery hide/show). */
#file-upload-progress.upl-prep{display:flex;flex-direction:column;}
#file-upload-progress .upl-prep__in{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}
#file-upload-progress .upl-prep__head{margin-top:auto;}
#file-upload-progress .upl-prep__foot{padding-bottom:calc(var(--upl-u) * 0.7);}
#file-upload-progress .upl-prep__tip{margin-top:auto;}

/* «Готовим фото»: на телефоне лента скромнее (6u на узком экране = 3 миниатюры) */
@media only screen and (max-width: 767px){
    .upl-prep__th{width:calc(var(--upl-u) * 4.5);height:calc(var(--upl-u) * 4.5);}
}

/* ===== «Готовим фото»: симметрия и живость =====
   Инфоблок — по центру, у верха; лента+бары центрируются в свободном месте.
   Бар текущего файла (тоньше, быстрый) над общим баром. */
#file-upload-progress .upl-prep__head{justify-content:center;margin-top:calc(var(--upl-u) * 0.6);}
#file-upload-progress .upl-prep__thumbs{margin-top:auto;}
.upl-prep__bar.upl-prep__bar-file{height:8px;margin:0 0 calc(var(--upl-u) * 0.5);}
.upl-prep__bar-file span{transition:width .2s linear;}

/* ===== состояние «идёт загрузка» (класс ставит JS на upload-start, снимает при закрытии):
   селекторы формата/бумаги скрыты — их смена не влияет на уже идущую загрузку,
   показывать их было бы обманом. !important — чтобы перебить мобильный re-show. ===== */
#modalUploader.upl-uploading .full-interface{display:none !important;}

/* ===== Я.Диск: подпапка — первая плитка в общей сетке фото (как в файловых менеджерах):
   узнаваемая жёлтая папка + имя, 96x96 = миниатюра, ховер-кольцо как у фото ===== */
#modalUploader #yandexListAlbumsMd{display:none !important;} /* легаси-ряд чипов выведен из игры */
#modalUploader .b-upfile__soc__img .ya-folder-tile{display:flex !important;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:var(--upl-canvas) !important;}
#modalUploader .b-upfile__soc__img .ya-folder-tile::before{content:"";flex:none;width:40px;height:33px;position:static;left:auto;top:auto;margin:0;border-radius:0;-webkit-mask:none;mask:none;animation:none;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 40'%3E%3Cpath fill='%23EFB93F' d='M4 8a4 4 0 0 1 4-4h11l4 5h17a4 4 0 0 1 4 4v3H4z'/%3E%3Cpath fill='%23F7CE68' d='M4 14h40a2 2 0 0 1 2 2l-2 16a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4z'/%3E%3C/svg%3E") center/contain no-repeat;}
#modalUploader .b-upfile__soc__img .ya-folder-tile b{font-weight:400;font-size:calc(var(--upl-u) * 0.66);line-height:1.15;color:var(--upl-ink-2);max-width:100%;padding:0 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ===== ВК и «Проекты»: ровно 4 миниатюры в ряд =====
   Зоны с левой колонкой списков одинаковой ширины; вместо фиксированных 96px —
   грид на 4 колонки: размер плитки выводится из ширины зоны (растёт с модалкой),
   квадрат держит aspect-ratio. Я.Диск (без колонки) остаётся на 96px-сетке. */
#modalUploader #vkFileUploaderImages .b-upfile__soc__img,
#modalUploader #tabs-4 .b-upfile__soc__img{display:grid !important;grid-template-columns:repeat(4, minmax(0,1fr));gap:14px !important;}
#modalUploader #vkFileUploaderImages .b-upfile__soc__img > div,
#modalUploader #tabs-4 .b-upfile__soc__img > div{width:auto !important;min-width:0;}
#modalUploader #vkFileUploaderImages .b-upfile__soc__img > div > div,
#modalUploader #tabs-4 .b-upfile__soc__img > div > div{width:100% !important;height:auto !important;aspect-ratio:1 / 1;}

/* зазор под скроллбар: правый отступ вьюпорта — сетка пересчитывает 1fr-колонки
   на суженную ширину (4-я колонка гарантированно входит), полоса не липнет к фото */
#modalUploader #vkFileUploaderImages .photoScrollbarContainer .viewport,
#modalUploader #tabs-4 .photoScrollbarContainer .viewport{padding:0 12px 0 0 !important;}

/* ===== мобильная доводка по скриншотам: галерея фото — главная, интерфейс не отнимает место ===== */

/* двойной скроллбар списков (все разрешения): у вьюпорта легаси-высота и свой скролл —
   скроллит только внешняя рамка списка, вьюпорт отдаёт высоту контенту */
#modalUploader div.b-upfile__soc__list .viewport{height:auto !important;max-height:none !important;overflow:visible !important;}

/* поле ссылки Я.Диска умеет сжиматься — кнопка «Открыть» не вылезает за панель */
#modalUploader .b-fileup__ya__form input{min-width:0;}

@media only screen and (max-width: 767px){
    /* списки (проекты/друзья/альбомы) — по контенту, максимум ~3 строки; остальное — фото */
    #modalUploader #tabs-4 .b-upfile__soc-l div.b-upfile__soc__list{flex:0 1 auto !important;height:auto !important;max-height:calc(var(--upl-u) * 7) !important;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l div.b-upfile__soc__list{flex:0 1 auto !important;height:auto !important;max-height:calc(var(--upl-u) * 5.4) !important;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l .b-upfile__soc__list__sep ~ div.b-upfile__soc__list{flex:0 1 auto !important;max-height:calc(var(--upl-u) * 5.4) !important;}

    /* Я.Диск: сетка фото — 3 колонки гридом (96px-флекс разваливался на 2 колонки) */
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img{display:grid !important;grid-template-columns:repeat(3, minmax(0,1fr));gap:12px !important;}
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img > div{width:auto !important;min-width:0;}
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img > div > div{width:100% !important;height:auto !important;aspect-ratio:1 / 1;}

    /* кнопки действий — в один ряд, делят ширину, без переносов */
    #modalUploader .b-upfile__soc__buttons2{flex-wrap:nowrap !important;gap:8px;}
    #modalUploader .b-upfile__soc__buttons2 .uploader-b-form-but{flex:1 1 0;min-width:0;white-space:nowrap;font-size:calc(var(--upl-u) * 0.78) !important;padding:calc(var(--upl-u) * 0.55) 8px !important;}
    #modalUploader #YaDiskGalleryMd .ya_disk_actions{display:flex !important;flex-wrap:wrap;gap:8px;justify-content:center;}
    #modalUploader #YaDiskGalleryMd .ya_disk_gallery_button{flex:1 1 0;min-width:0;white-space:nowrap;font-size:calc(var(--upl-u) * 0.78) !important;padding:calc(var(--upl-u) * 0.55) 8px !important;}
    #modalUploader #YaDiskGalleryMd #yandexDeselectMd{flex:0 0 100%;order:3;justify-self:auto;}
}

/* ===== мобильный: раскрывающиеся списки источников (Проекты, ВК) =====
   Свёрнуто = одна строка с текущим выбором + шеврон; тап — раскрыть; выбор — схлопнуть.
   Место отдаётся галерее фото. Десктоп не затронут. */
@media only screen and (max-width: 767px){
    #modalUploader .upl-collapsible{position:relative;cursor:pointer;}
    #modalUploader .upl-collapsible::after{content:"";position:absolute;right:14px;top:calc(var(--upl-u) * 1.05);width:8px;height:8px;border-right:1.6px solid var(--upl-muted);border-bottom:1.6px solid var(--upl-muted);transform:rotate(45deg);transition:transform .15s;pointer-events:none;}
    #modalUploader .upl-collapsible.upl-open::after{transform:rotate(-135deg);top:calc(var(--upl-u) * 1.25);}
    #modalUploader .upl-collapsible:not(.upl-open) ul.b-upfile__soc__list li{display:none !important;}
    #modalUploader .upl-collapsible:not(.upl-open) ul.b-upfile__soc__list li.active{display:block !important;}
    /* пока выбор не сделан — показываем первую строку как значение */
    #modalUploader .upl-collapsible:not(.upl-open):not(:has(li.active)) ul.b-upfile__soc__list li:first-child{display:block !important;}
    #modalUploader .upl-collapsible:not(.upl-open) .viewport{overflow:hidden !important;}
    #modalUploader .upl-collapsible:not(.upl-open) li span{padding-right:32px !important;}
    /* раскрытый список — больше высоты, внутренний скролл */
    #modalUploader .upl-collapsible.upl-open{max-height:calc(var(--upl-u) * 12) !important;}

    /* Я.Диск: поле ссылки и «Открыть» — друг под другом, ссылка видна целиком */
    #modalUploader .b-fileup__ya__form{flex-direction:column;align-items:stretch;}
    #modalUploader .b-fileup__ya__form input{width:100% !important;}
}

/* ===== мобильный дизайн-заход #3 ===== */
@media only screen and (max-width: 767px){
    /* Я.Диск: высокое поле ссылки и кнопка — удобный тап-таргет */
    #modalUploader .b-fileup__ya__form input{height:calc(var(--upl-u) * 3.2) !important;font-size:calc(var(--upl-u) * 0.92);padding:0 14px;}
    #modalUploader .b-fileup__ya__form button{height:calc(var(--upl-u) * 3.2) !important;line-height:calc(var(--upl-u) * 3.2) !important;}

    /* ВК: «Друг» и «Альбом» в одну линию; раскрытие — на всю ширину поверх фото (имя скрыто — место фотографиям) */
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l{flex-direction:row;gap:8px;position:relative;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l .upl-collapsible{flex:1 1 0;min-width:0;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc__name{display:none !important;}
    #modalUploader .upl-collapsible:not(.upl-open) li span{white-space:nowrap !important;overflow:hidden;text-overflow:ellipsis;}
    #modalUploader #vkFileUploaderImages .b-upfile__soc-l .upl-collapsible.upl-open{position:absolute;left:0;right:0;top:0;z-index:30;width:auto;max-height:calc(var(--upl-u) * 14) !important;background:var(--upl-surface);box-shadow:0 16px 36px -12px rgba(20,24,31,.3);}

    /* Проекты: свёрнуто по умолчанию, явная кнопка «Все проекты»/«Свернуть» вместо шеврона */
    #modalUploader #tabs-4 .upl-collapsible::after{content:attr(data-txt-open);border:0;width:auto;height:auto;top:50%;right:12px;transform:translateY(-50%);color:var(--upl-acc);font-size:calc(var(--upl-u) * 0.75);text-decoration:underline;line-height:1.2;}
    #modalUploader #tabs-4 .upl-collapsible.upl-open::after{content:attr(data-txt-close);top:calc(var(--upl-u) * 0.85);transform:none;color:var(--upl-muted);}
    #modalUploader #tabs-4 .upl-collapsible:not(.upl-open) li span{padding-right:calc(var(--upl-u) * 6.5) !important;}
}

/* ===== усиление мобильных правил Диска (перебиваем любой легаси-каскад id-селекторами) ===== */
@media only screen and (max-width: 767px){
    /* поле и кнопка — ровный блок одной высоты 3u; min-height страхует height от любого каскада */
    #modalUploader #yandexPublicUrlMd{height:calc(var(--upl-u) * 3) !important;min-height:calc(var(--upl-u) * 3) !important;line-height:normal !important;font-size:calc(var(--upl-u) * 0.92) !important;padding:0 14px !important;box-sizing:border-box !important;}
    #modalUploader #yandexDiskLoadMd{height:calc(var(--upl-u) * 3) !important;min-height:calc(var(--upl-u) * 3) !important;line-height:calc(var(--upl-u) * 3) !important;padding:0 !important;font-size:calc(var(--upl-u) * 0.95) !important;box-sizing:border-box !important;}
    #modalUploader #YaDiskGalleryMd .ya_disk_actions{display:flex !important;flex-wrap:wrap !important;gap:8px !important;justify-content:center !important;grid-template-columns:none !important;}
    #modalUploader #YaDiskGalleryMd #yaDiskLoadAllMd,#modalUploader #YaDiskGalleryMd #yaDiskLoadMd{flex:1 1 0 !important;min-width:0 !important;white-space:nowrap !important;font-size:calc(var(--upl-u) * 0.78) !important;padding:calc(var(--upl-u) * 0.55) 6px !important;height:auto !important;line-height:1.2 !important;}
    #modalUploader #YaDiskGalleryMd #yandexDeselectMd{flex:0 0 100% !important;order:3;}
    /* легаси #tabs-7{padding:10px} съедал ширину ряда кнопок — паритет с вкладкой Проекты */
    #modalUploader #tabs-7{padding:0 !important;}
    /* зазор под скроллбар (как у ВК/Проектов): грид пересчитывает колонки, 3-я не режется */
    #modalUploader #YaDiskGalleryMd .b-upfile__ya_disk .viewport{padding:0 12px 0 0 !important;}
    /* единообразие мобильных галерей: ВК и Проекты — 3 колонки, как Диск (4 — только десктоп) */
    #modalUploader #vkFileUploaderImages .b-upfile__soc__img,
    #modalUploader #tabs-4 .b-upfile__soc__img{grid-template-columns:repeat(3, minmax(0,1fr));gap:12px !important;}
}

/* ===== Я.Диск десктоп: сетка миниатюр в формате ВК/Проектов =====
   Полноширинная зона: 6 колонок дают тот же размер плитки (~115px), что 4 колонки
   в зонах с левой колонкой. min-width:768 — мобильные 3 колонки не задеты. */
@media only screen and (min-width: 768px){
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img{display:grid !important;grid-template-columns:repeat(6, minmax(0,1fr));gap:14px !important;}
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img > div{width:auto !important;min-width:0;}
    #modalUploader #YaDiskGalleryMd .b-upfile__soc__img > div > div{width:100% !important;height:auto !important;aspect-ratio:1 / 1;}
    #modalUploader #YaDiskGalleryMd .b-upfile__ya_disk .viewport{padding:0 12px 0 0 !important;}
}

/* превью в плитке ленты «Готовим фото» — <img> вместо CSS-фона (ради referrerpolicy) */
.upl-prep__th img{width:100%;height:100%;object-fit:cover;display:block;border-radius:inherit;}

/* ============================================================
   Фотосток: поиск + сетка превью + «Добавить выбранные (N)».
   Язык вкладки Я.Диска: колонка [поиск | сетка | действия], сетка
   6 колонок на десктопе / 3 на мобильном. Превью идут через наш
   серверный прокси (StockImage) — CDN стока гео-блочен для РФ.
   Имя провайдера в UI не упоминается.
   ============================================================ */
#modalUploader #StockGalleryMd{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:14px;}
/* строка поиска — по центру, как форма ссылки Я.Диска */
#modalUploader .upl-stock-search{flex:0 0 auto;display:flex;gap:8px;align-items:center;width:100%;max-width:520px;margin:0 auto;}
#modalUploader .upl-stock-search input{flex:1;min-width:0;height:calc(var(--upl-u) * 2.5) !important;border-radius:var(--upl-radius) !important;}
#modalUploader .upl-stock-search #stockSearchBtn{flex:none;height:calc(var(--upl-u) * 2.5);padding:0 calc(var(--upl-u) * 1.05);border:0;border-radius:var(--upl-radius);background:var(--upl-acc);color:var(--upl-acc-contrast);font-weight:500;font-size:calc(var(--upl-u) * 0.95);line-height:calc(var(--upl-u) * 2.5);cursor:pointer;}
#modalUploader .upl-stock-search #stockSearchBtn:hover{filter:brightness(.95);}
#modalUploader .upl-stock-tags{flex:0 0 auto;display:flex;flex-wrap:nowrap;gap:6px;align-items:center;justify-content:safe center;overflow-x:auto;width:100%;max-width:520px;margin:6px auto 0;padding:2px 0;scrollbar-width:none;-ms-overflow-style:none;}
#modalUploader .upl-stock-tags::-webkit-scrollbar{display:none;}
#modalUploader .upl-stock-tag{flex:none;white-space:nowrap;border:1px solid var(--upl-line);border-radius:999px;background:transparent;color:var(--upl-ink-2);font-weight:400;font-size:calc(var(--upl-u) * 0.75);line-height:1;padding:calc(var(--upl-u) * 0.32) calc(var(--upl-u) * 0.65);cursor:pointer;transition:border-color .15s,color .15s,background .15s;}
#modalUploader .upl-stock-tag:hover{background:var(--upl-track);color:var(--upl-ink);}
#modalUploader .upl-stock-tag.is-active{border-color:var(--upl-acc);color:var(--upl-acc);background:transparent;}
/* зона сетки: скролл внутри, спиннер-оверлей позиционируется от неё */
#modalUploader .b-upfile__stock{flex:1 1 auto;min-height:calc(var(--upl-u) * 8);height:auto !important;position:relative;}
#modalUploader .b-upfile__stock .viewport{max-height:none !important;height:100% !important;overflow:auto !important;padding:0 12px 0 0 !important;}
#modalUploader #StockGalleryMd .b-upfile__soc__img{display:grid !important;grid-template-columns:repeat(6, minmax(0,1fr));gap:14px !important;}
#modalUploader #StockGalleryMd .b-upfile__soc__img > div{width:auto !important;min-width:0;}
#modalUploader #StockGalleryMd .b-upfile__soc__img > div > div{width:100% !important;height:auto !important;aspect-ratio:1 / 1;}
/* «Показать ещё» — спокойный ghost по центру под сеткой (скроллится вместе с ней) */
#modalUploader .upl-stock-more{text-align:center;padding:12px 0 4px;}
#modalUploader .upl-stock-more button{background:transparent;border:1px solid var(--upl-line-strong);border-radius:var(--upl-radius);color:var(--upl-acc);font-weight:500;font-size:calc(var(--upl-u) * 0.92);padding:calc(var(--upl-u) * 0.5) calc(var(--upl-u) * 1.4);cursor:pointer;}
#modalUploader .upl-stock-more button:hover{background:var(--upl-track);}
#modalUploader .upl-stock-more button[disabled]{opacity:.5;cursor:default;}
/* спиннер на время запроса — поверх зоны сетки (глобальный троббер отключён выше) */
#modalUploader .upl-stock-throbber{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.6);z-index:2;border-radius:var(--upl-radius);}
/* человекочитаемая ошибка запроса */
#modalUploader .upl-stock-error{padding:calc(var(--upl-u) * 2) 12px;text-align:center;color:var(--upl-ink-2);font-size:calc(var(--upl-u) * 0.95);}
/* действия: примари-кнопка по центру, в языке рядов кнопок других вкладок */
#modalUploader .upl-stock-actions{flex:0 0 auto;display:flex;justify-content:center;gap:10px;margin:0 !important;padding:0 0 4px;}
@media only screen and (max-width: 767px){
    #modalUploader #tabs-8{padding:0 !important;}
    #modalUploader #StockGalleryMd .b-upfile__soc__img{grid-template-columns:repeat(3, minmax(0,1fr));gap:12px !important;}
    #modalUploader .upl-stock-search #stockSearchBtn{font-size:calc(var(--upl-u) * 0.85);}
    #modalUploader #stockAddSelected{white-space:nowrap;font-size:calc(var(--upl-u) * 0.78) !important;padding:calc(var(--upl-u) * 0.55) 10px !important;}
}
/* ============================================================
   NIGHT THEME для загрузчика (палитра A «нейтральный графит»). Включается
   классом pp-night на <body> (ставит pp-theme.js). Зеркалит --pp-* гамму
   на родных токенах --upl-*. Специфичность body.pp-night #modalUploader выше
   светлого дефолта #modalUploader.
   ============================================================ */
body.pp-night #modalUploader{
    --upl-acc:#4a94e0;
    --upl-acc-contrast:#ffffff;
    --upl-acc-soft:#1e3a57;
    --upl-acc-ink:#a8cdf0;
    --upl-surface:#25272c;
    --upl-canvas:#1b1d21;
    --upl-track:#2d3036;
    --upl-ink:#e9eaec;
    --upl-ink-2:#a6adb8;
    --upl-muted:#6d737d;
    --upl-line:#33363c;
    --upl-line-strong:#43474f;
}
/* точечные overrides литеральных светлых фонов панели загрузчика */
body.pp-night #modalUploader .progress{background:var(--upl-track);}
body.pp-night #modalUploader .upl-prep__th{background-color:var(--upl-track);}
body.pp-night #modalUploader .upl-prep__bar{background:var(--upl-track);}
body.pp-night #modalUploader .upl-stock-throbber{background:rgba(0,0,0,.5);}
body.pp-night #modalUploader .b-fileup__comp__text2 .upl-drop-ic:hover{background:var(--upl-acc-soft);}
/* графитовая модалка: контейнер/шапка/футер вместо белого bootstrap-фона, крестик и «Печать:» — ink2 */
body.pp-night #modalUploader .modal-content{background:var(--upl-surface);}
body.pp-night #modalUploader .modal-header{background:var(--upl-surface);}
body.pp-night #modalUploader .modal-footer{background:var(--upl-surface);}
body.pp-night #modalUploader .modal-header .close{color:var(--upl-ink-2);text-shadow:none;opacity:1;}
body.pp-night #modalUploader .full-interface h4{color:var(--upl-ink-2);}

/* ============================================================
   Переключатель темы в шапке загрузчика (кнопку инжектит pp-theme.js).
   Стили на --upl-* и скоуп под #modalUploader, чтобы не конфликтовать с
   глобальным .pp-theme-btn из photoprint-reskin.css на общей странице.
   ============================================================ */
#modalUploader .pp-theme-btn{
    position:relative; flex:none; width:38px; height:38px; padding:0;
    display:inline-flex; align-items:center; justify-content:center;
    background:var(--upl-surface); color:var(--upl-ink);
    border:1px solid var(--upl-line-strong); border-radius:10px;
    cursor:pointer; -webkit-appearance:none; appearance:none;
    transition:background .15s ease, border-color .15s ease;
}
#modalUploader .pp-theme-btn:hover{background:var(--upl-track);}
#modalUploader .pp-theme-btn svg{width:20px;height:20px;display:block;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
#modalUploader .pp-theme-btn__badge{
    position:absolute; top:-5px; right:-5px; width:15px; height:15px; box-sizing:border-box;
    border-radius:50%; background:var(--upl-acc); color:var(--upl-acc-contrast);
    border:2px solid var(--upl-surface);
    font-size:9px; font-weight:700; line-height:11px; text-align:center; letter-spacing:0;
}
#modalUploader .pp-theme-btn__toast{
    position:absolute; top:calc(100% + 8px); left:0; right:auto; z-index:1000;
    background:rgba(26,29,34,.92); color:#fff; border-radius:8px;
    padding:6px 10px; font-size:12px; line-height:1.2; white-space:nowrap;
    pointer-events:none; opacity:0; transform:translateY(-4px);
    transition:opacity .15s ease, transform .15s ease;
}
#modalUploader .pp-theme-btn__toast.is-show{opacity:1;transform:none;}
/* в шапке модалки — слева (справа стоит .close) */
#modalUploader .modal-header .pp-theme-btn{position:absolute;left:14px;top:12px;z-index:2;}

/* Смена темы (pp-theme.js, View Transition API): замедляем дефолтный кроссфейд ~0.25s → 0.45s (пожелание приёмки). */
::view-transition-old(root),
::view-transition-new(root){ animation-duration:.45s; }

/* ============================================================================
   PP-FX: витринная анимация ленты «Готовим фото» (линза: кадр по лицу,
   красные глаза было/стало). Всё на токенах --upl-* — ночная и партнёрская
   темы работают из коробки. См. FileUploader2.js, блок PP-FX.
   ============================================================================ */
#file-upload-progress .upl-prep__in{position:relative;}

/* бейдж «фото улучшено» на плитке */
.upl-prep__th .pp-enh-badge{
    position:absolute; left:6px; bottom:6px; z-index:2;
    width:20px; height:20px; border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    background:color-mix(in srgb, var(--upl-surface) 88%, transparent);
    box-shadow:0 2px 8px -2px rgba(20,24,31,.35);
    color:var(--upl-acc); pointer-events:none;
    animation:pp-enh-pop .38s cubic-bezier(.2,1.4,.4,1) both;
}
.upl-prep__th .pp-enh-badge svg{width:12px;height:12px;display:block;}
@keyframes pp-enh-pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
/* улучшенная плитка: вместо зелёного тона с галочкой — чистое превью с бейджем */
.upl-prep__th.is-enhanced.is-done::before{display:none;}
.upl-prep__th.is-enhanced.is-done::after{background:transparent;}

/* линза */
.pp-fx-lens{
    position:absolute; z-index:40; left:0; top:0;
    border-radius:14px; overflow:hidden; background:#000;
    box-shadow:0 30px 70px -18px rgba(20,24,31,.55), 0 0 0 1px rgba(255,255,255,.06);
    transform-origin:0 0; will-change:transform;
}
.pp-fx-world{position:absolute;left:0;top:0;transform-origin:0 0;}
.pp-fx-world img{position:absolute;left:0;top:0;display:block;max-width:none;}

/* скан-линия */
.pp-fx-scan{position:absolute;left:0;right:0;top:-12%;height:12%;z-index:5;pointer-events:none;opacity:0;}
.pp-fx-scan::before{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--upl-acc);box-shadow:0 0 14px 2px var(--upl-acc);}
.pp-fx-scan::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg, transparent, color-mix(in srgb, var(--upl-acc) 26%, transparent));}

/* AF-уголки вокруг лица (в координатах исходника, внутри .pp-fx-world) */
.pp-fx-af{position:absolute;z-index:6;opacity:0;border-width:4px;}
.pp-fx-af i{position:absolute;width:26%;height:26%;border:0 solid #fff;border-width:0;filter:drop-shadow(0 0 6px rgba(47,127,209,.9));}
.pp-fx-af i:nth-child(1){left:0;top:0;border-left-width:inherit;border-top-width:inherit;border-style:solid;border-color:#fff;border-top-left-radius:8px;}
.pp-fx-af i:nth-child(2){right:0;top:0;border-right-width:inherit;border-top-width:inherit;border-style:solid;border-color:#fff;border-top-right-radius:8px;}
.pp-fx-af i:nth-child(3){left:0;bottom:0;border-left-width:inherit;border-bottom-width:inherit;border-style:solid;border-color:#fff;border-bottom-left-radius:8px;}
.pp-fx-af i:nth-child(4){right:0;bottom:0;border-right-width:inherit;border-bottom-width:inherit;border-style:solid;border-color:#fff;border-bottom-right-radius:8px;}
.pp-fx-af.is-in{animation:pp-fx-af-in .42s cubic-bezier(.2,1.5,.4,1) both;}
@keyframes pp-fx-af-in{from{opacity:0;transform:scale(1.6)}60%{opacity:1}to{opacity:1;transform:scale(1)}}

/* чип-подпись */
.pp-fx-chip{
    position:absolute; left:50%; top:9px; transform:translateX(-50%) translateY(-6px); z-index:10;
    padding:5px 11px; border-radius:999px; white-space:nowrap;
    background:color-mix(in srgb, var(--upl-surface) 86%, transparent);
    color:var(--upl-ink); font-size:var(--ppfx-chipfs,12.5px); font-weight:500;
    box-shadow:0 4px 14px -4px rgba(20,24,31,.4);
    display:flex; align-items:center; gap:6px;
    opacity:0; transition:opacity .28s, transform .28s;
}
.pp-fx-chip.is-on{opacity:1;transform:translateX(-50%) translateY(0);}
.pp-fx-chip .ic{width:13px;height:13px;color:var(--upl-acc);flex:none;display:flex;}
.pp-fx-chip .ic svg{width:13px;height:13px;display:block;}
.pp-fx-chip.is-ok .ic{color:#1d9e75;}

/* шторка было/стало */
.pp-fx-line{position:absolute;top:0;bottom:0;width:2px;z-index:8;background:#fff;box-shadow:0 0 12px 1px rgba(255,255,255,.9);opacity:0;}
.pp-fx-tag{
    position:absolute; z-index:8; bottom:8px; padding:3px 8px; border-radius:6px;
    font-size:11px; font-weight:600; letter-spacing:.02em; color:#fff;
    background:rgba(20,24,31,.55); opacity:0; transition:opacity .25s;
}
.pp-fx-tag.is-on{opacity:1;}
.pp-fx-tag--before{right:8px;}
.pp-fx-tag--after{left:8px;}

/* вспышка успеха */
.pp-fx-flash{position:absolute;inset:0;z-index:7;background:#1d9e75;opacity:0;pointer-events:none;}
.pp-fx-flash.is-go{animation:pp-fx-flash .5s ease-out both;}
@keyframes pp-fx-flash{0%{opacity:0}25%{opacity:.28}100%{opacity:0}}

/* итоговая плашка */
#file-upload-progress .upl-prep__tip.is-result{background:rgba(30,158,106,.18);}
#file-upload-progress .upl-prep__tip.is-result .js-prep-tip-tx{color:#1d9e75;}
#file-upload-progress .upl-prep__tip.is-result .js-prep-tip-ic{color:#1d9e75;}
body.pp-night #file-upload-progress .upl-prep__tip.is-result .js-prep-tip-tx{color:#5ecfa4;}

@media (prefers-reduced-motion: reduce){
    .pp-fx-lens{display:none;}
    .upl-prep__th .pp-enh-badge{animation:none;}
}

/* PP-FX: рамка печатного кадра выбранного формата (внутри .pp-fx-world, координаты исходника) */
.pp-fx-frame{position:absolute;z-index:6;border:2px solid #fff;box-shadow:0 0 0 9999px rgba(10,12,16,.45);opacity:0;transition:opacity .3s;}
.pp-fx-frame.is-in{opacity:1;}
.pp-fx-frame__tag{position:absolute;background:rgba(20,24,31,.6);color:#fff;font-weight:600;line-height:1.2;white-space:nowrap;}

/* PP-FX: кроп-анимация прямо в плитке (параллельная, без линзы) */
.upl-prep__th .pp-tile-fx{position:absolute;inset:0;z-index:3;pointer-events:none;border-radius:inherit;overflow:hidden;}
.pp-tile-fx__scan{position:absolute;left:0;right:0;top:-14%;height:14%;opacity:.95;}
.pp-tile-fx__scan::before{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--upl-acc);box-shadow:0 0 8px 1px var(--upl-acc);}
.pp-tile-fx__scan::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent,color-mix(in srgb, var(--upl-acc) 28%, transparent));}
.pp-tile-fx__scan.is-go{transition:top .24s linear;top:100%;}
.pp-tile-fx__af{position:absolute;opacity:0;}
.pp-tile-fx__af i{position:absolute;width:30%;height:30%;border:0 solid #fff;filter:drop-shadow(0 0 4px rgba(47,127,209,.9));}
.pp-tile-fx__af i:nth-child(1){left:0;top:0;border-left-width:2px;border-top-width:2px;border-top-left-radius:4px;}
.pp-tile-fx__af i:nth-child(2){right:0;top:0;border-right-width:2px;border-top-width:2px;border-top-right-radius:4px;}
.pp-tile-fx__af i:nth-child(3){left:0;bottom:0;border-left-width:2px;border-bottom-width:2px;border-bottom-left-radius:4px;}
.pp-tile-fx__af i:nth-child(4){right:0;bottom:0;border-right-width:2px;border-bottom-width:2px;border-bottom-right-radius:4px;}
.pp-tile-fx__af.is-in{animation:pp-tile-af .32s cubic-bezier(.2,1.5,.4,1) both;}
.pp-tile-fx__af.is-out{transition:opacity .3s;opacity:0!important;}
@keyframes pp-tile-af{from{opacity:0;transform:scale(1.8)}60%{opacity:1}to{opacity:1;transform:scale(1)}}

/* ============================================================
   QR-UPLOAD: карточка «Или с телефона» рядом с дропзоной (#tabs-1).
   Внутри #modalUploader — токены/партнёрская тема/ночной режим наследуются.
   Сам QR всегда тёмный-на-белом на белой подложке (инверсия кода запрещена
   правилами сканируемости) — ночного override для .upl-qr-box нет сознательно.
   ============================================================ */
#modalUploader .upl-duo{display:flex;gap:14px;align-items:stretch;min-height:0;}
#modalUploader .upl-duo #file-uploader.b-fileup__comp{flex:1 1 auto;min-width:0;}
#modalUploader .upl-qr-side{flex:0 0 calc(var(--upl-u) * 12.5);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:calc(var(--upl-u) * 0.55);background:var(--upl-canvas);border:1px solid var(--upl-line);border-radius:var(--upl-radius-lg);padding:calc(var(--upl-u) * 1.0) calc(var(--upl-u) * 0.9);}
#modalUploader .upl-qr-title{font-size:calc(var(--upl-u) * 0.92);font-weight:500;color:var(--upl-ink);}
#modalUploader .upl-qr-box{background:#fff;border-radius:12px;padding:calc(var(--upl-u) * 0.4);line-height:0;box-shadow:0 1px 4px rgba(20,24,31,.12);}
#modalUploader .upl-qr-box svg{display:block;width:calc(var(--upl-u) * 8.6);height:calc(var(--upl-u) * 8.6);}
#modalUploader .upl-qr-sub{font-size:calc(var(--upl-u) * 0.74);color:var(--upl-muted);line-height:1.45;}
#modalUploader .upl-qr-ttl{font-size:calc(var(--upl-u) * 0.7);color:var(--upl-muted);}
#modalUploader .upl-qr-ttl b{font-weight:600;color:var(--upl-ink-2);font-variant-numeric:tabular-nums;}
#modalUploader .upl-qr-counter{display:inline-flex;align-items:center;gap:8px;background:var(--upl-acc-soft);color:var(--upl-acc-ink);border-radius:999px;padding:6px 13px;font-size:calc(var(--upl-u) * 0.76);}
#modalUploader .upl-qr-dot{width:8px;height:8px;border-radius:50%;background:var(--upl-acc);animation:upl-qr-pulse 1.6s ease-in-out infinite;}
@keyframes upl-qr-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.75)}}
#modalUploader .upl-qr-counter.is-zero{background:var(--upl-track);color:var(--upl-ink-2);}
#modalUploader .upl-qr-counter.is-zero .upl-qr-dot{background:var(--upl-muted);animation:none;}
#modalUploader a.upl-qr-refresh,#modalUploader a.upl-qr-refresh:visited{color:var(--upl-muted);font-size:calc(var(--upl-u) * 0.7);text-decoration:underline;}
#modalUploader a.upl-qr-refresh:hover{color:var(--upl-ink);}
/* скрытие: мобильный вьюпорт (телефон уже в руках) и идущая загрузка «Готовим фото» */
@media only screen and (max-width: 767px){#modalUploader .upl-qr-side{display:none !important;}}
#modalUploader.upl-uploading .upl-qr-side{display:none !important;}

/* ===== «Готовим фото»: стабильная высота инфо-подсказки =====
   Высота .upl-prep__tip зависела от длины текста, а в раскладке ТРИ margin-top:auto
   (head/thumbs/tip) — изменение высоты подсказки пересчитывало весь flex-бюджет, и
   полоски прогресса прыгали при каждой ротации. Фикс: высота ровно под 3 строки +
   line-clamp (устойчиво к любым будущим текстам/локализации). Селектор только на
   основную панель — мини-панель (#mini-file-upload-progress) не центрируется и стабильна. */
#file-upload-progress .upl-prep__tip{
  /* 3 строки: font-size .8u x line-height 1.45 x 3 + паддинги 11+11 */
  height:calc(var(--upl-u) * 0.8 * 1.45 * 3 + 22px);
  min-height:0; overflow:hidden; align-items:center;
}
#file-upload-progress .upl-prep__tip-tx{
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}
