.ops-controls { flex-wrap: wrap; gap: 12px; }
.ops-controls label { display: flex; align-items: center; gap: 8px; }
.ops-controls select { max-width: 240px; }
.ops-controls #ops-range { margin-left: auto; color: var(--color-text-muted); }
.ops-help { color: var(--color-text-muted); font-size: 0.8125rem; margin: 12px 0 0; }
.ops-legend { display: flex; flex-wrap: wrap; gap: 16px; }
.ops-legend > span { display: inline-flex; align-items: center; gap: 6px; font-size: 0.8125rem; }
.ops-key { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 3px; font-weight: 700; }
.ops-scroll { overflow: auto; max-height: calc(100vh - 330px); min-height: 240px; border-top: 1px solid var(--color-border); }
.ops-grid { width: 100%; min-width: 780px; border-collapse: separate; border-spacing: 0; font-size: 0.75rem; }
.ops-grid th, .ops-grid td { padding: 3px; border-right: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); text-align: center; }
.ops-grid th { background: var(--color-surface); color: var(--color-text); }
.ops-grid thead th { position: sticky; top: 0; z-index: 3; padding: 0 3px; box-sizing: border-box; }
.ops-grid .ops-months th { height: 28px; }
.ops-grid .ops-days th { top: 28px; height: 56px; min-width: 32px; }
.ops-grid thead small { display: block; font-size: 0.625rem; color: var(--color-text-muted); }
.ops-grid .ops-bank { position: sticky; left: 0; z-index: 2; text-align: left; padding: 10px; box-sizing: border-box; width: 161px; min-width: 161px; max-width: 161px; overflow-wrap: anywhere; }
.ops-grid .ops-source { position: sticky; left: 161px; z-index: 2; min-width: 48px; }
.ops-grid thead .ops-bank, .ops-grid thead .ops-source { z-index: 4; }
.ops-grid tbody + tbody tr:first-child > * { border-top: 2px solid var(--color-border-strong); }
.ops-cell { display: flex; justify-content: center; align-items: center; min-width: 25px; height: 27px; border-radius: 3px; overflow: hidden; font-weight: 700; text-decoration: none; cursor: pointer; }
.ops-cell:hover { outline: 1px solid var(--color-primary); outline-offset: 1px; }
.ops-cell:focus { outline: 2px solid var(--color-primary); outline-offset: 1px; }
.ops-files { flex-direction: column; height: 44px; }
.ops-file-lane { display: flex; width: 100%; height: 50%; min-height: 0; }
.ops-bank-file { border-top: 1px solid var(--color-surface); }
.ops-grid .ops-file-label { padding-top: 3px; padding-bottom: 3px; }
.ops-file-label > span { display: flex; align-items: center; justify-content: center; height: 22px; font-size: 0.6875rem; }
.ops-solid { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }
.ops-half { display: flex; align-items: center; justify-content: center; width: 50%; height: 100%; }
.ops-half + .ops-half { border-left: 1px solid var(--color-surface); }
.ops-grid .ops-weekend { background: color-mix(in srgb, var(--color-primary) 10%, var(--color-surface)); }
.ops-weekend .ops-tone { background-image: linear-gradient(color-mix(in srgb, var(--color-primary) 14%, transparent), color-mix(in srgb, var(--color-primary) 14%, transparent)); }
.ops-grid .ops-through { border-left: 2px solid var(--color-primary); border-right: 2px solid var(--color-primary); }
.ops-grid thead .ops-through { background: var(--color-primary-subtle); color: var(--color-primary); border-top: 2px solid var(--color-primary); }
.ops-grid tbody:last-child tr:last-child .ops-through { border-bottom: 2px solid var(--color-primary); }
.ops-through-label { display: block; font-size: 0.5625rem; font-weight: 700; text-transform: uppercase; }
.ops-null { background: var(--color-surface-2); color: var(--color-text-subtle); }
.ops-warning { background: var(--color-warning-subtle); color: var(--color-warning-text); }
.ops-error { background: var(--color-danger-subtle); color: var(--color-danger-text); }
.ops-success { background: var(--color-success-subtle); color: var(--color-success-text); }
.ops-in-progress { background: var(--color-info-subtle); color: var(--color-info-text); }
