.fm-fc {
    padding: 16px 16px 64px;
    color: var(--text);
    font-family: 'DM Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
    font-weight: 400;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

.fm-fc .fm-forecast-top,
.fm-fc .fm-forecast-bar,
.fm-fc .fm-forecast-state,
.fm-fc .fm-forecast-empty {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

.fm-fc .fm-forecast-top h1,
.fm-fc .fm-forecast-empty h2 {
    margin: 0;
}

.fm-fc .fm-forecast-top p,
.fm-fc .fm-forecast-empty p {
    margin: 4px 0 0;
    color: var(--muted);
}

.fm-fc .fm-forecast-empty {
    flex-direction: column;
    align-items: flex-start;
    padding: 32px 0;
}

.fm-fc .fm-forecast-state {
    justify-content: flex-start;
    padding: 24px 0;
}

.fm-fc .fm-forecast-bar {
    margin: 12px 0 20px;
    max-width: 360px;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 4px;
}

.fm-fc .fm-forecast-top {
    flex-wrap: nowrap;
    align-items: center;
}

.fm-fc .fm-forecast-top h1 {
    flex: 0 0 auto;
}

.fm-fc .fm-forecast-revision {
    width: 28rem;
    min-width: 16rem;
    max-width: 36vw;
    margin: 0;
}

.fm-fc .fm-forecast-revision.mud-input-control {
    margin-top: 0;
}

.fm-fc .fm-forecast-bar-actions {
    display: flex;
    align-items: center;
    gap: .55rem;
    min-height: 32px;
}

.fm-fc .fm-recalc {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    line-height: 1;
}

.fm-fc .fm-recalc-spinner {
    --fm-recalc-size: 22px;
    position: relative;
    display: block;
    width: var(--fm-recalc-size);
    height: var(--fm-recalc-size);
    flex: 0 0 var(--fm-recalc-size);
}

.fm-fc .fm-recalc-spinner > span {
    position: absolute;
    left: 50%;
    top: 0;
    width: 3.2px;
    height: 6.4px;
    margin-left: -1.6px;
    border-radius: 999px;
    background: #4ea3ff;
    transform-origin: 50% calc(var(--fm-recalc-size) / 2);
    transform: rotate(calc(var(--i) * 30deg));
    animation: fm-recalc-fade 1s linear infinite;
    animation-delay: calc(var(--i) * -83.333ms);
}

.fm-fc .fm-recalc--done {
    color: var(--fact, #4ade80);
    animation: fm-recalc-done-in .18s ease-out;
}

@keyframes fm-recalc-fade {
    0% { opacity: 1; }
    100% { opacity: .12; }
}

@keyframes fm-recalc-done-in {
    from { opacity: 0; transform: translateY(2px); }
    to { opacity: 1; transform: none; }
}

.fm-fc .fm-forecast-summary {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
    gap: 10px;
    margin-bottom: 16px;
}

.fm-fc .fm-forecast-summary article {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 14px 16px;
}

.fm-fc .fm-forecast-summary span {
    display: block;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--muted);
}

.fm-fc .fm-forecast-summary strong {
    display: block;
    margin-top: 6px;
    font-size: 1.15rem;
    font-weight: 400;
    font-variant-numeric: tabular-nums lining-nums;
    letter-spacing: -0.02em;
    color: var(--text);
}

.fm-fc .fm-forecast-actions {
    display: flex;
    gap: .5rem;
    align-items: center;
    flex: 1 1 auto;
    justify-content: flex-end;
    flex-wrap: wrap;
}

/* Вкладки */
.fm-fc .fm-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: .25rem;
    margin: 1rem 0 .75rem;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
}

.fm-fc .fm-tab {
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    padding: .5rem .9rem;
    cursor: pointer;
    color: var(--muted);
    font: inherit;
}

.fm-fc .fm-tab[aria-selected="true"] {
    color: var(--text);
    border-bottom-color: var(--brand, var(--mud-palette-primary));
}

/* Чипы блоков: подсветка, не фильтр расчёта */
.fm-fc .fm-chips {
    display: flex;
    flex-wrap: wrap;
    gap: .35rem;
    margin-bottom: .75rem;
}

.fm-fc .fm-chip {
    border: 1px solid var(--border);
    border-radius: 999px;
    background: none;
    padding: .2rem .7rem;
    cursor: pointer;
    color: inherit;
    font: inherit;
}

.fm-fc .fm-chip[aria-pressed="true"] {
    border-color: var(--brand, var(--mud-palette-primary));
    color: var(--brand, var(--mud-palette-primary));
}

.fm-fc .fm-cf-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .35rem .75rem;
    margin-bottom: .25rem;
}

.fm-fc .fm-cf-toolbar .fm-chips {
    margin-bottom: 0;
}

/* Действия дерева — не чипы фильтра проекта: иначе «Развернуть всё» читается как ещё один блок. */
.fm-fc .fm-cf-tree-actions .fm-chip {
    border-color: transparent;
    color: color-mix(in srgb, var(--text) 78%, transparent);
    padding-left: .45rem;
    padding-right: .45rem;
}

.fm-fc .fm-cf-tree-actions .fm-chip:hover,
.fm-fc .fm-cf-tree-actions .fm-chip:focus-visible {
    border-color: var(--border);
    color: var(--text);
    outline: none;
}

.fm-fc .fm-block {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 14px 16px 16px;
    margin-bottom: 12px;
}

.fm-fc .fm-block-dim {
    opacity: .45;
}

.fm-fc .fm-block h3 {
    margin: 0 0 .5rem;
    font-size: 1rem;
    font-weight: 500;
    color: var(--text);
}

.fm-fc .fm-block-sub {
    margin: 1.15rem 0 .4rem;
    font-size: .95rem;
    font-weight: 500;
    color: var(--text);
}

.fm-fc .fm-head-hint {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    margin-left: 5px;
    border: 1px solid color-mix(in srgb, var(--muted) 50%, transparent);
    border-radius: 50%;
    color: var(--muted);
    font-size: 10px;
    font-weight: 500;
    font-style: normal;
    letter-spacing: 0;
    line-height: 1;
    text-transform: none;
    vertical-align: 1px;
    cursor: help;
}

.fm-fc .fm-head-hint:hover,
.fm-fc .fm-head-hint:focus-visible {
    color: var(--text);
    border-color: color-mix(in srgb, var(--text) 40%, transparent);
    outline: none;
}

.fm-fc .fm-hint {
    color: var(--muted);
    font-size: .85rem;
    margin: .25rem 0 .5rem;
}

