/*
 * Единый слой уведомлений (YFNotify) и диалогов (YFConfirm / YFPrompt).
 * Всегда поверх модалок Bootstrap (1055) и выпадающих списков.
 * «Малахит» — базовые токены ниже, «Эфир» — через --rd-*; светлый и тёмный режимы.
 */
.yf-notify-stack,
.yf-dialog {
    --yfn-surface: rgba(255, 255, 255, .97);
    --yfn-ink: #13211d;
    --yfn-muted: #5f6f6a;
    --yfn-line: rgba(16, 48, 40, .12);
    --yfn-shadow: 0 1px 2px rgba(10, 40, 32, .06), 0 18px 44px -14px rgba(10, 40, 32, .28);
    --yfn-fill: rgba(16, 48, 40, .06);
    --yfn-accent: #148a66;
    --yfn-accent-ink: #ffffff;
    --yfn-success: #16a06b;
    --yfn-error: #e0474c;
    --yfn-warning: #d9820b;
    --yfn-info: #2f6fe4;
    --yfn-radius: 16px;
    --yfn-font: inherit;
    font-family: var(--yfn-font);
}

body.dark-theme .yf-notify-stack,
body.dark-theme .yf-dialog,
body.yf-admin.is-dark .yf-notify-stack,
body.yf-admin.is-dark .yf-dialog {
    --yfn-surface: rgba(19, 30, 44, .97);
    --yfn-ink: #eef4f8;
    --yfn-muted: #9fb0bd;
    --yfn-line: rgba(255, 255, 255, .09);
    --yfn-shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 22px 50px -14px rgba(0, 0, 0, .65);
    --yfn-fill: rgba(255, 255, 255, .06);
    --yfn-accent: #22a97c;
    --yfn-success: #34c38f;
    --yfn-error: #ff6b70;
    --yfn-warning: #f0a33a;
    --yfn-info: #6c9dff;
}

:root body.yf-redesign.yf-dashboard-auth .yf-notify-stack,
:root body.yf-redesign.yf-dashboard-auth .yf-dialog {
    --yfn-surface: var(--rd-surface-glass-strong);
    --yfn-ink: var(--rd-ink);
    --yfn-muted: var(--rd-muted);
    --yfn-line: var(--rd-line);
    --yfn-shadow: var(--rd-shadow-modal);
    --yfn-fill: var(--rd-fill-soft);
    --yfn-accent: var(--rd-accent);
    --yfn-accent-ink: var(--rd-on-accent);
    --yfn-success: var(--rd-positive);
    --yfn-error: var(--rd-negative);
    --yfn-warning: var(--rd-warning);
    --yfn-info: var(--rd-info);
    --yfn-radius: var(--rd-radius-lg);
    --yfn-font: var(--rd-font);
}

/* ── Тосты: графитовая капсула поверх интерфейса, цвет несёт только иконка ── */
.yf-notify-stack {
    --yft-bg: rgba(24, 27, 31, .94);
    --yft-ink: #f4f6f8;
    --yft-muted: rgba(235, 240, 245, .66);
    --yft-edge: rgba(255, 255, 255, .08);
    --yft-shadow: 0 1px 0 rgba(255, 255, 255, .06) inset, 0 12px 32px -8px rgba(8, 12, 16, .45), 0 3px 8px rgba(8, 12, 16, .16);
    --yft-success: #3ddc97;
    --yft-error: #ff6b6b;
    --yft-warning: #ffbf47;
    --yft-info: #7fb2ff;
    position: fixed;
    top: max(18px, env(safe-area-inset-top));
    right: max(18px, env(safe-area-inset-right));
    z-index: 2147483000;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 8px;
    width: min(360px, calc(100vw - 36px));
    pointer-events: none;
}
/* «Малахит» светлый: глубокий лесной оттенок вместо графита */
body.light-theme:not(.yf-redesign) .yf-notify-stack { --yft-bg: rgba(12, 33, 27, .95); }
/* Тёмные режимы: капсула светлее фона, чтобы отделиться от страницы */
body.dark-theme .yf-notify-stack,
body.yf-admin.is-dark .yf-notify-stack {
    --yft-bg: rgba(44, 47, 54, .96);
    --yft-edge: rgba(255, 255, 255, .1);
    --yft-shadow: 0 1px 0 rgba(255, 255, 255, .07) inset, 0 14px 36px -8px rgba(0, 0, 0, .7), 0 3px 10px rgba(0, 0, 0, .35);
}
body.dark-theme:not(.yf-redesign) .yf-notify-stack { --yft-bg: rgba(26, 42, 38, .97); }

