summaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorTyler Hoang <tyler@tylerhoang.xyz>2026-06-29 01:41:25 -0700
committerTyler Hoang <tyler@tylerhoang.xyz>2026-06-29 01:41:25 -0700
commit53e7bce26a21ab3853712ab53a38c6760b4ab25a (patch)
tree76352711b21d37313d4d452900f97b1eedbcd630 /frontend
parentab699a136169e8661b4f22fbce023ca7f033ce18 (diff)
feat: add prism shell CSS for valuation layout
Diffstat (limited to 'frontend')
-rw-r--r--frontend/app/prism-shell.css367
1 files changed, 367 insertions, 0 deletions
diff --git a/frontend/app/prism-shell.css b/frontend/app/prism-shell.css
index 09b8ebd..ef551da 100644
--- a/frontend/app/prism-shell.css
+++ b/frontend/app/prism-shell.css
@@ -571,6 +571,18 @@
color: var(--warning);
}
+.psm-currency-warning {
+ display: inline-block;
+ padding: 2px var(--sp-2);
+ border: 1px solid rgba(196, 149, 69, 0.4);
+ background: var(--warning-bg);
+ color: var(--warning);
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ border-radius: var(--r-2);
+ line-height: 1.4;
+}
+
.psm-status-chip {
border: 1px solid rgba(79, 140, 94, 0.35);
background: var(--positive-bg);
@@ -1449,6 +1461,11 @@
font-variant-numeric: tabular-nums;
}
+.psm-val-intrinsic-price.invalid {
+ color: var(--negative);
+ font-size: var(--fs-24);
+}
+
.psm-val-mult-list {
display: flex;
flex-direction: column;
@@ -1962,3 +1979,353 @@
font-size: var(--fs-12);
line-height: 1.5;
}
+
+/* ── Valuation mode toggle (segmented control) ─────────────────────────── */
+
+.psm-val-mode-toggle {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-2);
+}
+
+.psm-val-mode-segment {
+ display: flex;
+ gap: 2px;
+ border: 1px solid var(--line-2);
+ background: var(--ink-2);
+ border-radius: var(--r-1);
+ padding: 2px;
+}
+
+.psm-val-mode-btn {
+ border: 0;
+ border-radius: var(--r-1);
+ background: transparent;
+ color: var(--fg-3);
+ padding: 5px 12px;
+ font-family: var(--font-mono);
+ font-size: var(--fs-12);
+ letter-spacing: 0.04em;
+ cursor: pointer;
+ transition: background 150ms ease, color 150ms ease;
+}
+
+.psm-val-mode-btn:hover:not(.active) {
+ color: var(--fg-1);
+}
+
+.psm-val-mode-btn.active {
+ background: var(--ink-3);
+ color: var(--fg-1);
+}
+
+/* ── Advanced DCF panel ───────────────────────────────────────────────── */
+
+.psm-val-advanced-panel {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-4);
+}
+
+.psm-val-preset-row {
+ display: flex;
+ gap: var(--sp-2);
+}
+
+.psm-val-preset-btn {
+ border: 1px solid var(--line-2);
+ border-radius: var(--r-1);
+ background: var(--ink-2);
+ color: var(--fg-3);
+ padding: 5px 12px;
+ font-family: var(--font-mono);
+ font-size: var(--fs-12);
+ letter-spacing: 0.04em;
+ cursor: pointer;
+ transition: border-color 150ms ease, color 150ms ease, background 150ms ease;
+}
+
+.psm-val-preset-btn:hover {
+ border-color: var(--brass);
+ color: var(--brass);
+ background: var(--ink-3);
+}
+
+.psm-val-advanced-grid {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-3);
+}
+
+.psm-val-advanced-row {
+ display: grid;
+ grid-template-columns: 120px repeat(5, 1fr);
+ gap: var(--sp-2);
+ align-items: center;
+}
+
+.psm-val-advanced-row.scalar {
+ grid-template-columns: 120px 1fr;
+}
+
+.psm-val-advanced-label {
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ font-weight: 600;
+ letter-spacing: var(--tr-wider);
+ text-transform: uppercase;
+ color: var(--fg-3);
+ white-space: nowrap;
+}
+
+.psm-val-advanced-input {
+ width: 100%;
+ background: var(--ink-2);
+ border: 1px solid var(--line-2);
+ border-radius: var(--r-1);
+ color: var(--fg-1);
+ padding: 6px 8px;
+ font-family: var(--font-mono);
+ font-size: var(--fs-13);
+ font-variant-numeric: tabular-nums;
+ outline: none;
+ transition: border-color 150ms ease, box-shadow 150ms ease;
+}
+
+.psm-val-advanced-input:focus {
+ border-color: var(--brass);
+ box-shadow: 0 0 0 1px var(--focus-ring);
+}
+
+.psm-val-advanced-input::placeholder {
+ color: var(--fg-4);
+}
+
+/* Hide number spinners */
+.psm-val-advanced-input::-webkit-outer-spin-button,
+.psm-val-advanced-input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+.psm-val-advanced-input[type="number"] {
+ -moz-appearance: textfield;
+}
+
+.psm-val-advanced-result {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-2);
+ padding: var(--sp-4);
+ background: var(--ink-2);
+ border: 1px solid var(--line-1);
+ border-radius: var(--r-2);
+ align-self: start;
+}
+
+.psm-val-advanced-result-label {
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ font-weight: 600;
+ letter-spacing: var(--tr-wider);
+ text-transform: uppercase;
+ color: var(--fg-3);
+}
+
+.psm-val-advanced-result-price {
+ font-family: var(--font-mono);
+ font-size: var(--fs-30);
+ color: var(--brass);
+ font-variant-numeric: tabular-nums;
+ line-height: 1.1;
+}
+
+.psm-val-advanced-result-price.invalid {
+ color: var(--negative);
+ font-size: var(--fs-18);
+}
+
+.psm-val-advanced-field {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-1);
+}
+
+.psm-val-advanced-field-label {
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ font-weight: 600;
+ letter-spacing: var(--tr-wider);
+ text-transform: uppercase;
+ color: var(--fg-3);
+}
+
+.psm-val-advanced-table {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-2);
+}
+
+.psm-val-advanced-table-header {
+ display: grid;
+ grid-template-columns: 130px repeat(5, 1fr);
+ gap: var(--sp-2);
+ align-items: center;
+}
+
+.psm-val-advanced-table-corner {
+ display: block;
+}
+
+.psm-val-advanced-table-year {
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ font-weight: 600;
+ letter-spacing: var(--tr-wider);
+ text-transform: uppercase;
+ color: var(--fg-4);
+ text-align: center;
+}
+
+.psm-val-advanced-table-row {
+ display: grid;
+ grid-template-columns: 130px repeat(5, 1fr);
+ gap: var(--sp-2);
+ align-items: center;
+}
+
+.psm-val-advanced-table-label {
+ font-family: var(--font-sans);
+ font-size: var(--fs-12);
+ font-weight: 600;
+ letter-spacing: var(--tr-wider);
+ text-transform: uppercase;
+ color: var(--fg-3);
+ white-space: nowrap;
+}
+
+/* ── Sensitivity table ─────────────────────────────────────────────────── */
+
+.psm-val-sensitivity {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-3);
+ padding-top: var(--sp-4);
+ border-top: 1px solid var(--line-1);
+}
+
+.psm-val-sensitivity-head {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+}
+
+.psm-val-sensitivity-title {
+ font-family: var(--font-sans);
+ font-size: var(--fs-14);
+ font-weight: 600;
+ color: var(--fg-2);
+}
+
+.psm-val-sensitivity-subtitle {
+ font-family: var(--font-mono);
+ font-size: var(--fs-12);
+ color: var(--fg-4);
+ font-variant-numeric: tabular-nums;
+}
+
+.psm-val-sensitivity-table {
+ width: 100%;
+ border-collapse: collapse;
+ font-size: var(--fs-13);
+}
+
+.psm-val-sensitivity-table th,
+.psm-val-sensitivity-table td {
+ padding: 8px var(--sp-3);
+ text-align: right;
+ border-bottom: 1px solid var(--ink-2);
+}
+
+.psm-val-sensitivity-table th {
+ font-family: var(--font-sans);
+ font-weight: 600;
+ color: var(--fg-3);
+ font-size: var(--fs-12);
+ letter-spacing: var(--tr-wide);
+ text-transform: uppercase;
+}
+
+.psm-val-sensitivity-corner {
+ text-align: left;
+ color: var(--fg-4);
+ font-size: var(--fs-12);
+}
+
+.psm-val-sensitivity-col-header {
+ text-align: center;
+}
+
+.psm-val-sensitivity-row-header {
+ text-align: left;
+ font-family: var(--font-mono);
+ font-variant-numeric: tabular-nums;
+ color: var(--fg-3);
+}
+
+.psm-val-sensitivity-cell {
+ font-family: var(--font-mono);
+ font-variant-numeric: tabular-nums;
+ color: var(--fg-2);
+ transition: background 150ms ease;
+}
+
+.psm-val-sensitivity-cell.is-center {
+ background: rgba(194, 170, 122, 0.08);
+ color: var(--brass);
+ font-weight: 600;
+}
+
+.psm-val-sensitivity-col-header.is-center,
+.psm-val-sensitivity-row-header.is-center {
+ color: var(--brass);
+}
+
+.psm-val-sensitivity-table tbody tr:hover .psm-val-sensitivity-cell {
+ background: rgba(194, 170, 122, 0.04);
+}
+
+.psm-val-sensitivity-cell.negative {
+ color: var(--negative);
+}
+
+/* ── WACC note readability fix ─────────────────────────────────────────── */
+
+.psm-val-wacc-note {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px 8px;
+ align-items: baseline;
+ font-family: var(--font-mono);
+ font-size: var(--fs-13);
+ color: var(--fg-3);
+ font-variant-numeric: tabular-nums;
+ line-height: 1.5;
+}
+
+.psm-val-wacc-label {
+ color: var(--fg-2);
+ font-weight: 600;
+}
+
+.psm-val-wacc-value {
+ color: var(--brass);
+ font-weight: 600;
+}
+
+.psm-val-wacc-detail {
+ width: 100%;
+ margin-top: 2px;
+ color: var(--fg-4);
+ font-size: var(--fs-12);
+}