/* ── Shared nav ── */
.w-nav {
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
display: flex; align-items: center; justify-content: space-between; gap: 16px;
padding: 11px 22px;
background: rgba(250, 248, 245, 0.88);
backdrop-filter: saturate(150%) blur(14px);
-webkit-backdrop-filter: saturate(150%) blur(14px);
border-bottom: 1px solid rgba(0,0,0,0.05);
font-family: 'Inter', sans-serif; font-size: 13.5px;
transition: transform 0.35s ease, background 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}
.w-nav.w-scrolled { background: rgba(250,248,245,0.92); box-shadow: 0 4px 24px rgba(0,0,0,0.07); }
.w-nav.w-hidden { transform: translateY(-100%); }
/* Brand wordmark — the anchor the old nav lacked */
.w-brand {
display: flex; align-items: center; gap: 8px; white-space: nowrap;
font-weight: 600; font-size: 15px; letter-spacing: -0.01em;
color: #1a1a1a; text-decoration: none;
}
.w-brand .w-mark { color: #3c6e47; font-size: 12px; }
.w-links { display: flex; align-items: center; gap: 24px; }
.w-links a, .w-group-btn {
position: relative; color: #8a7a6b; text-decoration: none;
background: none; border: none; cursor: pointer; font-family: inherit;
font-size: 13.5px; padding: 6px 0; line-height: 1.2; white-space: nowrap;
transition: color 0.2s ease;
}
/* Gliding underline on hover + active */
.w-links a::after, .w-group-btn::after {
content: ''; position: absolute; left: 0; right: 0; bottom: -3px; height: 2px;
background: #3c6e47; border-radius: 2px; transform: scaleX(0);
transition: transform 0.25s ease;
}
.w-links a:hover, .w-group-btn:hover { color: #3c6e47; }
.w-links a:hover::after, .w-group-btn:hover::after { transform: scaleX(1); }
.w-links a.active, .w-group-btn.active { color: #3c6e47; font-weight: 500; }
.w-links a.active::after { transform: scaleX(1); }
/* "How it works" dropdown — the internals (Sources/Mind/Evolution/Kitchen) live here */
.w-group { position: relative; }
.w-menu {
/* top:100% (no gap) so hover stays continuous from button to menu; the visual
float comes from margin-top INSIDE the hover area via a transparent bridge. */
position: absolute; top: 100%; right: 0; min-width: 190px;
background: #fff; border: 1px solid #e0dbd4; border-radius: 10px;
box-shadow: 0 10px 34px rgba(0,0,0,0.13); padding: 6px; margin-top: 10px;
display: flex; flex-direction: column; gap: 1px;
opacity: 0; visibility: hidden; transform: translateY(-6px);
transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
}
/* Transparent bridge over the 10px margin so hover doesn't drop in the gap. */
.w-group::after {
content: ''; position: absolute; top: 100%; right: 0; width: 190px; height: 14px;
display: none;
}
.w-group:hover::after { display: block; }
.w-group:hover .w-menu, .w-group:focus-within .w-menu, .w-menu.w-open {
opacity: 1; visibility: visible; transform: translateY(0);
}
.w-menu a { padding: 9px 12px; border-radius: 7px; color: #6a6a6a; font-size: 13px; }
.w-menu a::after { display: none; }
.w-menu a:hover { background: #f5f2ed; color: #3c6e47; }
.w-burger {
display: none; flex-direction: column; gap: 4px;
background: none; border: none; cursor: pointer; padding: 6px;
}
.w-burger span { display: block; width: 20px; height: 2px; background: #6a6a6a; border-radius: 2px; }
/* Mobile: brand + burger; the links collapse into a slide-down panel (no wrapping) */
@media (max-width: 760px) {
.w-burger { display: flex; }
.w-links {
position: fixed; top: 50px; left: 0; right: 0;
flex-direction: column; align-items: stretch; gap: 0;
background: #faf8f5; /* solid — a slide-out menu must be opaque, not glassy */
border-bottom: 1px solid #e0dbd4; box-shadow: 0 14px 30px rgba(0,0,0,0.12);
padding: 6px 0 14px;
transform: translateY(-12px); opacity: 0; visibility: hidden;
transition: opacity 0.22s ease, transform 0.22s ease, visibility 0.22s;
}
.w-links.w-open { transform: translateY(0); opacity: 1; visibility: visible; }
.w-links a, .w-group-btn { padding: 13px 22px; font-size: 15px; text-align: left; }
.w-links a::after, .w-group-btn::after { display: none; }
.w-group { position: static; }
/* INHERIT the slide-out's visibility — do NOT force `visible`. The dropdown lives
inside the fixed .w-links panel; when that panel is closed it's opacity:0 +
visibility:hidden, but an opacity:0 element with visibility:visible is INVISIBLE
yet still captures taps. Forcing `visible` here put the menu links (Mind, Sources,
Kitchen…) as an invisible tap-trap over the top of every page on mobile — taps on
content silently navigated to those routes (Kitchen = 403). `inherit` keeps the
menu shown as a sublist when the panel is open and fully gone when it's closed. */
.w-menu {
position: static; opacity: 1; visibility: inherit; transform: none;
box-shadow: none; border: none; background: transparent; padding: 0 0 0 18px; min-width: 0;
}
.w-theme { margin: 8px 0 0 18px; align-self: flex-start; }
/* Overflow guard: wide tables/pre scroll inside their own box; the page itself
never scrolls sideways (fixes /desk, /kitchen, /sources, /archive on mobile). */
table { display: block; max-width: 100%; overflow-x: auto; }
pre { overflow-x: auto; max-width: 100%; }
html, body { overflow-x: hidden; max-width: 100%; }
}
/* ── Page transition ── */
.w-page {
animation: pageIn 0.4s ease-out;
}
@keyframes pageIn {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes pageOut {
from { opacity: 1; transform: translateY(0); }
to { opacity: 0; transform: translateY(-8px); }
}
/* ── Depth: shared card style ── */
.w-card {
border: 1px solid #e0dbd4;
box-shadow: 0 1px 4px rgba(0,0,0,0.06);
border-radius: 8px;
background: #fff;
transition: all 0.2s ease;
}
.w-card:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
/* ── Numbers always tabular ── */
[class*="stat"], [class*="score"], [class*="pct"],
[class*="num"], [class*="conf"], [class*="val"] {
font-variant-numeric: tabular-nums;
}
/* ── Theme toggle ── */
.w-theme {
background: none; border: none; cursor: pointer; color: #8a7a6b;
font-size: 16px; line-height: 1; padding: 4px; margin-left: 4px;
transition: color 0.2s ease;
}
.w-theme:hover { color: #3c6e47; }
/* ── Dark theme (toggle-driven; tokens kept local to the nav so it themes
correctly regardless of the page's own palette) ── */
html[data-theme="dark"] .w-nav { background: rgba(22,20,15,0.88); border-bottom-color: rgba(255,255,255,0.06); }
html[data-theme="dark"] .w-nav.w-scrolled { background: rgba(22,20,15,0.92); box-shadow: 0 4px 24px rgba(0,0,0,0.5); }
html[data-theme="dark"] .w-brand { color: #f2ede3; }
html[data-theme="dark"] .w-links a,
html[data-theme="dark"] .w-group-btn,
html[data-theme="dark"] .w-theme { color: #a59c8c; }
html[data-theme="dark"] .w-links a:hover,
html[data-theme="dark"] .w-group-btn:hover,
html[data-theme="dark"] .w-links a.active,
html[data-theme="dark"] .w-group-btn.active,
html[data-theme="dark"] .w-theme:hover { color: #6aa77f; }
html[data-theme="dark"] .w-links a::after,
html[data-theme="dark"] .w-group-btn::after { background: #6aa77f; }
html[data-theme="dark"] .w-menu { background: #1e1b14; border-color: #332c22; box-shadow: 0 10px 34px rgba(0,0,0,0.5); }
html[data-theme="dark"] .w-menu a { color: #a59c8c; }
html[data-theme="dark"] .w-menu a:hover { background: #24201a; color: #6aa77f; }
html[data-theme="dark"] .w-burger span { background: #a59c8c; }
html[data-theme="dark"] .w-card { background: #1e1b14; border-color: #332c22; box-shadow: 0 1px 4px rgba(0,0,0,0.45); }
@media (max-width: 760px) {
html[data-theme="dark"] .w-links { background: #16140f; border-bottom-color: #332c22; }
}
:root {
--t-display: clamp(27px, 1.55rem + 1.7vw, 40px);
--t-h1: clamp(24px, 1.40rem + 1.2vw, 33px);
--t-h2: clamp(20px, 1.20rem + 0.7vw, 26px);
--t-h3: clamp(17px, 1.05rem + 0.4vw, 20px);
--t-lede: clamp(18px, 1.05rem + 0.5vw, 22px);
--t-body: clamp(16px, 1.00rem + 0.2vw, 19px);
--t-small: 14px;
--t-label: 11.5px;
--t-tracking-label: 1.6px;
}
:root { --text-3: #7c6d60; }
html[data-theme="dark"] { --text-3: #907f6f; }
/* ── Shared typography ── */
.t-display, .t-h1, .t-h2, .t-h3 {
font-family: 'Newsreader', Georgia, 'Times New Roman', serif;
color: var(--text-0); margin: 0;
}
.t-display { font-size: var(--t-display); font-weight: 400; letter-spacing: -0.5px; line-height: 1.12; }
.t-h1 { font-size: var(--t-h1); font-weight: 400; letter-spacing: -0.3px; line-height: 1.18; }
.t-h2 { font-size: var(--t-h2); font-weight: 500; line-height: 1.25; }
.t-h3 { font-size: var(--t-h3); font-weight: 500; line-height: 1.3; }
/* Labels. Deliberately NOT headings-in-miniature — a different role, so a
different face. Kept at 11.5px minimum: the old 9px eyebrows were both the
smallest and the lowest-contrast type on the page. */
.t-eyebrow, .t-kicker {
font-family: 'Inter', sans-serif; font-size: var(--t-label); font-weight: 600;
letter-spacing: var(--t-tracking-label); text-transform: uppercase; margin: 0;
}
.t-eyebrow { color: var(--text-2); }
.t-kicker { color: var(--accent); }
.t-deck {
font-family: 'Newsreader', Georgia, serif; font-size: var(--t-lede);
font-weight: 300; line-height: 1.45; color: var(--text-2); margin: 10px 0 0;
}
.t-meta {
font-family: 'JetBrains Mono', monospace; font-size: var(--t-label);
letter-spacing: 1.5px; color: var(--text-3);
}
◆ Workshop
Engine Internals
Operator introspection — how the engine decomposes its own record.
The public track record lives on the scoreboard .
Accuracy by Mind — historical record No mind-level history.
Mind Predictions Avg Score Correct Macro (retired 2026-07-18) 18 19% 2 Flow (retired 2026-07-18) 33 27% 5 Contrarian (retired 2026-07-18) 30 40% 10 Synthesis 1403 58% 874
The three-minds framing was retired 2026-07-18 after the two-week review: the shadow minds' own calls graded far below synthesis and none had produced a graded call since mid-June. Their history stays on the record above; the debate persists internally as adversarial input to synthesis.
Accuracy by Regime Regime Predictions Avg Score Correct Choppy 255 63% 175 Crisis 246 56% 138 Risk Off 43 57% 27 Risk On 682 59% 435 Trending Down 19 65% 14 Trending Up 23 60% 16
Confidence Multipliers (46) The learned calibration state: how much each domain × horizon × regime bucket's stated confidence is scaled before publishing.
Crypto: 0.92x Crypto Long Term: 0.60x Crypto Medium Term: 0.85x Crypto Medium Term Choppy: 0.69x Crypto Medium Term Crisis: 0.77x Crypto Medium Term Risk Off: 0.96x Crypto Medium Term Risk On: 0.93x Crypto Short Term: 0.94x Crypto Short Term Choppy: 1.05x Crypto Short Term Crisis: 0.94x Crypto Short Term Risk Off: 1.26x Crypto Short Term Risk On: 1.01x Crypto Short Term Trending Down: 1.40x Equities: 0.87x Equities Medium Term: 0.85x Equities Medium Term Choppy: 0.83x Equities Medium Term Crisis: 0.79x Equities Medium Term Risk Off: 0.68x Equities Medium Term Risk On: 0.88x Equities Short Term: 0.87x Equities Short Term Choppy: 0.90x Equities Short Term Crisis: 0.73x Equities Short Term Risk Off: 0.78x Equities Short Term Risk On: 0.89x Equities Short Term Trending Down: 0.81x Equities Short Term Trending Up: 1.12x Macro: 1.13x Macro Medium Term: 1.15x Macro Medium Term Risk On: 1.30x Macro Short Term: 1.15x Macro Short Term Choppy: 1.28x Macro Short Term Crisis: 1.19x Macro Short Term Risk Off: 1.11x Macro Short Term Risk On: 1.07x Other: 1.03x Other Medium Term: 0.79x Other Medium Term Risk On: 0.82x Other Short Term: 1.03x Other Short Term Choppy: 1.03x Other Short Term Crisis: 1.08x Other Short Term Risk Off: 1.33x Other Short Term Risk On: 1.00x Other Short Term Trending Down: 1.40x Other Short Term Trending Up: 0.93x World Conflict Medium Term: 1.40x World Treaty Medium Term: 1.40x
World Calls — Settlement World calls stay out of the headline accuracy until reality-verified. oracle-settled: none reality-verified yet · self-graded (LLM-read, experimental): avg 83% over n=16.