.yf-notify {
    --yft-tone: var(--yft-info);
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 11px;
    width: 100%;
    padding: 11px 12px 11px 13px;
    border: 1px solid var(--yft-edge);
    border-radius: 14px;
    background: var(--yft-bg);
    color: var(--yft-ink);
    box-shadow: var(--yft-shadow);
    -webkit-backdrop-filter: blur(20px) saturate(1.5);
    backdrop-filter: blur(20px) saturate(1.5);
    font-family: var(--yfn-font);
    pointer-events: auto;
    opacity: 0;
    transform: translate3d(0, -10px, 0) scale(.96);
    transform-origin: top right;
    transition: opacity .22s ease, transform .34s cubic-bezier(.2, 1.1, .3, 1);
}
.yf-notify.is-visible { opacity: 1; transform: none; }
.yf-notify.is-leaving { opacity: 0; transform: translate3d(12px, 0, 0) scale(.97); transition-duration: .18s, .22s; }
.yf-notify.is-bumped { animation: yf-notify-bump .34s ease; }
.yf-notify--success { --yft-tone: var(--yft-success); }
.yf-notify--error { --yft-tone: var(--yft-error); }
.yf-notify--warning { --yft-tone: var(--yft-warning); }
.yf-notify--info { --yft-tone: var(--yft-info); }

.yf-notify__icon {
    position: relative;
    flex: 0 0 22px;
    display: grid;
    place-items: center;
    width: 22px;
    height: 22px;
    margin-top: 0;
    border-radius: 50%;
    background: var(--yft-tone);
    color: #0d1114;
    font-size: 14px;
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--yft-tone) 18%, transparent);
}
.yf-notify__icon i { line-height: 1; -webkit-text-stroke: .4px currentColor; }
.yf-notify__body { flex: 1 1 auto; min-width: 0; padding-top: 1px; }
.yf-notify-stack .yf-notify .yf-notify__title {
    display: block;
    margin: 0;
    color: var(--yft-ink) !important;
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.35;
    letter-spacing: -.005em;
}
.yf-notify-stack .yf-notify .yf-notify__message {
    margin: 2px 0 0;
    color: var(--yft-muted) !important;
    font-size: 13px;
    line-height: 1.42;
    overflow-wrap: anywhere;
    white-space: pre-line;
}
.yf-notify__close {
    flex: 0 0 24px;
    display: grid;
    place-items: center;
    width: 24px;
    height: 24px;
    margin: -1px -3px 0 2px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--yft-muted);
    font-size: 13px;
    cursor: pointer;
    opacity: .55;
    transition: opacity .15s ease, background-color .15s ease, color .15s ease;
}
.yf-notify:hover .yf-notify__close,
.yf-notify__close:focus-visible { opacity: 1; }
.yf-notify__close:hover { background: rgba(255, 255, 255, .1); color: var(--yft-ink); }
.yf-notify__close:focus-visible { outline: 2px solid var(--yft-tone); outline-offset: 1px; }

.yf-notify--single { align-items: center; }
.yf-notify--single .yf-notify__body { padding-top: 0; }
.yf-notify--single .yf-notify__close { margin-top: 0; }

@keyframes yf-notify-bump { 35% { transform: scale(1.025); } }

/* ── Диалоги ── */
body.yf-dialog-open { overflow: hidden; }

