Massive AI Overhaul

This commit is contained in:
John OReilly
2026-03-15 18:24:36 -04:00
parent bce93507cb
commit 42b7b06dda
9637 changed files with 403289 additions and 4217 deletions

View File

@@ -0,0 +1,183 @@
/* 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: sticky; top: var(--sidebar-sticky-top); 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: #fff;
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;
}