Files
svsmspcalc/pre-alpha/SVS-MSP-Calculator-layout.css
2026-03-16 01:42:17 -04:00

184 lines
6.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* SVS MSP Calculator - Layout */
/* Extracted during Phase 5 to keep the HTML shell stable while splitting the monolithic stylesheet. */
/* ── PAGE LAYOUT ────────────────────────────────────────────────
.outer — CSS grid driven by shared desktop column tokens
(currently 3/5 main, 2/5 sidebar) plus shared max width
.main-col — left: sections IVI stacked vertically
.side-col — right: sticky sidebar (desktop only; hidden ≤1100px)
Roman numeral .section-num floats LEFT outside .section via
position:absolute + a tokenized negative left offset.
This requires .section to have position:relative + a matching
tokenized left margin.
─────────────────────────────────────────────────────────────── */
.outer {
display: grid;
grid-template-columns: var(--layout-main-col) var(--layout-side-col);
gap: var(--layout-column-gap);
padding: var(--sidebar-top-gap) var(--page-gutter-x) 44px;
max-width: var(--page-max-width);
margin: 0 auto;
align-items: start;
}
.main-col { display: flex; flex-direction: column; gap: clamp(16px, 1.5vw, 24px); container-type: inline-size; }
.side-col { position: static; z-index: 10; align-self: start; }
.sidebar-utility { margin-bottom: var(--sidebar-stack-gap); display: flex; flex-direction: column; gap: 8px; }
.btn-reset-quote,
.btn-import-quote {
width: 100%;
background: var(--surface-sidebar-utility);
border: 1px solid var(--surface-sidebar-utility-border);
border-radius: var(--radius-control);
min-height: var(--control-min-height);
padding: var(--control-pad-y) var(--control-pad-x);
color: var(--muted);
font-family: 'DM Mono', monospace;
font-size: 0.75rem;
letter-spacing: 0.09em;
text-transform: uppercase;
cursor: pointer;
transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), transform 0.1s;
}
.btn-reset-quote:active,
.btn-import-quote:active { transform: translateY(1px); }
.btn-reset-quote:hover {
background: color-mix(in srgb, var(--amber) 8%, transparent);
border-color: color-mix(in srgb, var(--amber) 38%, transparent);
color: var(--amber);
}
.btn-import-quote:hover {
background: color-mix(in srgb, var(--sky) 8%, transparent);
border-color: color-mix(in srgb, var(--sky) 38%, transparent);
color: var(--sky);
}
.confirm-modal {
position: fixed;
inset: 0;
z-index: 400;
opacity: 0;
pointer-events: none;
transition: opacity 0.2s ease;
}
.confirm-modal.open {
opacity: 1;
pointer-events: auto;
}
.confirm-modal-backdrop {
position: absolute;
inset: 0;
background: var(--surface-backdrop);
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.confirm-modal-card {
position: relative;
width: min(460px, calc(100% - 32px));
margin: 12vh auto 0;
background: var(--surface-modal);
border: 1px solid var(--border);
border-radius: 14px;
padding: 22px 22px 20px;
box-shadow: var(--shadow-modal);
}
.confirm-modal-eyebrow {
font-family: 'DM Mono', monospace;
font-size: 0.6875rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--amber);
margin-bottom: 10px;
}
.confirm-modal-title {
font-family: 'Poppins', sans-serif;
font-size: 1.5rem;
line-height: 1.3;
color: var(--ink);
margin-bottom: 10px;
}
.confirm-modal-copy {
font-size: 0.875rem;
line-height: 1.7;
color: var(--muted);
margin-bottom: 18px;
}
.confirm-modal-actions {
display: flex;
justify-content: flex-end;
gap: 10px;
}
.confirm-btn {
border-radius: var(--radius-control);
min-height: var(--control-min-height);
padding: var(--control-pad-y) var(--control-pad-x);
font-family: 'DM Mono', monospace;
font-size: 0.75rem;
letter-spacing: 0.08em;
text-transform: uppercase;
cursor: pointer;
transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), transform 0.1s;
}
.confirm-btn:active { transform: translateY(1px); }
.confirm-btn-secondary {
background: transparent;
color: var(--muted);
border: 1px solid var(--border);
}
.confirm-btn-secondary:hover {
background: var(--surface-ghost-hover);
color: var(--ink);
border-color: var(--accent);
}
.confirm-btn-danger {
background: var(--amber);
color: var(--btn-primary-fg);
border: 1px solid transparent;
}
.confirm-btn-danger:hover { filter: brightness(1.05); }
/* ── CLIENT BAR ─────────────────────────────────────────────────
Lives inside .main-col, above section I.
Tokenized left padding aligns "PREPARED FOR" with section card
edges and stays in sync with the current numeral gutter.
.client-input — contenteditable-style text input; oninput calls
update() which syncs clientNameDisplay in sidebar.
─────────────────────────────────────────────────────────────── */
.client-bar {
padding: clamp(20px, 1.8vw, 28px) 0 clamp(20px, 1.6vw, 24px) var(--section-offset);
}
.client-label {
font-family: 'DM Mono', monospace;
font-size: var(--text-label-size);
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
margin-bottom: 12px;
}
.client-input {
background: transparent;
border: none;
border-bottom: 1px solid var(--border);
color: var(--accent);
font-family: 'Poppins', sans-serif;
font-weight: 600;
font-size: clamp(1.75rem, 2vw, 1.9375rem);
width: 100%;
max-width: 560px;
outline: none;
padding: 4px 0;
}
.client-input::placeholder { color: var(--muted); opacity: 0.6; font-weight: 400; }
.client-rep-row {
margin-top: 10px;
}
.client-rep-row .client-label {
margin-bottom: 4px;
font-size: 10px;
}
.client-input--rep {
font-size: clamp(0.875rem, 1.1vw, 1rem);
font-weight: 500;
max-width: 360px;
}