.yf-dialog {
    position: fixed;
    inset: 0;
    z-index: 2147482000;
    display: grid;
    place-items: center;
    padding: 16px;
}
.yf-dialog__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(8, 20, 17, .46);
    -webkit-backdrop-filter: blur(3px);
    backdrop-filter: blur(3px);
    opacity: 0;
    transition: opacity .18s ease;
}
.yf-dialog__panel {
    position: relative;
    width: min(420px, 100%);
    padding: 24px 22px 20px;
    border: 1px solid var(--yfn-line);
    border-radius: var(--yfn-radius);
    background: var(--yfn-surface);
    color: var(--yfn-ink);
    box-shadow: var(--yfn-shadow);
    text-align: center;
    opacity: 0;
    transform: translate3d(0, 10px, 0) scale(.97);
    transition: opacity .2s cubic-bezier(.2, .8, .2, 1), transform .24s cubic-bezier(.2, .8, .2, 1);
}
.yf-dialog.is-visible .yf-dialog__backdrop { opacity: 1; }
.yf-dialog.is-visible .yf-dialog__panel { opacity: 1; transform: none; }

.yf-dialog__icon {
    display: inline-grid;
    place-items: center;
    width: 48px;
    height: 48px;
    margin-bottom: 12px;
    border-radius: 15px;
    background: color-mix(in srgb, var(--yfn-accent) 13%, transparent);
    color: var(--yfn-accent);
    font-size: 25px;
}
.yf-dialog--danger .yf-dialog__icon {
    background: color-mix(in srgb, var(--yfn-error) 13%, transparent);
    color: var(--yfn-error);
}
.yf-dialog .yf-dialog__title {
    margin: 0;
    color: var(--yfn-ink);
    font-size: 18px;
    font-weight: 750;
    line-height: 1.3;
    letter-spacing: -.015em;
}
.yf-dialog__message {
    margin: 8px 0 0;
    color: var(--yfn-muted);
    font-size: 14px;
    line-height: 1.5;
    white-space: pre-line;
    overflow-wrap: anywhere;
}
.yf-dialog__field {
    display: grid;
    gap: 6px;
    margin: 16px 0 0;
    text-align: left;
}
.yf-dialog__field > span { color: var(--yfn-muted); font-size: 12.5px; font-weight: 600; }
.yf-dialog__field input,
.yf-dialog__field textarea {
    width: 100%;
    min-height: 42px;
    padding: 9px 12px;
    border: 1px solid var(--yfn-line);
    border-radius: 11px;
    background: var(--yfn-fill);
    color: var(--yfn-ink);
    font: inherit;
    font-size: 14px;
    outline: none;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.yf-dialog__field input:focus,
.yf-dialog__field textarea:focus {
    border-color: var(--yfn-accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--yfn-accent) 22%, transparent);
}
.yf-dialog__error { margin: 6px 0 0; color: var(--yfn-error); font-size: 12.5px; text-align: left; }

