:root{--ocean:#092d39;--gold:#c5a465;--steel:#7896a0;--seafoam:#a0c9bd;--mist:#eaf0ef;--iron:#25383d;--sand:#f3eee4;--equity:#174f61;--bond:#729aaa;--energy:#bc7859;--cash:#b1bdbc;--line:#d8e0de}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#f7f8f5;color:var(--iron);font:15px/1.5 'IBM Plex Sans',sans-serif}button,select,input{font:inherit}button{cursor:pointer}button:disabled{opacity:.4;cursor:not-allowed}a{color:inherit}button:focus-visible,select:focus-visible,input:focus-visible,a:focus-visible,svg [tabindex]:focus-visible{outline:3px solid var(--gold);outline-offset:3px}button,select{border:1px solid var(--line);background:white;color:var(--iron);border-radius:3px;padding:9px 13px}button:hover,select:hover{border-color:var(--gold)}.top{background:var(--ocean);color:white;padding:17px max(22px,calc((100vw - 1440px)/2));display:flex;justify-content:space-between;gap:20px;align-items:center}.brand{text-decoration:none;font-size:18px;font-weight:700;letter-spacing:.08em}.brand span{font:11px 'IBM Plex Mono',monospace;color:var(--seafoam);display:block;letter-spacing:.12em}nav{display:flex;gap:22px;font-size:13px}nav a{text-decoration:none}nav a:hover{color:var(--gold)}main{max-width:1440px;margin:auto;padding:0 clamp(18px,4vw,58px) 80px}footer{background:var(--ocean);padding:25px clamp(18px,4vw,58px);color:#c4d3d2;font-size:12px}.loading,.error{padding:100px 0}.eyebrow{font:600 11px 'IBM Plex Mono',monospace;letter-spacing:.14em;text-transform:uppercase;color:#617e83}.hero{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end;padding:58px 0 35px}.hero h1{font-size:clamp(40px,5.5vw,76px);line-height:1;letter-spacing:-.055em;font-weight:500;color:var(--ocean);margin:13px 0}.hero p{margin:0;color:#527079}.hero .issue{background:var(--sand);border-left:4px solid var(--gold);padding:17px 22px;min-width:230px}.issue strong{display:block;font-size:23px;color:var(--ocean)}.issue small{display:block;max-width:270px}.meta{border-block:1px solid var(--line);padding:13px 0;display:flex;gap:18px;flex-wrap:wrap;font:12px 'IBM Plex Mono',monospace;color:#5e7278}.meta b{color:var(--iron)}section{padding:60px 0;border-bottom:1px solid var(--line)}.section-head{display:flex;justify-content:space-between;align-items:end;gap:16px;flex-wrap:wrap;margin-bottom:23px}h2{font-weight:500;letter-spacing:-.04em;font-size:clamp(29px,3vw,43px);margin:0;color:var(--ocean)}h3{margin:0 0 12px;font-size:19px;font-weight:600;color:var(--ocean)}.sub{color:#5a7177;margin:7px 0 0;max-width:760px;font-size:13px}.mono,.value,.axis-label,.tile-value{font-family:'IBM Plex Mono',monospace;font-variant-numeric:tabular-nums}.segmented{display:flex;background:#e5ebea;border-radius:4px;padding:3px}.segmented button{border:0;background:transparent;font-size:13px}.segmented .active{background:var(--ocean);color:#fff}.allocation-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(280px,.55fr);gap:22px}.panel{background:white;border:1px solid var(--line);padding:22px;min-width:0}.panel.dark{background:var(--ocean);border-color:var(--ocean);color:#e8f0ee}.panel.dark h3{color:white}.panel-title{display:flex;justify-content:space-between;gap:12px;align-items:center;font:600 12px 'IBM Plex Mono',monospace;letter-spacing:.04em;margin-bottom:14px}.panel-title span:last-child{color:#77959a}.mosaic{height:410px;position:relative;background:#e9eeed;overflow:hidden}.tile{position:absolute;border:2px solid white;overflow:hidden;padding:11px;display:flex;flex-direction:column;justify-content:space-between;color:white;text-shadow:0 1px 3px #092d39b0;min-width:0}.tile.compact{padding:4px;font-size:10px}.tile .tile-name{font-size:clamp(10px,1.2vw,15px);font-weight:600;line-height:1.15;overflow-wrap:anywhere}.tile.compact .tile-name{font-size:10px}.tile .tile-value{font-size:16px;font-weight:600}.tile.compact .tile-value{font-size:10px}.tile[data-asset="10Y bonds"],.tile[data-asset="Cash"]{color:var(--ocean);text-shadow:none}.legend{display:flex;gap:9px 16px;flex-wrap:wrap;margin:16px 0;font-size:12px}.legend span{display:inline-flex;gap:7px;align-items:center}.swatch{width:11px;height:11px;background:var(--swatch);display:inline-block;flex:none}.positions{max-height:320px;overflow:auto;border-top:1px solid var(--line)}table{border-collapse:collapse;width:100%;font-size:12px}th,td{text-align:left;padding:8px 5px;border-bottom:1px solid var(--line)}th{font-weight:600;color:#5c747a;position:sticky;top:0;background:white}th:not(:first-child),td:not(:first-child){text-align:right;font-family:'IBM Plex Mono',monospace}.summary-list{list-style:none;padding:0;margin:0}.summary-list li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}.summary-list i{display:inline-block;width:9px;height:9px;margin-right:9px;background:var(--swatch)}.big-number{font:500 clamp(44px,5vw,68px) 'IBM Plex Mono',monospace;letter-spacing:-.06em;color:var(--ocean);margin:4px 0}.big-number small{font-size:20px}.note{font-size:12px;color:#637a7e}.timeline{display:flex;align-items:center;gap:10px;background:var(--sand);padding:13px 16px;flex-wrap:wrap;margin-bottom:16px}.timeline input{flex:1;min-width:130px;accent-color:var(--ocean)}.timeline .date{min-width:77px;text-align:center;font-weight:600}.cube-layout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(270px,.65fr);gap:20px}.cube-stage{background:radial-gradient(ellipse at 50% 48%,#194958,#092d39 70%);border:1px solid #29515c;position:relative;overflow:hidden}.cube-stage svg{display:block;width:100%;height:auto;min-height:420px;touch-action:none;cursor:grab}.cube-stage svg:active{cursor:grabbing}.cube-stage text{font:12px 'IBM Plex Sans',sans-serif;fill:#e9f1ef;paint-order:stroke;stroke:#092d39;stroke-width:3px}.cube-stage .corner-label{font-size:11px;fill:white}.cube-stage .point{cursor:pointer}.cube-stage .point:hover circle{stroke:var(--gold);stroke-width:4}.cube-hint{position:absolute;bottom:8px;left:15px;font-size:11px;color:#b9cfcf;pointer-events:none}.carousel{display:flex;align-items:center;gap:9px;margin:12px 0 0}.carousel select{flex:1;min-width:0}.carousel button{min-width:40px}.inspector{background:white;border:1px solid var(--line);padding:22px;min-width:0}.inspector .measure{display:grid;grid-template-columns:1fr auto;gap:7px 10px;border-bottom:1px solid var(--line);padding:8px 0;font-size:13px}.inspector .measure b{font-family:'IBM Plex Mono',monospace}.pill{display:inline-block;padding:2px 7px;font:11px 'IBM Plex Mono',monospace;background:var(--mist);color:var(--ocean)}details{border-top:1px solid var(--line);padding:13px 0}details summary{cursor:pointer;font-weight:600;color:var(--ocean)}details p{font-size:12px;color:#536a70;margin:9px 0}details .measure{font-size:12px}.warn{padding:12px;background:#fbf2df;border-left:3px solid var(--gold);font-size:12px;color:#604f33;margin:12px 0}.source{font:11px/1.6 'IBM Plex Mono',monospace;overflow-wrap:anywhere;color:#607b7d}.chart-shell{background:white;border:1px solid var(--line);padding:18px;position:relative}.chart{display:block;width:100%;height:auto;touch-action:pan-y;cursor:crosshair}.chart text{font:11px 'IBM Plex Mono',monospace;fill:#657b80}.chart .grid{stroke:#dde6e4;stroke-width:1}.chart .marker{stroke:var(--ocean);stroke-width:1.5;stroke-dasharray:4 3}.chart-readout{display:flex;gap:18px;flex-wrap:wrap;align-items:baseline;margin:12px 0 0;min-height:45px}.chart-readout strong{font-size:20px;color:var(--ocean)}.chart-readout small{color:#61777d}.chart-controls{display:flex;align-items:center;gap:8px}.chart-controls select{min-width:115px}.caveats{margin-top:16px}.caveats summary{font-size:13px}.caveats p{max-width:1050px}.method-foot{margin-top:20px;color:#63797d;font-size:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:900px){.allocation-grid,.cube-layout{grid-template-columns:1fr}.mosaic{height:360px}.hero{grid-template-columns:1fr}.inspector{order:2}}@media(max-width:600px){.top{align-items:flex-start;flex-direction:column;gap:9px}nav{gap:15px;flex-wrap:wrap}section{padding:40px 0}.hero{padding:40px 0 24px}.panel,.inspector{padding:14px}.mosaic{height:320px}.tile{padding:5px}.tile .tile-name{font-size:11px}.tile .tile-value{font-size:12px}.cube-stage svg{min-height:310px}.timeline{gap:6px;padding:10px}.chart-shell{padding:9px}.chart-readout strong{font-size:16px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
/* Allocation v2 — depth and linked inspectors */
.gold-dot{color:var(--gold)}.mosaic .tile{border:2px solid #fff;text-align:left;border-radius:0}.mosaic .tile:hover,.mosaic .tile:focus-visible{outline:3px solid var(--gold);outline-offset:-3px;z-index:3}.mosaic .tile.compact .tile-name{display:none}.mosaic .tile.compact .tile-value{font-size:10px}.asset-ring{margin:25px auto 15px;width:160px;height:160px;border-radius:50%;background:conic-gradient(var(--equity) 0 50%,var(--bond) 50% 65%,var(--gold) 65% 85%,var(--energy) 85% 100%);position:relative}.asset-ring:after{content:'ASSET MIX';position:absolute;inset:35px;background:white;border-radius:50%;display:grid;place-items:center;color:var(--ocean);font:600 12px 'IBM Plex Mono',monospace;letter-spacing:.07em}.wheel-wrap{height:138px;overflow:hidden;perspective:900px;background:#dde7e5;border:1px solid var(--line);margin-bottom:18px}.cube-wheel{height:100%;position:relative;max-width:920px;margin:auto;transform-style:preserve-3d}.wheel-card{position:absolute;left:50%;top:10px;width:176px;height:116px;margin-left:-88px;padding:0;overflow:hidden;background:#092d39;border:2px solid #7e9da0;color:white;transform:translateX(calc(var(--delta) * 150px)) rotateY(calc(var(--delta) * -27deg)) scale(calc(1 - var(--abs) * .15));opacity:calc(1 - var(--abs) * .25);transition:transform .32s ease,opacity .32s ease,border-color .2s;box-shadow:0 7px 17px #092d3938}.wheel-card.current{border-color:var(--gold);box-shadow:0 10px 26px #092d3966}.wheel-card svg{width:100%;height:100%;opacity:.8}.wheel-card span{position:absolute;bottom:3px;left:5px;right:5px;font:600 11px 'IBM Plex Sans',sans-serif;text-align:center;text-shadow:0 1px 4px #000;background:#092d3977}.region-row{width:100%;display:grid;grid-template-columns:1fr auto;align-items:center;gap:0 12px;border:0;border-bottom:1px solid var(--line);text-align:left;border-radius:0;padding:10px 1px;font-size:13px}.region-row span i{display:inline-block;background:var(--swatch);width:10px;height:10px;margin-right:8px}.region-row small{grid-column:1/-1;color:#647d81;margin-left:18px}.inspector-spot{display:flex;flex-direction:column;background:var(--sand);padding:15px;margin:12px 0 17px}.inspector-spot strong{font:500 38px 'IBM Plex Mono',monospace;color:var(--ocean)}.inspector-spot small{font-size:11px;color:#566d71}.coordinate-trio{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:13px 0}.coordinate-trio div{background:#e8efed;text-align:center;padding:9px}.coordinate-trio span{display:block;font:600 11px 'IBM Plex Mono',monospace;color:#668087}.coordinate-trio strong{font:600 22px 'IBM Plex Mono',monospace;color:var(--ocean)}.mix-head{font:600 12px 'IBM Plex Mono',monospace;color:#546c73;margin:12px 0 5px}.mixbar{display:flex;height:13px;overflow:hidden;margin:7px 0 12px}.mixbar>div{border-right:2px solid white}.chart-readout .swatch{vertical-align:middle;margin-right:5px}.chart-readout span{font:13px 'IBM Plex Mono',monospace}.chart .marker{pointer-events:none}.wheel-card .point{pointer-events:none}@media(max-width:700px){.wheel-card{width:125px;height:96px;margin-left:-62px;transform:translateX(calc(var(--delta) * 105px)) rotateY(calc(var(--delta) * -27deg)) scale(calc(1 - var(--abs) * .15))}.wheel-wrap{height:116px}.asset-ring{width:120px;height:120px}.asset-ring:after{inset:27px;font-size:10px}.cube-stage svg{min-height:250px}.cube-stage text{font-size:10px}}@media(prefers-reduced-motion:reduce){.wheel-card{transition:none}}
/* Composition rings, persistent time control, and genuine WebGL scene. */
#global-timeline{position:sticky;top:0;z-index:80;display:grid;grid-template-columns:38px 62px minmax(0,1fr) 155px 38px;align-items:center;gap:9px;margin:0 0 18px;background:#e8efeb;border:1px solid #b8cbc6;box-shadow:0 8px 23px #092d3927;padding:10px 14px}
#global-timeline input{min-width:0;width:100%}#global-timeline .date{min-width:0;text-align:center;font-size:13px;white-space:nowrap}#global-timeline button{padding:7px 5px}
section{scroll-margin-top:75px}
.ring-wrap{max-width:540px;margin:0 auto}.allocation-ring{width:100%;display:block;max-height:520px;overflow:visible}.allocation-ring .position-sector{cursor:pointer;transition:filter .2s}.allocation-ring .position-sector:hover,.allocation-ring .position-sector:focus-visible{filter:brightness(1.35) drop-shadow(0 0 4px #092d3966);outline:none}.ring-number{font:600 13px 'IBM Plex Mono',monospace;fill:#fff;paint-order:stroke;stroke:#092d3970;stroke-width:2px}.ring-center-title{font:600 11px 'IBM Plex Mono',monospace;fill:#55737b;letter-spacing:.12em}.ring-center-value{font:500 31px 'IBM Plex Mono',monospace;fill:#174f61}.ring-key{text-align:center;margin:0 0 15px;color:#607b7d;font:10px 'IBM Plex Mono',monospace;letter-spacing:.07em;white-space:pre-wrap}
.position-key{margin:16px 0;border-top:1px solid var(--line)}.position-group{border-bottom:1px solid var(--line);padding:9px 0}.position-group-title{display:block;color:#526d74;font:600 10px 'IBM Plex Mono',monospace;letter-spacing:.08em;text-transform:uppercase}.position-group-title:before{content:'';display:inline-block;background:var(--swatch);width:8px;height:8px;margin-right:8px}.position-group button{width:100%;background:transparent;border:0;border-radius:0;display:flex;justify-content:space-between;gap:10px;text-align:left;padding:5px 0;color:var(--ocean);font-size:12px}.position-group button:hover,.position-group button:focus-visible{background:var(--mist);outline:1px solid var(--gold)}.position-group b{font-family:'IBM Plex Mono',monospace;font-weight:500}
.cube-stage{background:#f7f9f8;border-color:#cbd9d6;min-height:530px}.cube-stage #plotly-cube{width:100%;height:530px;position:relative}.cube-stage svg{min-height:0}.cube-stage .cube-hint{color:#607a7e;background:#f7f9f8df;padding:4px 8px;bottom:5px;left:6px}.cube-stage text{paint-order:normal;stroke:none;fill:inherit}.cube-stage .modebar svg{height:14px;min-height:0}.carousel #trail-window{flex:0 1 125px;min-width:90px}.wheel-card{background:linear-gradient(150deg,#0d3946,#08252e)}.wheel-card svg{height:83%;margin-top:3px}.wheel-card span{background:#092d39de}
.stats-block{margin:24px 0;background:#f0f4f2;border:1px solid var(--line);padding:24px}.stats-block h3{font-size:23px;margin:4px 0 0}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.stat-card{background:white;border:1px solid #d8e2de;border-top:3px solid var(--gold);padding:14px;min-height:96px}.stat-card small{display:block;color:#5d777d;font-size:11px;min-height:32px}.stat-card strong{display:block;color:var(--ocean);font:600 clamp(17px,2vw,27px) 'IBM Plex Mono',monospace;white-space:nowrap}.regime-stats-head{margin-top:34px}.regime-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.regime-card{background:white;border:1px solid var(--line);padding:15px;min-width:0}.regime-key{display:inline-block;background:var(--ocean);color:#fff;padding:3px 8px;font:600 11px 'IBM Plex Mono',monospace}.regime-card>strong{display:block;font:600 25px 'IBM Plex Mono',monospace;color:var(--ocean);padding:7px 0}.regime-card>strong small{font:11px 'IBM Plex Sans',sans-serif;color:#64777b}.regime-card>div{display:flex;flex-direction:column;gap:2px;border-top:1px solid var(--line);padding:8px 0}.regime-card>div small{color:#607a80;font-size:11px}.regime-card>div b{font:600 13px 'IBM Plex Mono',monospace;color:var(--ocean);overflow-wrap:anywhere}
@media(max-width:900px){.stats-grid,.regime-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.stats-block{padding:13px}.stat-card{padding:10px;min-height:90px}.stat-card strong{font-size:17px}.regime-card{padding:10px}}
@media(max-width:700px){#global-timeline{grid-template-columns:28px 44px minmax(0,1fr) 91px 28px;gap:4px;padding:8px 6px}#global-timeline .date{font-size:10px}#global-timeline button{font-size:11px;padding:5px 2px}.cube-stage{min-height:460px}.cube-stage #plotly-cube{height:460px}.allocation-ring{max-height:380px}.ring-number{font-size:10px}.ring-center-value{font-size:29px}.carousel{flex-wrap:wrap}.carousel #cube-select{flex:1 1 110px}.carousel #trail-window{flex:1 1 92px}}
/* Five visible depth slots. Each control owns its perspective; a flat parent
   avoids negative-Z hit-plane occlusion. Persistent buttons survive playback. */
body[data-page="dashboard"] .wheel-wrap{height:210px;perspective:none;overflow:hidden;padding:0;background:radial-gradient(ellipse at center,#fff,#e8eef2)}
body[data-page="dashboard"] #cube-wheel{position:relative;height:210px;max-width:1000px;margin:auto;display:block;transform-style:flat}
body[data-page="dashboard"] #app .wheel-card{opacity:calc(1 - var(--abs)*.27)}
body[data-page="dashboard"] .wheel-card{position:absolute;left:calc(50% + var(--delta)*18%);top:26px;margin:0;width:clamp(80px,25%,180px);height:151px;transform:translateX(-50%) perspective(900px) rotateY(calc(var(--delta)*-18deg)) scale(calc(1 - var(--abs)*.17));opacity:calc(1 - var(--abs)*.27);transition:left .28s,transform .28s,opacity .28s,border-color .2s,background .2s;padding:7px;touch-action:pan-y;box-shadow:0 14px 24px #22334020}
body[data-page="dashboard"] .wheel-card[hidden]{display:none}
body[data-page="dashboard"] .wheel-card.current{border:2px solid #947024}
body[data-page="dashboard"] .wheel-card:focus-visible{outline:3px solid #223340;outline-offset:3px}
@media(prefers-reduced-motion:reduce){body[data-page="dashboard"] .wheel-card{transition:none}}
.history-scroll{width:100%;overflow-x:auto;overscroll-behavior-x:contain;border-radius:4px}
#history-svg{display:block;height:320px;max-height:none;width:var(--history-width,100%)}
.history-column{shape-rendering:crispEdges}
body[data-page="dashboard"] .wheel-card *{pointer-events:none}
body[data-page="dashboard"] .wheel-preview{height:110px}
body[data-page="dashboard"] .wheel-card svg{height:100%;width:100%;max-width:148px}
body[data-page="dashboard"] .wheel-card.current{background:#f8f5ed}
body[data-page="dashboard"] header.top{position:sticky;top:0;z-index:100}
body[data-page="dashboard"] #global-timeline{top:var(--research-header-height,152px);z-index:90}
body[data-page="dashboard"] section{scroll-margin-top:calc(var(--research-header-height,152px) + var(--research-timeline-height,60px) + 16px)}
body[data-page="dashboard"] .top-inner{min-height:76px;padding-top:6px;padding-bottom:6px}
body[data-page="dashboard"] .session-bar{padding-bottom:6px}
.ring-position-weight{font:600 10px 'IBM Plex Mono',monospace;fill:#fff;paint-order:stroke;stroke:#092d39a8;stroke-width:2px;stroke-linejoin:round}
@media(max-width:800px){
 body[data-page="dashboard"] .top-inner{min-height:0}
 body[data-page="dashboard"] .brand img{width:160px;height:40px}
 body[data-page="dashboard"] .top nav{flex-wrap:wrap;justify-content:flex-start;gap:0 16px}
 body[data-page="dashboard"] .top nav a{min-height:32px;display:flex;align-items:center}
 body[data-page="dashboard"] .session-bar{font-size:11px;gap:8px}
 body[data-page="dashboard"] .session-bar button{min-height:32px;padding:4px 10px}
 body[data-page="dashboard"] #cube-wheel{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
 body[data-page="dashboard"] .wheel-card{height:128px}
 body[data-page="dashboard"] .wheel-preview{height:88px}
 body[data-page="dashboard"] .wheel-card span{font-size:10px;left:0;right:0;padding:2px 0}
}
/* Performance is a chart-first view; period metrics precede the optional rule study. */
#performance>.chart-shell{margin-bottom:20px}
#performance>.stats-block{margin:0 0 32px}
#performance>.regime-explorer{margin-top:28px}
#performance .chart-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.scale-control{display:flex;align-items:center;gap:7px;font-size:12px;color:#526774}
#performance-scale{min-height:44px}
#performance-svg{touch-action:none;user-select:none}#performance-svg.selecting-period{cursor:crosshair}.ring-position-name,.ring-inner-weight{font:600 11px 'IBM Plex Sans',sans-serif;fill:#fff;paint-order:stroke;stroke:#092d39a8;stroke-width:2px;stroke-linejoin:round}.ring-inner-weight{font:600 12px 'IBM Plex Mono',monospace}
@media(max-width:520px){#performance .chart-controls{width:100%}#performance .chart-controls>select{max-width:100%;min-width:0}#performance>.chart-shell{padding:12px}}
