/* ── 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; }
}
◆ Workshop
Engine Internals
Operator introspection — how the engine decomposes its own record.
The public track record lives on the scoreboard .
Accuracy by Mind
Macro and Flow run in shadow mode — measured, not publishing.
Mind Predictions Avg Score Correct Macro (shadow) 18 19% 2 Flow (shadow) 33 27% 5 Contrarian 30 40% 10 Synthesis 1230 60% 803
Accuracy by Regime
Regime Predictions Avg Score Correct Choppy 239 64% 168 Crisis 190 59% 117 Risk Off 35 60% 24 Risk On 589 61% 395 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: 1.02x Crypto Long Term: 0.85x Crypto Medium Term: 1.00x Crypto Medium Term Choppy: 1.00x Crypto Medium Term Crisis: 0.95x Crypto Medium Term Risk Off: 1.17x Crypto Medium Term Risk On: 1.02x Crypto Short Term: 1.03x Crypto Short Term Choppy: 1.10x Crypto Short Term Crisis: 1.06x Crypto Short Term Risk Off: 1.14x Crypto Short Term Risk On: 1.10x Crypto Short Term Trending Down: 1.20x Equities: 1.07x Equities Medium Term: 1.13x Equities Medium Term Choppy: 1.03x Equities Medium Term Crisis: 1.21x Equities Medium Term Risk Off: 0.89x Equities Medium Term Risk On: 1.13x Equities Short Term: 1.06x Equities Short Term Choppy: 1.07x Equities Short Term Crisis: 1.03x Equities Short Term Risk Off: 1.00x Equities Short Term Risk On: 1.06x Equities Short Term Trending Down: 1.06x Equities Short Term Trending Up: 1.15x Macro: 1.23x Macro Medium Term: 1.19x Macro Medium Term Risk On: 1.18x Macro Short Term: 1.24x Macro Short Term Choppy: 1.28x Macro Short Term Crisis: 1.25x Macro Short Term Risk Off: 1.30x Macro Short Term Risk On: 1.18x Other: 1.22x Other Medium Term: 1.15x Other Medium Term Risk On: 1.16x Other Short Term: 1.22x Other Short Term Choppy: 1.24x Other Short Term Crisis: 1.25x Other Short Term Risk Off: 1.27x Other Short Term Risk On: 1.20x Other Short Term Trending Down: 1.27x Other Short Term Trending Up: 1.09x World Conflict Medium Term: 1.29x World Treaty Medium Term: 1.36x
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 84% over n=15.