diff --git a/package.json b/package.json index 91f7192..e76f00c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "buildpulse", "private": true, - "version": "0.4.4", + "version": "0.4.5", "type": "module", "scripts": { "api": "node --env-file=../.env server/index.mjs", diff --git a/src/App.tsx b/src/App.tsx index 7b944c4..b3eadf3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1580,7 +1580,7 @@ function App() {
-

BuildPulse v0.4.4

+

BuildPulse v0.4.5

BuildPulse

Current goal: {appState.project.current_goal || 'Classify new ideas before they become work.'} diff --git a/src/index.css b/src/index.css index f563586..c1fe76c 100644 --- a/src/index.css +++ b/src/index.css @@ -2870,3 +2870,242 @@ select { width: 100%; } } + +/* v0.4.5 — sharper, uneven mobile surfaces. Kill the capsule SaaS softness. */ +:root { + --edge-cut-sm: polygon(0 0, calc(100% - 5px) 0, 100% 5px, 100% 100%, 5px 100%, 0 calc(100% - 5px)); + --edge-cut-md: polygon(0 0, calc(100% - 9px) 0, 100% 9px, 100% 100%, 9px 100%, 0 calc(100% - 9px)); + --edge-snag-left: polygon(0 0, 100% 0, 100% calc(100% - 7px), calc(100% - 7px) 100%, 0 100%); + --edge-snag-right: polygon(7px 0, 100% 0, 100% 100%, 0 100%, 0 7px); +} + +.card, +.hero-card, +.focus-panel, +.item-card, +.markdown-card, +.editor-sheet, +.triage-modal, +.top-status-row, +.tab-bar, +.tab, +.primary-triage-button, +button.primary, +button:not(.ghost):not(.tab), +button.ghost, +.import-label, +input, +textarea, +select, +.today-command-drawer, +.drawer-command, +.result-progress-strip { + border-radius: 2px; +} + +.pill, +.tap-chip { + border-radius: 1px; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.card, +.focus-panel, +.item-card, +.editor-sheet, +.triage-modal, +.today-command-drawer, +.result-progress-strip { + clip-path: var(--edge-cut-sm); +} + +.item-card:nth-child(2n), +.feature-column-details:nth-child(2n), +.focus-panel:nth-child(2n) { + clip-path: var(--edge-snag-left); +} + +.item-card:nth-child(3n), +.feature-column-details:nth-child(3n), +.focus-panel:nth-child(3n) { + clip-path: var(--edge-snag-right); +} + +.primary-triage-button, +button.primary, +.drawer-command.primary { + clip-path: var(--edge-cut-md); + background: linear-gradient(135deg, #f8fbff 0%, #bfdbfe 72%, #7dd3fc 100%); +} + +button.ghost, +.drawer-command { + clip-path: var(--edge-cut-sm); +} + +.tab-bar { + clip-path: none; +} + +.tab.active { + clip-path: var(--edge-cut-sm); +} + +@media (max-width: 760px) { + body { + background: + linear-gradient(180deg, rgba(12, 16, 27, 0.9), rgba(4, 7, 13, 1) 38%), + #04070d; + } + + .mobile-shell-header.card, + .today-card.card { + clip-path: none; + } + + .top-status-row, + .today-command-bar button, + .today-command-drawer, + .today-focus-card, + .today-release-card, + .today-decision-card, + .feature-column-details.card, + .item-card, + .editor-sheet, + .triage-modal, + .result-progress-strip { + border-radius: 0; + } + + .top-status-row, + .today-command-drawer, + .item-card, + .result-progress-strip { + clip-path: var(--edge-cut-sm); + } + + .today-primary-command { + clip-path: var(--edge-cut-md); + } + + .today-drawer-toggle { + clip-path: var(--edge-snag-right); + } + + .feature-column-details.card { + padding-block: 0.48rem; + } + + .feature-column-details:not([open]) { + min-height: 0; + padding: 0.48rem 0.15rem; + } + + .feature-column-details:not([open]) .column-header { + min-height: 2.35rem; + } + + .feature-column-details[open] { + border-left: 2px solid rgba(125, 211, 252, 0.42); + padding-left: 0.45rem; + } + + .item-card { + background: rgba(18, 25, 42, 0.92); + border-color: rgba(203, 213, 225, 0.18); + } + + .section-heading p, + .item-card p, + .focus-panel p, + .tap-hint, + small { + color: #b7c4d8; + } + + .feature-signal-row span:last-child { + color: #dbeafe; + text-decoration: underline; + text-underline-offset: 0.18em; + } +} + +/* v0.4.5a — contrast repair after the angular pass. Edgy should not mean illegible. */ +@media (max-width: 760px) { + .simplified-feature-card, + .compact-feature-card { + color: #edf5ff; + } + + .simplified-feature-card .item-card-header strong, + .compact-feature-card .item-card-header strong { + color: #ffffff; + } + + .simplified-feature-card .pill, + .compact-feature-card .pill, + .focus-badges .pill { + border: 1px solid rgba(255, 255, 255, 0.18); + background: rgba(15, 23, 42, 0.86); + color: #eef6ff; + } + + .simplified-feature-card .pill.must, + .compact-feature-card .pill.must { + border-color: rgba(125, 211, 252, 0.52); + background: rgba(14, 165, 233, 0.2); + color: #e0f7ff; + } + + .feature-signal-row, + .simplified-feature-card .feature-signal-row { + color: #cbd7e8; + } + + .feature-signal-row span:last-child { + color: #ffffff; + font-weight: 900; + } +} + +/* v0.4.5b — force readable ink on the bright active feature slab. */ +@media (max-width: 760px) { + .item-card.simplified-feature-card, + .item-card.compact-feature-card { + background: rgba(8, 13, 24, 0.96); + border-color: rgba(125, 211, 252, 0.34); + } + + .item-card.simplified-feature-card p, + .item-card.compact-feature-card p, + .item-card.simplified-feature-card small, + .item-card.compact-feature-card small { + color: #d8e4f4; + } + + .item-card.simplified-feature-card .feature-signal-row, + .item-card.compact-feature-card .feature-signal-row { + color: #d8e4f4; + } + + .item-card.simplified-feature-card .feature-signal-row span, + .item-card.compact-feature-card .feature-signal-row span { + color: #d8e4f4; + } + + .item-card.simplified-feature-card .feature-signal-row span:last-child, + .item-card.compact-feature-card .feature-signal-row span:last-child { + color: #ffffff; + } +} + +/* v0.4.5c — beat the global button skin on tappable feature cards. */ +@media (max-width: 760px) { + button.item-card.simplified-feature-card, + button.item-card.compact-feature-card { + background: rgba(8, 13, 24, 0.96); + color: #edf5ff; + border: 1px solid rgba(125, 211, 252, 0.34); + } +}