Files
svsmspcalc/SVS-MSP-Calculator-layout.css
John OReilly 786a8505ac css: tokenize borders, spacing, and radii — spacing audit pass 4
Phase 1: border widths (1/2/3px → --border-thin/medium/thick) — 76 replacements
Phase 2: adopt existing spacing tokens (--space-xs through --space-xl) — 18 replacements
Phase 3: border-radius scale (--radius-sm/md/lg/pill) — 16 replacements
Total: 110 replacements + 7 new tokens across 7 files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 16:51:43 -04:00

184 lines
6.6 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(12px, 1.2vw, 20px); 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: var(--space-sm); }
.btn-reset-quote,
.btn-import-quote {
width: 100%;
background: var(--surface-sidebar-utility);
border: var(--border-thin) 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: var(--border-thin) solid var(--border);
border-radius: 14px;
padding: 22px 22px var(--space-xl);
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: var(--space-stack-tight);
}
.confirm-modal-title {
font-family: 'Poppins', sans-serif;
font-size: 1.5rem;
line-height: 1.3;
color: var(--ink);
margin-bottom: var(--space-stack-tight);
}
.confirm-modal-copy {
font-size: 0.875rem;
line-height: 1.7;
color: var(--muted);
margin-bottom: var(--space-lg);
}
.confirm-modal-actions {
display: flex;
justify-content: flex-end;
gap: var(--space-stack-tight);
}
.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: var(--border-thin) 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: var(--border-thin) 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: var(--space-md);
}
.client-input {
background: transparent;
border: none;
border-bottom: var(--border-thin) 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: var(--space-xs) 0;
}
.client-input::placeholder { color: var(--muted); opacity: 0.6; font-weight: 400; }
.client-rep-row {
margin-top: var(--space-stack-tight);
}
.client-rep-row .client-label {
margin-bottom: var(--space-xs);
font-size: 10px;
}
.client-input--rep {
font-size: clamp(0.875rem, 1.1vw, 1rem);
font-weight: 500;
max-width: 360px;
}