/* Причина погашенной кнопки «Сохранить»: правка могла остаться на другой вкладке. */
.fm-fc .fm-invalid {
    color: var(--mud-palette-error);
    align-self: center;
    margin: 0;
    max-width: 32rem;
}

.fm-fc .fm-annotation {
    padding: .35rem 0;
    border-bottom: 1px solid var(--mud-palette-lines-default);
}

/* Матрица месяцев: скролл только внутри контейнера */
.fm-fc .fm-matrix-wrap {
    overflow-x: auto;
    max-width: 100%;
}

.fm-fc .fm-matrix {
    border-collapse: separate;
    border-spacing: 0;
    font-size: 15px;
    font-variant-numeric: tabular-nums lining-nums;
    letter-spacing: -0.2px;
    white-space: nowrap;
}

/*
    Safari сжимает sticky-ячейку по тексту своей строки. Короткая «График, USD»
    тогда уезжает влево относительно EUR и заголовков месяцев. Ширину колонок
    задаём colgroup + table-layout: fixed, а внутри sticky — блок на всю ячейку.
*/
.fm-fc .fm-matrix--horizon {
    table-layout: fixed;
    width: max-content;
    --fm-frozen-col: 5.5rem;
}

.fm-fc .fm-matrix--horizon .fm-matrix-col-label {
    width: 22rem;
}

.fm-fc .fm-matrix--horizon .fm-matrix-col-month {
    width: 5.25rem;
}

.fm-fc .fm-matrix--horizon .fm-matrix-col-year,
.fm-fc .fm-matrix--horizon .fm-matrix-col-total {
    width: var(--fm-frozen-col);
}

.fm-fc .fm-matrix--lines .fm-matrix-col-label {
    width: 28rem;
}

.fm-fc .fm-matrix-head,
.fm-fc .fm-matrix-label,
.fm-fc .fm-matrix-cell,
.fm-fc .fm-matrix-year,
.fm-fc .fm-matrix-total {
    box-sizing: border-box;
    vertical-align: middle;
}

.fm-fc .fm-matrix-head {
    position: sticky;
    top: 0;
    z-index: 2;
    background: var(--surface);
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    color: color-mix(in srgb, var(--text) 82%, transparent);
    padding: .45rem .55rem;
    text-align: right;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .05em;
    text-transform: uppercase;
    white-space: nowrap;
}

.fm-fc .fm-matrix-sticky {
    position: sticky;
    left: 0;
    z-index: 3;
    background: var(--surface);
    text-align: left;
    min-width: 15rem;
    box-sizing: border-box;
    text-transform: none;
    letter-spacing: 0;
    font-size: 15px;
    font-weight: 500;
    color: var(--text);
}

.fm-fc .fm-matrix--horizon .fm-matrix-sticky {
    width: 22rem;
    min-width: 22rem;
    max-width: 22rem;
}

.fm-fc .fm-matrix--lines .fm-matrix-sticky {
    width: 28rem;
    min-width: 28rem;
    max-width: 28rem;
}

.fm-fc .fm-matrix-sticky-inner {
    display: block;
    width: 100%;
    box-sizing: border-box;
    overflow: hidden;
    text-overflow: ellipsis;
}

.fm-fc .fm-matrix-article {
    --fm-depth-pad: 0px;
    position: relative;
    display: flex;
    align-items: center;
    gap: .35rem;
    min-width: 0;
    padding-left: var(--fm-depth-pad);
}

.fm-fc .fm-matrix-toggle,
.fm-fc .fm-matrix-toggle-spacer {
    flex: 0 0 1.5rem;
    width: 1.5rem;
    height: 1.5rem;
}

.fm-fc .fm-matrix-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    padding: 0;
    border-radius: 4px;
    background: transparent;
    color: color-mix(in srgb, var(--text) 72%, transparent);
    cursor: pointer;
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-group > td.fm-matrix-sticky:hover .fm-matrix-toggle,
.fm-fc .fm-matrix-toggle:hover,
.fm-fc .fm-matrix-toggle:focus-visible {
    background: color-mix(in srgb, var(--text) 14%, transparent);
    color: var(--text);
    outline: none;
}