.yf-dialog__actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-top: 20px;
}
.yf-dialog .yf-dialog__btn {
    min-height: 42px;
    padding: 9px 14px;
    border: 1px solid transparent;
    border-radius: 12px;
    font: inherit;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
    transition: background-color .15s ease, border-color .15s ease, filter .15s ease;
}
.yf-dialog .yf-dialog__btn:focus-visible { outline: 2px solid var(--yfn-accent); outline-offset: 2px; }
.yf-dialog .yf-dialog__btn--ghost {
    border-color: var(--yfn-line);
    background: var(--yfn-fill);
    color: var(--yfn-ink);
}
.yf-dialog .yf-dialog__btn--ghost:hover { border-color: color-mix(in srgb, var(--yfn-ink) 22%, transparent); }
.yf-dialog .yf-dialog__btn--primary { background: var(--yfn-accent); color: var(--yfn-accent-ink); }
.yf-dialog .yf-dialog__btn--primary:hover { filter: brightness(1.07); }
.yf-dialog--danger .yf-dialog__btn--primary { background: var(--yfn-error); color: #ffffff; }
.yf-dialog--danger .yf-dialog__btn--primary:focus-visible { outline-color: var(--yfn-error); }

@media (max-width: 575.98px) {
    .yf-notify-stack { top: max(10px, env(safe-area-inset-top)); right: 10px; left: 10px; width: auto; align-items: stretch; }
    .yf-dialog { align-items: end; padding: 10px; }
    .yf-dialog__panel { width: 100%; }
}

body.yf-reduced-motion .yf-notify,
body.yf-reduced-motion .yf-dialog__panel,
body.yf-reduced-motion .yf-dialog__backdrop { transition: none; transform: none; }
body.yf-reduced-motion .yf-notify.is-bumped { animation: none; }
@media (prefers-reduced-motion: reduce) {
    .yf-notify,
    .yf-dialog__panel { transition-duration: .01s; }
}
.yf-notify--info .yf-notify__icon i { font-size: 20px; -webkit-text-stroke: .6px currentColor; }

/* ── YFBusy: button spinner and skeleton fields instead of loading texts ── */
.yf-is-busy { position: relative; color: transparent !important; pointer-events: none; }
.yf-is-busy > * { visibility: hidden; }
.yf-is-busy::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 18px;
    height: 18px;
    margin: -9px 0 0 -9px;
    border: 2px solid rgba(255, 255, 255, .45);
    border-top-color: #ffffff;
    border-radius: 50%;
    animation: yf-busy-spin .7s linear infinite;
}
:is(.btn-outline-secondary, .yf-finance-action--secondary, .yf-admin-button, .btn-light).yf-is-busy::after { border-color: rgba(20, 60, 50, .2); border-top-color: #168265; }
@keyframes yf-busy-spin { to { transform: rotate(360deg); } }

.yf-skeleton-fields :is(input:not([type="checkbox"]):not([type="radio"]), select, textarea, .yf-money-input, .yf-amount-input, .yf-compact-date, .custom-select .selected, .yf-currency-picker__trigger, .yf-calculator-trigger) {
    color: transparent !important;
    border-color: transparent !important;
    background: linear-gradient(90deg, var(--yf-sk-base, #eaf0ee) 25%, var(--yf-sk-shine, #f7faf9) 45%, var(--yf-sk-base, #eaf0ee) 65%) 0 0 / 300% 100% !important;
    box-shadow: none !important;
    animation: yf-sk-shimmer 1.2s ease-in-out infinite;
    pointer-events: none;
}
.yf-skeleton-fields :is(input, textarea)::placeholder { color: transparent !important; }
.yf-skeleton-fields :is(.yf-money-input, .yf-amount-input, .yf-compact-date) > * { visibility: hidden; }
.yf-skeleton-line { display: block; width: min(220px, 60%); height: 12px; margin: 8px 0; border-radius: 999px; color: transparent !important;
    background: linear-gradient(90deg, var(--yf-sk-base, #eaf0ee) 25%, var(--yf-sk-shine, #f7faf9) 45%, var(--yf-sk-base, #eaf0ee) 65%) 0 0 / 300% 100%;
    animation: yf-sk-shimmer 1.2s ease-in-out infinite; }
body.dark-theme { --yf-sk-base: rgba(255, 255, 255, .06); --yf-sk-shine: rgba(255, 255, 255, .12); }
:root body.yf-redesign.yf-dashboard-auth { --yf-sk-base: var(--rd-fill-soft); --yf-sk-shine: var(--rd-fill-hover); }
@keyframes yf-sk-shimmer { from { background-position: 100% 0; } to { background-position: 0 0; } }
body.yf-reduced-motion :is(.yf-skeleton-fields *, .yf-skeleton-line, .yf-is-busy::after) { animation-duration: 2.4s; }

/* Action inside a toast (e.g. «Распределить» after saving an income): a calm pill on the toast surface */
.yf-notify__action {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-top: 9px;
    padding: 7px 13px 7px 11px;
    border: 0;
    border-radius: 999px;
    background: color-mix(in srgb, var(--yft-tone, #6fd3ad) 22%, transparent);
    color: var(--yft-ink, #fff);
    font: inherit;
    font-size: 12.5px;
    font-weight: 700;
    line-height: 1;
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--yft-tone, #6fd3ad) 40%, transparent);
    transition: background-color .18s ease;
}
.yf-notify__action i { color: var(--yft-tone, #6fd3ad); font-size: 15px; }
.yf-notify__action:hover { background: color-mix(in srgb, var(--yft-tone, #6fd3ad) 34%, transparent); }
.yf-notify__action:focus-visible { outline: 2px solid var(--yft-tone, #6fd3ad); outline-offset: 2px; }
.yf-notify__action:disabled { opacity: .6; }

.yf-currency-picker.is-currency-locked .yf-currency-picker__trigger {
    opacity: .55;
    cursor: not-allowed;
}