.fm-fc .fm-matrix-toggle:focus-visible {
    box-shadow: 0 0 0 2px color-mix(in srgb, var(--brand, #38BDF8) 70%, transparent);
}

.fm-fc .fm-matrix-chevron {
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 5px 0 5px 7px;
    border-color: transparent transparent transparent currentColor;
    transform: rotate(0deg);
    transition: transform .12s ease;
}

.fm-fc .fm-matrix-chevron.is-open {
    transform: rotate(90deg);
}

@media (prefers-reduced-motion: reduce) {
    .fm-fc .fm-matrix-chevron {
        transition: none;
    }
}

.fm-fc .fm-matrix-article-label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fm-fc .fm-matrix-child-count {
    flex: 0 0 auto;
    margin-left: auto;
    padding: 0 .35rem;
    border-radius: 999px;
    background: color-mix(in srgb, var(--text) 10%, transparent);
    color: var(--muted);
    font-size: 11px;
    font-weight: 600;
}

.fm-fc .fm-matrix-depth-1 { --fm-depth-pad: 1.1rem; }
.fm-fc .fm-matrix-depth-2 { --fm-depth-pad: 2.2rem; }
.fm-fc .fm-matrix-depth-3 { --fm-depth-pad: 3.3rem; }
.fm-fc .fm-matrix-depth-4 { --fm-depth-pad: 4.4rem; }

.fm-fc .fm-matrix-row-child .fm-matrix-article::before {
    content: "";
    position: absolute;
    left: calc(var(--fm-depth-pad) - .55rem);
    top: 3px;
    bottom: 3px;
    width: 2px;
    border-radius: 1px;
    background: color-mix(in srgb, var(--text) 18%, transparent);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-group > td.fm-matrix-sticky {
    font-weight: 650;
    cursor: pointer;
}

.fm-fc .fm-matrix--lines .fm-matrix-sticky-inner {
    white-space: normal;
    text-overflow: unset;
    overflow: visible;
}

.fm-fc .fm-matrix-label {
    padding: .35rem .55rem;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    color: var(--text);
}

.fm-fc .fm-matrix-cell,
.fm-fc .fm-matrix-year,
.fm-fc .fm-matrix-total {
    padding: .3rem .55rem;
    text-align: right;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    color: var(--text);
    font-weight: 400;
}

.fm-fc .fm-matrix--horizon .fm-matrix-month,
.fm-fc .fm-matrix--horizon td.fm-matrix-cell {
    width: 5.25rem;
    min-width: 5.25rem;
    max-width: 5.25rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fm-fc .fm-matrix--horizon .fm-matrix-year,
.fm-fc .fm-matrix--horizon .fm-matrix-total {
    width: var(--fm-frozen-col);
    min-width: var(--fm-frozen-col);
    max-width: var(--fm-frozen-col);
}

/* Итог липнет к правому краю. Кромка слева отделяет его от обрезанного месяца. */
.fm-fc .fm-matrix--horizon .fm-matrix-total {
    position: sticky;
    right: 0;
    z-index: 3;
    border-left: 1px solid color-mix(in srgb, var(--text) 42%, var(--border));
}

.fm-fc .fm-matrix--horizon th.fm-matrix-total {
    z-index: 4;
    background: var(--surface);
}

/* Закреплённый год стоит слева от итога. right задаёт матрица: сколько колонок правее. */
.fm-fc .fm-matrix--horizon .fm-matrix-year-pinned {
    position: sticky;
    z-index: 3;
    border-left: 1px solid color-mix(in srgb, var(--text) 42%, var(--border));
}

.fm-fc .fm-matrix--horizon th.fm-matrix-year-pinned {
    z-index: 3;
    background: var(--surface);
}

.fm-fc .fm-matrix-year-head {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: .15rem;
}

.fm-fc .fm-matrix-year-head .mud-tooltip-root {
    display: inline-flex;
    line-height: 0;
}

.fm-fc .fm-matrix-year-pin {
    width: .8rem;
    height: .8rem;
    margin: 0;
    accent-color: color-mix(in srgb, var(--text) 72%, var(--border));
    cursor: pointer;
}

.fm-fc .fm-matrix-year,
.fm-fc .fm-matrix-total {
    font-weight: 500;
}

.fm-fc .fm-matrix-row-key {
    font-weight: 600;
}

.fm-fc .fm-matrix-row-dim {
    opacity: .5;
}

/* Текущий фон блока — тёмная строка; соседняя чуть светлее, чтобы вести взгляд по ряду. */
.fm-fc .fm-matrix tbody tr:nth-child(odd) > td {
    background: var(--surface);
}

.fm-fc .fm-matrix tbody tr:nth-child(even) > td {
    background: color-mix(in srgb, var(--text) 7.5%, var(--surface));
}

.fm-fc .fm-matrix tbody tr:nth-child(odd) > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr:nth-child(odd) > td.fm-matrix-total {
    background: color-mix(in srgb, var(--text) 4%, var(--surface));
}

.fm-fc .fm-matrix tbody tr:nth-child(even) > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr:nth-child(even) > td.fm-matrix-total {
    background: color-mix(in srgb, var(--text) 11%, var(--surface));
}

/* Приток и отток — разные блоки: лёгкий тон на статьях, сильнее на итого. */
.fm-fc .fm-matrix tbody tr.fm-matrix-band-inflow > td {
    background: color-mix(in srgb, var(--green, #22C55E) 8%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-band-inflow > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-band-inflow > td.fm-matrix-total {
    background: color-mix(in srgb, var(--green, #22C55E) 12%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-band-outflow > td {
    background: color-mix(in srgb, var(--red, #EF4444) 8%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-band-outflow > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-band-outflow > td.fm-matrix-total {
    background: color-mix(in srgb, var(--red, #EF4444) 12%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal > td {
    font-weight: 650;
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal > td.fm-matrix-sticky {
    font-weight: 650;
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-inflow > td {
    background: color-mix(in srgb, var(--green, #22C55E) 18%, var(--surface));
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--green, #22C55E) 40%, transparent);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-inflow > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-inflow > td.fm-matrix-total {
    background: color-mix(in srgb, var(--green, #22C55E) 24%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-inflow > td.fm-matrix-sticky {
    box-shadow:
        inset 3px 0 0 var(--green, #22C55E),
        inset 0 1px 0 color-mix(in srgb, var(--green, #22C55E) 40%, transparent);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-outflow > td {
    background: color-mix(in srgb, var(--red, #EF4444) 18%, var(--surface));
    box-shadow: inset 0 1px 0 color-mix(in srgb, var(--red, #EF4444) 40%, transparent);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-outflow > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-outflow > td.fm-matrix-total {
    background: color-mix(in srgb, var(--red, #EF4444) 24%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-outflow > td.fm-matrix-sticky {
    box-shadow:
        inset 3px 0 0 var(--red, #EF4444),
        inset 0 1px 0 color-mix(in srgb, var(--red, #EF4444) 40%, transparent);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-selectable {
    cursor: pointer;
}

.fm-fc .fm-matrix tbody tr.fm-matrix-selectable:hover > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-selectable:hover > td {
    background: color-mix(in srgb, var(--text) 11%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-band-inflow.fm-matrix-selectable:hover > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-inflow.fm-matrix-selectable:hover > td {
    background: color-mix(in srgb, var(--green, #22C55E) 22%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-band-outflow.fm-matrix-selectable:hover > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-subtotal.fm-matrix-band-outflow.fm-matrix-selectable:hover > td {
    background: color-mix(in srgb, var(--red, #EF4444) 22%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected:hover > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-band-inflow > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-band-outflow > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal.fm-matrix-band-inflow > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal.fm-matrix-band-outflow > td,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal:hover > td {
    background: color-mix(in srgb, var(--brand, #38BDF8) 16%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected > td.fm-matrix-total,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected:hover > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected:hover > td.fm-matrix-total,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal > td.fm-matrix-year,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal > td.fm-matrix-total {
    background: color-mix(in srgb, var(--brand, #38BDF8) 22%, var(--surface));
}

.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected > td.fm-matrix-sticky,
.fm-fc .fm-matrix tbody tr.fm-matrix-row-selected.fm-matrix-row-subtotal > td.fm-matrix-sticky {
    box-shadow: inset 3px 0 0 var(--brand, #38BDF8);
}

.fm-fc .fm-matrix-note {
    text-align: left;
    white-space: normal;
    max-width: 22rem;
}

/*
    Панель управления: показатель × проект. Комментарий должен переноситься,
    иначе таблица снова разъезжается по ширине экрана.
    Колонки проектов одной ширины во всех блоках; пустая ячейка — не «—».
    Общие рычаги живут над сеткой; шапка проектов липнет, ряды уходят под неё.
*/
.fm-fc .fm-panel-globals {
    margin-bottom: .85rem;
}

.fm-fc .fm-panel-globals.is-collapsed {
    margin-bottom: .45rem;
}

.fm-fc .fm-panel-globals.is-collapsed .fm-matrix-section > td {
    padding-top: .4rem;
    padding-bottom: .4rem;
}

.fm-fc .fm-globals-toggle {
    display: flex;
    align-items: center;
    gap: .55rem;
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    letter-spacing: inherit;
    text-transform: inherit;
    cursor: pointer;
    text-align: left;
}

.fm-fc .fm-globals-toggle-summary {
    min-width: 0;
    font-weight: 400;
    letter-spacing: 0;
    text-transform: none;
    color: color-mix(in srgb, var(--text) 72%, transparent);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fm-fc .fm-globals-chevron {
    margin-left: auto;
    opacity: .7;
    flex: 0 0 auto;
}

.fm-fc .fm-matrix-wrap--panel {
    max-height: calc(100dvh - 26rem);
    overflow: auto;
}

.fm-fc .fm-panel-globals.is-collapsed + .fm-matrix-wrap--panel {
    max-height: calc(100dvh - 18rem);
}

.fm-fc .fm-matrix--panel {
    table-layout: fixed;
    min-width: 79.5rem;
    width: 100%;
    white-space: normal;
    --fm-amani: #38BDF8;
    --fm-nusa: #2DD4BF;
    --fm-maldives: #F5B942;
    --fm-desire: #C4B5FD;
}

.fm-fc .fm-matrix.fm-matrix--globals {
    min-width: 0;
}

.fm-fc .fm-matrix--panel .fm-matrix-col-indicator {
    width: 14.5rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-col-project,
.fm-fc .fm-matrix--panel .fm-matrix-col-total {
    width: 9.5rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-col-comment {
    width: auto;
}

/*
    Колонки проектов: лёгкий тон на всю высоту, сильнее — только «Остаток к продаже».
    Цвета как на дашборде, без заливки ячеек входа — цифры остаются читаемыми.
*/
.fm-fc .fm-matrix--panel .fm-col-amani { --fm-col: var(--fm-amani); }
.fm-fc .fm-matrix--panel .fm-col-nusadua { --fm-col: var(--fm-nusa); }
.fm-fc .fm-matrix--panel .fm-col-maldives { --fm-col: var(--fm-maldives); }
.fm-fc .fm-matrix--panel .fm-col-desire { --fm-col: var(--fm-desire); }
.fm-fc .fm-matrix--panel .fm-col-total { --fm-col: color-mix(in srgb, var(--text) 62%, var(--border)); }

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row > td:nth-child(2) {
    background-color: color-mix(in srgb, var(--fm-amani) 10%, transparent);
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--fm-amani) 70%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row > td:nth-child(3) {
    background-color: color-mix(in srgb, var(--fm-nusa) 10%, transparent);
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--fm-nusa) 70%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row > td:nth-child(4) {
    background-color: color-mix(in srgb, var(--fm-maldives) 10%, transparent);
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--fm-maldives) 70%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row > td:nth-child(5) {
    background-color: color-mix(in srgb, var(--fm-desire) 10%, transparent);
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--fm-desire) 70%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row > td.fm-col-total {
    background-color: color-mix(in srgb, var(--text) 6%, transparent);
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--text) 32%, transparent);
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-col-amani {
    background: color-mix(in srgb, var(--fm-amani) 12%, var(--surface));
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-col-nusadua {
    background: color-mix(in srgb, var(--fm-nusa) 12%, var(--surface));
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-col-maldives {
    background: color-mix(in srgb, var(--fm-maldives) 12%, var(--surface));
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-col-desire {
    background: color-mix(in srgb, var(--fm-desire) 12%, var(--surface));
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-col-total {
    background: color-mix(in srgb, var(--text) 6%, var(--surface));
}

.fm-fc .fm-matrix--panel th.fm-col-amani .fm-matrix-head-project,
.fm-fc .fm-matrix--panel th.fm-col-nusadua .fm-matrix-head-project,
.fm-fc .fm-matrix--panel th.fm-col-maldives .fm-matrix-head-project,
.fm-fc .fm-matrix--panel th.fm-col-desire .fm-matrix-head-project,
.fm-fc .fm-matrix--panel th.fm-col-total .fm-matrix-head-project {
    background: color-mix(in srgb, var(--fm-col) 18%, var(--surface));
    border-color: color-mix(in srgb, var(--fm-col) 42%, var(--border));
    box-shadow: inset 0 2px 0 var(--fm-col);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td:nth-child(2),
.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td.fm-col-amani {
    background-color: color-mix(in srgb, var(--fm-amani) 22%, var(--surface));
    box-shadow: inset 3px 0 0 var(--fm-amani), inset 0 2px 0 color-mix(in srgb, var(--fm-amani) 75%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td:nth-child(3),
.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td.fm-col-nusadua {
    background-color: color-mix(in srgb, var(--fm-nusa) 22%, var(--surface));
    box-shadow: inset 3px 0 0 var(--fm-nusa), inset 0 2px 0 color-mix(in srgb, var(--fm-nusa) 75%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td:nth-child(4),
.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td.fm-col-maldives {
    background-color: color-mix(in srgb, var(--fm-maldives) 22%, var(--surface));
    box-shadow: inset 3px 0 0 var(--fm-maldives), inset 0 2px 0 color-mix(in srgb, var(--fm-maldives) 75%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td:nth-child(5),
.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td.fm-col-desire {
    background-color: color-mix(in srgb, var(--fm-desire) 22%, var(--surface));
    box-shadow: inset 3px 0 0 var(--fm-desire), inset 0 2px 0 color-mix(in srgb, var(--fm-desire) 75%, transparent);
}

.fm-fc .fm-matrix--panel tbody > tr.fm-matrix-row-stock > td.fm-col-total {
    background-color: color-mix(in srgb, var(--text) 12%, var(--surface));
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--text) 45%, transparent);
}

.fm-fc .fm-matrix--panel .fm-matrix-row-stock .fm-matrix-cell {
    padding: .4rem .45rem;
    vertical-align: middle;
}

.fm-fc .fm-matrix--panel .fm-matrix-row-stock-total .fm-matrix-label {
    font-weight: 700;
}

.fm-fc .fm-stock-type {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
}

.fm-fc .fm-stock-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex: 0 0 8px;
}

.fm-fc .fm-stock-dot-apt { background: var(--plan, #38BDF8); }
.fm-fc .fm-stock-dot-villa { background: var(--chart-villa, #2dd4bf); }
.fm-fc .fm-stock-dot-comm { background: var(--attn, #f59e0b); }

.fm-fc .fm-matrix--panel .fm-matrix-row-stock .fm-panel-stock-total,
.fm-fc .fm-matrix--panel .fm-matrix-row-stock .fm-cell-display.fm-panel-stock-total-edit {
    background: color-mix(in srgb, var(--fm-col) 40%, var(--bg));
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fm-col) 70%, transparent);
    color: var(--text);
    font-size: 15px;
    font-weight: 700;
    min-width: 4.4rem;
    text-align: center;
}

.fm-fc .fm-matrix--panel .fm-matrix-sticky {
    width: 14.5rem;
    min-width: 14.5rem;
    max-width: 14.5rem;
    white-space: normal;
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head {
    z-index: 4;
    background: var(--surface);
    box-shadow: 0 1px 0 color-mix(in srgb, var(--border) 55%, transparent);
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel thead .fm-matrix-head.fm-matrix-sticky {
    z-index: 5;
}

.fm-fc .fm-matrix-wrap--panel .fm-matrix--panel tbody .fm-matrix-sticky {
    z-index: 3;
}

.fm-fc .fm-matrix--panel .fm-matrix-head {
    text-align: left;
    text-transform: none;
    letter-spacing: 0;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.3;
    vertical-align: middle;
}

.fm-fc .fm-matrix--panel .fm-matrix-head:not(.fm-matrix-sticky):not(.fm-matrix-comment-head) {
    text-align: center;
    color: var(--text);
    padding: .5rem .4rem .45rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-head-project,
.fm-fc .fm-matrix--panel .fm-matrix-head-comment {
    display: flex;
    align-items: center;
    min-height: 1.4rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-head-project {
    justify-content: center;
    gap: .3rem;
    width: 100%;
    min-height: 2rem;
    padding: .35rem .5rem;
    box-sizing: border-box;
    border-radius: 8px;
    background: color-mix(in srgb, var(--bg) 45%, var(--surface));
    border: 1px solid color-mix(in srgb, var(--border) 85%, transparent);
    font-size: 15px;
    font-weight: 600;
    letter-spacing: .02em;
    color: var(--text);
}

.fm-fc .fm-matrix--panel .fm-matrix-head-project .fm-hint {
    margin: 0;
    font-size: 10px;
}

.fm-fc .fm-matrix--panel .fm-matrix-head-comment {
    justify-content: flex-start;
}

.fm-fc .fm-matrix--panel .fm-matrix-cell {
    text-align: right;
    white-space: nowrap;
    padding: .35rem .45rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-cell-wrap {
    white-space: normal;
}

.fm-fc .fm-matrix--panel .fm-cell-input,
.fm-fc .fm-matrix--panel .fm-cell-display {
    width: 100%;
    max-width: none;
    min-width: 0;
}

.fm-fc .fm-matrix--panel .fm-panel-stock {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 2px;
    text-align: right;
    white-space: normal;
    line-height: 1.3;
    font-size: 13px;
}

.fm-fc .fm-matrix--panel .fm-panel-stock-part {
    color: color-mix(in srgb, var(--text) 78%, transparent);
    font-size: 12px;
    font-variant-numeric: tabular-nums lining-nums;
}

.fm-fc .fm-panel-stock-total {
    display: inline-block;
    margin-top: 2px;
    padding: .18rem .65rem;
    border-radius: 999px;
    background: color-mix(in srgb, var(--text) 16%, var(--bg));
    color: var(--text);
    font-weight: 650;
    font-variant-numeric: tabular-nums lining-nums;
    letter-spacing: -0.2px;
    line-height: 1.35;
}

.fm-fc .fm-panel-stock-grand {
    background: color-mix(in srgb, var(--plan, #38BDF8) 32%, var(--bg));
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--plan, #38BDF8) 55%, transparent);
    font-size: 15px;
    font-weight: 700;
}

.fm-fc .fm-matrix--panel .fm-panel-stock-total-edit {
    background: color-mix(in srgb, var(--text) 16%, var(--bg));
    font-weight: 650;
    border-radius: 999px;
}

.fm-fc .fm-matrix--panel .fm-panel-stock-note {
    display: block;
    margin-top: .35rem;
}

.fm-fc .fm-matrix--panel .fm-matrix-void {
    display: block;
    min-height: 28px;
}

.fm-fc .fm-matrix--panel .fm-matrix-comment {
    text-align: left;
    white-space: normal;
    font-size: 13px;
    font-weight: 400;
    line-height: 1.35;
    min-width: 14rem;
    padding: .35rem .55rem;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
    color: color-mix(in srgb, var(--text) 72%, transparent);
}

.fm-fc .fm-matrix--panel .fm-matrix-comment-head {
    text-align: left;
    white-space: nowrap;
    font-weight: 500;
    line-height: 1.3;
    color: color-mix(in srgb, var(--text) 82%, transparent);
}

.fm-fc .fm-matrix.fm-matrix--globals .fm-matrix-col-global-value {
    width: 18rem;
}

.fm-fc .fm-matrix.fm-matrix--globals .fm-matrix-cell {
    text-align: left;
}

.fm-fc .fm-matrix.fm-matrix--globals .fm-edit {
    justify-content: flex-start;
}

.fm-fc .fm-matrix.fm-matrix--globals .fm-cell-input,
.fm-fc .fm-matrix.fm-matrix--globals .fm-cell-display,
.fm-fc .fm-matrix.fm-matrix--globals .fm-cell-select {
    width: 16rem;
    max-width: 100%;
}

.fm-fc .fm-matrix tbody tr.fm-matrix-section > td {
    font-weight: 600;
    font-size: 12px;
    letter-spacing: .05em;
    text-transform: uppercase;
    padding-top: .95rem;
    padding-bottom: .35rem;
    border-bottom: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
    color: color-mix(in srgb, var(--text) 70%, transparent);
    background: var(--surface);
}

.fm-fc .fm-matrix tbody tr.fm-matrix-subsection > td {
    font-weight: 500;
    font-size: 12px;
    letter-spacing: .02em;
    text-transform: none;
    padding-top: .65rem;
    padding-bottom: .15rem;
    color: color-mix(in srgb, var(--text) 62%, transparent);
    background: var(--surface);
}

.fm-fc .fm-oneoffs {
    --fm-amani: #38BDF8;
    --fm-nusa: #2DD4BF;
    --fm-maldives: #F5B942;
    --fm-desire: #C4B5FD;
}

.fm-fc .fm-oneoffs-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
}

.fm-fc .fm-oneoffs-head .fm-hint {
    max-width: 46rem;
}

.fm-fc .fm-oneoffs-totals {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
    margin: .85rem 0 1rem;
}

.fm-fc .fm-oneoffs-totals article {
    background: color-mix(in srgb, var(--bg) 40%, transparent);
    border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
    border-radius: 10px;
    padding: 10px 12px;
}

.fm-fc .fm-oneoffs-totals span {
    display: block;
    color: var(--muted);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.fm-fc .fm-oneoffs-totals strong {
    display: block;
    margin-top: 4px;
    font-size: 1.05rem;
    font-weight: 500;
    font-variant-numeric: tabular-nums lining-nums;
    letter-spacing: -.02em;
}

.fm-fc .fm-oneoffs-out {
    color: var(--attn, #f87171);
}

.fm-fc .fm-oneoffs-in {
    color: var(--fact, #4ade80);
}

.fm-fc .fm-oneoffs-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(16.5rem, 1fr));
    gap: 10px;
}

.fm-fc .fm-oneoffs-project {
    --fm-col: var(--muted);
    display: flex;
    flex-direction: column;
    min-width: 0;
    background: color-mix(in srgb, var(--fm-col) 8%, var(--surface));
    border: 1px solid color-mix(in srgb, var(--fm-col) 28%, var(--border));
    border-radius: 12px;
    box-shadow: inset 3px 0 0 color-mix(in srgb, var(--fm-col) 80%, transparent);
    padding: 10px 12px 12px;
}

.fm-fc .fm-oneoffs-project.fm-col-amani { --fm-col: var(--fm-amani); }
.fm-fc .fm-oneoffs-project.fm-col-nusadua { --fm-col: var(--fm-nusa); }
.fm-fc .fm-oneoffs-project.fm-col-maldives { --fm-col: var(--fm-maldives); }
.fm-fc .fm-oneoffs-project.fm-col-desire { --fm-col: var(--fm-desire); }

.fm-fc .fm-oneoffs-project-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 8px;
}

.fm-fc .fm-oneoffs-project-head h4 {
    margin: 0;
    font-size: .95rem;
    font-weight: 600;
    color: var(--text);
}

.fm-fc .fm-oneoffs-project-head p {
    margin: 2px 0 0;
    color: var(--muted);
    font-size: 12px;
}

.fm-fc .fm-oneoffs-add,
.fm-fc .fm-oneoff-remove {
    appearance: none;
    flex: 0 0 auto;
    width: 28px;
    height: 28px;
    border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
    border-radius: 8px;
    background: color-mix(in srgb, var(--bg) 45%, transparent);
    color: var(--text);
    cursor: pointer;
    font: inherit;
    font-size: 1.15rem;
    line-height: 1;
}

.fm-fc .fm-oneoffs-add:hover,
.fm-fc .fm-oneoff-remove:hover {
    border-color: color-mix(in srgb, var(--text) 28%, transparent);
    background: color-mix(in srgb, var(--text) 8%, transparent);
}

.fm-fc .fm-oneoff-remove {
    color: var(--muted);
}

.fm-fc .fm-oneoff-remove:hover {
    color: var(--attn, #f87171);
    border-color: color-mix(in srgb, var(--attn, #f87171) 40%, transparent);
}

.fm-fc .fm-oneoffs-empty {
    margin: 0;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.4;
}

.fm-fc .fm-oneoffs-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.fm-fc .fm-oneoff-card {
    background: color-mix(in srgb, var(--surface) 88%, transparent);
    border: 1px solid color-mix(in srgb, var(--border) 75%, transparent);
    border-radius: 10px;
    padding: 8px 10px 10px;
}

.fm-fc .fm-oneoff-card.is-outflow {
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--attn, #f87171) 12%, transparent);
}

.fm-fc .fm-oneoff-card.is-inflow {
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fact, #4ade80) 14%, transparent);
}

.fm-fc .fm-oneoff-card-top {
    display: flex;
    align-items: flex-start;
    gap: 6px;
}

.fm-fc .fm-oneoff-card-top .fm-edit {
    justify-content: flex-start;
    flex: 1;
    min-width: 0;
}

.fm-fc .fm-cell-display.fm-oneoff-title,
.fm-fc .fm-cell-input.fm-oneoff-title,
.fm-fc .fm-cell-num.fm-oneoff-title {
    width: 100%;
    max-width: none;
    min-width: 0;
    text-align: left;
    font-weight: 500;
}

.fm-fc .fm-oneoff-card-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: 8px;
}

.fm-fc .fm-oneoff-card-meta .fm-edit {
    width: auto;
    margin-left: auto;
}

.fm-fc .fm-oneoff-dir {
    display: inline-flex;
    border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
    border-radius: 8px;
    overflow: hidden;
}

.fm-fc .fm-oneoff-dir button {
    appearance: none;
    border: 0;
    background: none;
    color: var(--muted);
    cursor: pointer;
    font: inherit;
    font-size: 12px;
    padding: .25rem .55rem;
}

.fm-fc .fm-oneoff-dir button.is-on {
    background: color-mix(in srgb, var(--text) 10%, transparent);
    color: var(--text);
    font-weight: 600;
}

.fm-fc .fm-oneoff-card.is-outflow .fm-oneoff-dir button.is-on {
    background: color-mix(in srgb, var(--attn, #f87171) 18%, transparent);
    color: var(--attn, #f87171);
}

.fm-fc .fm-oneoff-card.is-inflow .fm-oneoff-dir button.is-on {
    background: color-mix(in srgb, var(--fact, #4ade80) 18%, transparent);
    color: var(--fact, #4ade80);
}

.fm-fc .fm-oneoff-dir-badge,
.fm-fc .fm-oneoff-project-name {
    color: var(--muted);
    font-size: 12px;
}

.fm-fc .fm-oneoff-project {
    width: 8.2rem;
    max-width: 100%;
}

.fm-fc .fm-cell-display.fm-oneoff-amount,
.fm-fc .fm-cell-input.fm-oneoff-amount,
.fm-fc .fm-cell-num.fm-oneoff-amount {
    min-width: 5.6rem;
    font-weight: 600;
    font-size: 1rem;
}

.fm-fc .fm-oneoff-card.is-outflow .fm-oneoff-amount {
    color: var(--attn, #f87171);
}

.fm-fc .fm-oneoff-card.is-inflow .fm-oneoff-amount {
    color: var(--fact, #4ade80);
}

@media (max-width: 720px) {
    .fm-fc .fm-oneoffs-totals {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.fm-fc .fm-cell-select {
    text-align: left;
    appearance: auto;
}

.fm-fc .fm-negative {
    color: var(--attn, var(--mud-palette-error));
}

/*
    Месяц первого разрыва. Сплошная заливка warning-lighten давала белый текст на ярко-жёлтом:
    цвет фона задан палитрой, а цвет текста — темой, и в тёмной теме они не согласованы.
    Прозрачный оттенок ложится поверх фона строки, поэтому текст остаётся читаемым в любой теме,
    а метку слева видно так же хорошо, как заливку.
*/
.fm-fc .fm-gap {
    box-shadow: inset 3px 0 0 var(--mud-palette-warning);
    font-weight: 600;
}

.fm-fc .fm-matrix tbody tr > td.fm-gap {
    background-image: linear-gradient(
        color-mix(in srgb, var(--mud-palette-warning) 16%, transparent),
        color-mix(in srgb, var(--mud-palette-warning) 16%, transparent));
}

/* Рычаги групп и фильтр деталей */
.fm-fc .fm-levers {
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    align-items: center;
    margin-bottom: .5rem;
    max-width: 60rem;
}

.fm-fc .fm-levers .mud-input-control {
    max-width: 11rem;
}

.fm-fc .fm-lever-field {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 11rem;
}

.fm-fc .fm-lever-field-label {
    color: var(--muted);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .02em;
}

.fm-fc .fm-lever-field .fm-edit,
.fm-fc .fm-lever-field .fm-cell-num {
    justify-content: flex-start;
}

.fm-fc .fm-cell-lever {
    min-width: 6.5rem;
    text-align: left;
}

.fm-fc .fm-group-totals {
    display: flex;
    flex-wrap: wrap;
    gap: 1.25rem;
    font-size: .85rem;
    margin-bottom: .5rem;
}

.fm-fc .fm-lines-filter {
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    align-items: center;
    margin-bottom: .75rem;
}

.fm-fc .fm-lines-filter .mud-input-control {
    max-width: 18rem;
}

.fm-fc .fm-cell-input {
    width: 9.5rem;
    max-width: 14rem;
    text-align: right;
    border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
    border-radius: 6px;
    background: color-mix(in srgb, var(--bg) 55%, var(--surface));
    color: var(--text);
    font: inherit;
    font-variant-numeric: tabular-nums lining-nums;
    padding: .15rem .35rem;
    box-sizing: border-box;
}

.fm-fc .fm-matrix--horizon .fm-cell-input {
    width: 100%;
    min-width: 0;
    max-width: none;
}

.fm-fc .fm-cell-input:focus {
    position: relative;
    z-index: 4;
    border-color: var(--brand, var(--mud-palette-primary));
    background: var(--surface);
    outline: none;
}

.fm-fc .fm-cell-input:disabled {
    opacity: .5;
}

.fm-fc .fm-edit {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    min-height: 28px;
    width: 100%;
}

.fm-fc .fm-cell-display,
.fm-fc .fm-cell-num {
    font-variant-numeric: tabular-nums lining-nums;
    font-weight: 400;
    letter-spacing: -0.2px;
    color: var(--text);
}

.fm-fc .fm-cell-display {
    appearance: none;
    background: color-mix(in srgb, var(--bg) 35%, transparent);
    border: 1px solid transparent;
    border-radius: 6px;
    cursor: pointer;
    font: inherit;
    min-width: 4.8rem;
    min-height: 28px;
    padding: .15rem .4rem;
    text-align: right;
    box-sizing: border-box;
}

.fm-fc .fm-matrix--horizon .fm-cell-display {
    width: 100%;
    min-width: 0;
}

.fm-fc .fm-cell-total {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    width: 100%;
    cursor: default;
}

.fm-fc .fm-cell-display:hover,
.fm-fc .fm-cell-display:focus-visible {
    border-color: color-mix(in srgb, var(--border) 80%, transparent);
    background: color-mix(in srgb, var(--bg) 55%, transparent);
    outline: none;
}

.fm-fc .fm-cell-display.fm-cell-total:hover,
.fm-fc .fm-cell-display.fm-cell-total:focus-visible {
    border-color: transparent;
    background: color-mix(in srgb, var(--bg) 35%, transparent);
}

.fm-fc .fm-cell-save {
    appearance: none;
    background: color-mix(in srgb, var(--fact, #4ade80) 16%, transparent);
    border: 1px solid color-mix(in srgb, var(--fact, #4ade80) 40%, transparent);
    border-radius: 6px;
    color: var(--fact, #4ade80);
    cursor: pointer;
    font: inherit;
    font-size: .72rem;
    font-weight: 500;
    letter-spacing: .02em;
    padding: .18rem .5rem;
    white-space: nowrap;
}

.fm-fc .fm-cell-save:hover {
    background: color-mix(in srgb, var(--fact, #4ade80) 26%, transparent);
}

.fm-fc .fm-cell-wide {
    width: 18rem;
    text-align: left;
}

.fm-fc .fm-assumptions {
    margin: .25rem 0 .5rem 1.25rem;
    font-size: .9rem;
}

.fm-fc .fm-assumptions li {
    margin-bottom: .2rem;
}

/* Диалог публикации */
.fm-fc .fm-publish {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1.5rem;
}

@media (max-width: 900px) {
    .fm-fc .fm-publish {
        grid-template-columns: 1fr;
    }
}

.fm-fc .fm-publish h4 {
    margin: .5rem 0 .35rem;
    font-size: .95rem;
}

.fm-fc .fm-diff {
    margin: 0 0 .5rem 1.1rem;
    font-size: .85rem;
}

.fm-fc .fm-warning-ack {
    border-bottom: 1px solid var(--mud-palette-lines-default);
    padding-bottom: .35rem;
    margin-bottom: .35rem;
}

.fm-fc .fm-history-actions {
    text-align: left;
    white-space: nowrap;
}

/* График остатков */
.fm-fc .fm-chart {
    width: 100%;
    height: 320px;
    display: block;
}

.fm-fc .fm-chart-line {
    fill: none;
    stroke-width: 2;
    vector-effect: non-scaling-stroke;
}

.fm-fc .fm-chart-dim {
    opacity: .25;
}

/*
    Цвета серий заданы явно, а не палитрой темы: в ней info и secondary оба синие, а warning
    достаётся и проекту, и порогу ликвидности — на графике получались неразличимые пары.
    Это данные, а не оформление: они должны читаться одинаково в любой теме.
*/
.fm-fc {
    --fm-series-group: #A855F7;
    --fm-series-amani: #38BDF8;
    --fm-series-nusadua: #22C55E;
    --fm-series-maldives: #F59E0B;
    --fm-series-desire: #F472B6;
    --fm-series-cushion: #EF4444;
    --fm-series-bar: #7AA2D8;
}

.fm-fc .fm-chart-group { stroke: var(--fm-series-group); stroke-width: 3; }
.fm-fc .fm-chart-amani { stroke: var(--fm-series-amani); }
.fm-fc .fm-chart-nusadua { stroke: var(--fm-series-nusadua); }
.fm-fc .fm-chart-maldives { stroke: var(--fm-series-maldives); }
.fm-fc .fm-chart-desire { stroke: var(--fm-series-desire); }

.fm-fc .fm-chart-bar {
    fill: var(--fm-series-bar);
    opacity: .9;
}

.fm-fc .fm-chart-zero {
    stroke: var(--mud-palette-text-secondary);
    stroke-width: 1;
    vector-effect: non-scaling-stroke;
}

.fm-fc .fm-chart-cushion {
    stroke: var(--fm-series-cushion);
    stroke-dasharray: 6 4;
    stroke-width: 1;
    vector-effect: non-scaling-stroke;
}

.fm-fc .fm-chart-grid {
    stroke: var(--mud-palette-lines-default);
    stroke-width: 1;
    opacity: .5;
    vector-effect: non-scaling-stroke;
}

.fm-fc .fm-chart-tick {
    fill: var(--mud-palette-text-secondary);
    font-size: 11px;
}

.fm-fc .fm-chart-legend {
    display: flex;
    flex-wrap: wrap;
    gap: .9rem;
    font-size: .8rem;
    margin-top: .35rem;
}

.fm-fc .fm-chart-key::before {
    content: "";
    display: inline-block;
    width: .9rem;
    height: 2px;
    margin-right: .35rem;
    vertical-align: middle;
    background: currentColor;
}

.fm-fc .fm-chart-key.fm-chart-group { color: var(--fm-series-group); }
.fm-fc .fm-chart-key.fm-chart-amani { color: var(--fm-series-amani); }
.fm-fc .fm-chart-key.fm-chart-nusadua { color: var(--fm-series-nusadua); }
.fm-fc .fm-chart-key.fm-chart-maldives { color: var(--fm-series-maldives); }
.fm-fc .fm-chart-key.fm-chart-desire { color: var(--fm-series-desire); }
.fm-fc .fm-chart-key-bar { color: var(--fm-series-bar); }
.fm-fc .fm-chart-key-cushion { color: var(--fm-series-cushion); }

/* Вертикальная шкала графика */
.fm-fc .fm-chart-axis {
    stroke: var(--mud-palette-lines-default);
    stroke-width: 1;
}

.fm-fc .fm-chart-tick-value {
    text-anchor: end;
}

/*
    Расшифровка графика. Цветных ярлыков мало: они называют линию, но не говорят, что вообще
    нарисовано — где остаток, где стройка в своём масштабе и что означает пунктир.
*/
.fm-fc .fm-chart-guide {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: .2rem .75rem;
    margin: .5rem 0 0;
    font-size: .82rem;
    color: var(--mud-palette-text-secondary);
}

.fm-fc .fm-chart-guide dt {
    font-weight: 600;
    color: var(--mud-palette-text-primary);
}

.fm-fc .fm-chart-guide dd {
    margin: 0;
}

@media (max-width: 700px) {
    .fm-fc .fm-chart-guide {
        grid-template-columns: 1fr;
    }

    .fm-fc .fm-chart-guide dd {
        margin-bottom: .35rem;
    }
}

/*
    Правая шкала — для столбиков стройки. Месячная стройка около миллиона против остатка
    в семнадцать: на денежной шкале столбики не видны в принципе, а без своей оси их высота
    выглядела бы величиной по левой оси. Поэтому у них собственные деления справа.
*/
.fm-fc .fm-chart-axis-bar {
    stroke: var(--fm-series-bar);
    opacity: .6;
}

.fm-fc .fm-chart-tick-bar {
    fill: var(--fm-series-bar);
    text-anchor: start;
}

/* Календарь панели: попап рендерится в портале, поэтому без префикса .fm-fc. */
.fm-fc .fm-cal {
    display: flex;
    justify-content: flex-end;
    width: 100%;
}

.fm-cal-popover.mud-popover {
    background: var(--surface, #1E293B);
    color: var(--text, #F1F5F9);
    border: 1px solid var(--border, #334155);
    border-radius: 12px;
    box-shadow: 0 16px 40px rgba(0, 0, 0, .45);
    z-index: 1300;
}

.fm-cal-sheet {
    width: 17.5rem;
    padding: 10px;
    font-family: 'DM Sans', system-ui, sans-serif;
}

.fm-cal-nav {
    display: grid;
    grid-template-columns: 2rem 1fr 2rem;
    align-items: center;
    gap: 4px;
    margin-bottom: 8px;
}

.fm-cal-nav-btn,
.fm-cal-nav-title,
.fm-cal-month,
.fm-cal-day,
.fm-cal-clear {
    appearance: none;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    cursor: pointer;
}

.fm-cal-nav-btn {
    width: 2rem;
    height: 2rem;
    border-radius: 8px;
    font-size: 1.15rem;
    line-height: 1;
}

.fm-cal-nav-title {
    height: 2rem;
    border-radius: 8px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.fm-cal-nav-btn:hover,
.fm-cal-nav-title:hover,
.fm-cal-month:hover:not(:disabled),
.fm-cal-day:hover:not(:disabled) {
    background: color-mix(in srgb, var(--text, #F1F5F9) 10%, transparent);
}

.fm-cal-weekdays,
.fm-cal-days {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    text-align: center;
}

.fm-cal-weekdays {
    margin-bottom: 4px;
    color: var(--muted, #94A3B8);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.fm-cal-weekdays span {
    padding: .2rem 0;
}

.fm-cal-days {
    gap: 2px;
}

.fm-cal-day {
    height: 1.85rem;
    border-radius: 8px;
    font-variant-numeric: tabular-nums;
    font-size: 13px;
}

.fm-cal-day.is-outside {
    color: color-mix(in srgb, var(--text, #F1F5F9) 38%, transparent);
}

.fm-cal-day.is-today:not(.is-selected) {
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--brand, #A855F7) 70%, transparent);
}

.fm-cal-day.is-selected,
.fm-cal-month.is-selected {
    background: color-mix(in srgb, var(--brand, #A855F7) 28%, transparent);
    color: var(--text, #F1F5F9);
    font-weight: 600;
}

.fm-cal-day:disabled,
.fm-cal-month:disabled {
    opacity: .35;
    cursor: default;
}

.fm-cal-months {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 4px;
}

.fm-cal-month {
    height: 2.15rem;
    border-radius: 8px;
    text-transform: lowercase;
}

.fm-cal-clear {
    display: block;
    width: 100%;
    margin-top: 8px;
    padding: .35rem 0;
    border-radius: 8px;
    color: var(--muted, #94A3B8);
    font-size: 13px;
}

.fm-cal-clear:hover {
    background: color-mix(in srgb, var(--text, #F1F5F9) 8%, transparent);
    color: var(--text, #F1F5F9);
}
