/* professional-ui.css */
/* Ducky's shared reading system: one typeface, compact radii and navigation (colours: tokens.css).
   Keep this final layer limited to presentation; dates, source states and amounts are unchanged. */
:root:is(:not([data-tg]),[data-tg=web]) body:is(.page-app,.page-index,body){
 --font:Manrope,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
 --mono:var(--font);--r-sm:4px;--r-md:6px;--r-lg:8px;--radius:8px;
 background:var(--bg);font-family:var(--font);font-variant-numeric:tabular-nums lining-nums;
}
body.page-app .app-view{max-width:1440px}
body.page-app:is([data-route=watchlist],[data-route=calendar],[data-route=today]) .app-view{max-width:1640px}
body.page-app .app-main{--workspace-inset:22px;padding-top:var(--workspace-inset)}
body.page-app .app-top{min-height:56px;padding-block:calc(6px + var(--safe-top)) 6px}
body.page-app .app-top .avatar-mark{width:32px;height:32px}
body.page-app .app-nav>a{border-radius:6px}
body.page-app .app-nav>a.on{color:var(--accent-text);background:var(--surface-2);box-shadow:none}
body.page-app .app-foot{margin-top:20px;padding-top:12px;border-top:1px solid var(--border)}
body.page-app .app-view .card{border-radius:8px;box-shadow:none}
body.page-app :is(.btn,.input){border-radius:6px}
body.page-app .btn{font-weight:600}
body.page-app .btn-ghost{background:transparent;border-color:var(--control-border,var(--border))}
body.page-app .btn-ghost:hover{background:var(--surface-2)}
body.page-app :is(a,button,summary){-webkit-tap-highlight-color:transparent}
body.page-app :is(a,button,summary):active{opacity:.82}
body.page-app .input{background:var(--surface);border-color:var(--control-border,var(--border))}
body.page-app :is(.watch-compact-table,.season-comparison,.stock-metrics-table) {font-variant-numeric:tabular-nums lining-nums}
body.page-app .watch-compact-table tbody tr{background:var(--surface)}
body.page-app .watch-compact-table tbody tr:nth-child(even){background:color-mix(in srgb,var(--surface-2) 38%,var(--surface))}
body.page-app .watch-compact-table tbody tr:hover{background:var(--surface-2)}
body.page-app .watch-compact-table :is(th,td){border-color:var(--border)}
body.page-app .watch-compact-table .watch-company{font-size:12px}
body.page-app .watch-compact-table .watch-stock-actions>a{font-size:11px}
body.page-app .watch-compact-table .watch-stock-actions{flex-wrap:nowrap;gap:0;margin-left:-36px}
/* Indicators (owner request 2026-10-25): every column takes its content's width, so a header or a pill never breaks
   inside a word or a number; the table scrolls inside .watch-table-scroll and the page never scrolls sideways. The widths
   below are minimums. Secondary lines (the latest filing, the fund, a state note, the quote clock) take their column's
   width instead of setting it, and wrap or end in an ellipsis there. */
body.page-app .watch-indicators-table{table-layout:auto;width:max-content;min-width:100%}
body.page-app .watch-indicators-table.watch-selectable tr>:first-child{width:184px}
body.page-app .watch-indicators-table tr>:nth-child(2){width:108px}
body.page-app .watch-indicators-table tr>:is(.watch-help-col,.watch-metric-cell){width:86px}
body.page-app .watch-indicators-table tr>:is(.watch-signal-col,.watch-signal-cell){width:132px}
body.page-app .watch-indicators-table tr>.watch-cap-col{width:80px}
body.page-app .watch-indicators-table :is(th .watch-sort-label,.watch-signal-net,.watch-wall,.watch-support-reference){white-space:nowrap}
body.page-app .watch-indicators-table .watch-signal-net{overflow:visible;text-overflow:clip}
/* The cell's button bleeds 6 px into the cell padding on each side (its negative margins): at least the cell's width plus
   those 12 px, and as wide as its pill. width:100% left its content 12 px narrower than the column it sized. */
body.page-app .watch-indicators-table button.watch-signal{width:auto;max-width:none;min-width:calc(100% + 12px)}
body.page-app .watch-indicators-table :is(.watch-signal-event,.watch-signal>.watch-metric-note,.watch-quote-cell>small){display:block;width:0;min-width:100%}
body.page-app .watch-indicators-table tbody>:is(tr)>:is(th,td){padding-block:8px}
body.page-app .watch-indicators-table .watch-metric{gap:3px}
/* Direct children of long workspaces stay in the one existing app scrollport.
   No nested vertical scroll region; opaque paint and focus clearance protect the content below. */
body.page-app .watchlist-view>.watch-modes,
body.page-app .radar-activity-workspace .radar-sidebar,
body.page-app .stock-workspace-tabs,
body.page-app .explore-primary-tools{
 position:sticky;top:calc(-1 * var(--workspace-inset, 0px));z-index:12;background:var(--bg);isolation:isolate;
 box-shadow:0 6px 0 var(--bg);
}
body.page-app:is([data-route=watchlist],[data-route=boards],[data-route=stock],[data-route=explore]) .app-main{scroll-padding-top:88px}
body.page-app .watchlist-view>.watch-modes{margin:0 0 8px;border-radius:6px}
body.page-app .watchlist-view .watch-modes .btn{min-height:64px;padding:8px 14px;gap:3px;border-bottom-width:2px}
body.page-app .watchlist-view .watch-mode-title{font-size:15px;font-weight:650}
body.page-app .watchlist-view .watch-mode-purpose{font-size:12px}
body.page-app .watchlist-view .watch-controls{margin:8px 0;gap:8px}
body.page-app .watchlist-view .watch-controls .watch-search{grid-row:1}
body.page-app .watchlist-view .watch-controls>button{grid-row:1}
body.page-app .watchlist-view .watch-capacity{padding:8px 12px;margin:8px 0;border-left-width:2px;font-size:12px}
body.page-app .watchlist-view .watch-session{margin:8px 0;font-size:12px}
body.page-app .watch-research-card{border-radius:6px}
body.page-app .watch-research-heading{padding:12px 14px 10px}
body.page-app .watch-reference-strip{padding:8px 14px}
body.page-app .watch-research-price .watch-price-link{font-size:18px}
body.page-app .radar-activity-workspace .radar-sidebar{margin-bottom:8px}
body.page-app .radar-activity-workspace .radar-categories{gap:0;border:1px solid var(--border);border-radius:6px;overflow:hidden}
body.page-app .radar-activity-workspace .radar-categories .radar-category{min-height:64px;padding:8px 12px;border:0;border-bottom:2px solid transparent;border-radius:0;gap:8px}
body.page-app .radar-activity-workspace .radar-category+.radar-category{border-left:1px solid var(--border)}
body.page-app .radar-activity-workspace .radar-categories [aria-pressed=true]{border-bottom-color:var(--accent);background:var(--surface-2)}
body.page-app .radar-category-copy{gap:3px}
body.page-app .radar-category-copy>strong{font-size:15px;font-weight:650}
body.page-app .radar-category-copy>span{font-size:12px}
body.page-app .radar-activity-workspace .radar-activity-record{border-radius:6px;box-shadow:none;margin-bottom:6px}
body.page-app .radar-activity-workspace .radar-activity-toggle{padding:10px 12px 6px;gap:6px}
body.page-app .radar-activity-workspace .radar-activity-links{padding-inline:12px;gap:20px}
body.page-app .radar-activity-workspace .radar-record-title{line-height:1.5}
body.page-app .radar-activity-workspace .radar-filters{border-radius:6px;padding:8px;margin-bottom:8px}
body.page-app .radar-activity-workspace .radar-day{margin:14px 0 6px}
body.page-app .explore-primary-tools{gap:0;margin:8px 0 12px;border:1px solid var(--border);border-radius:6px}
body.page-app .explore-primary-tools>a{border:0;border-radius:0;min-height:44px;padding:8px 12px;border-bottom:2px solid transparent}
body.page-app .explore-primary-tools>a+a{border-left:1px solid var(--border)}
body.page-app .explore-primary-tools>a[aria-current=page]{border-bottom-color:var(--accent);background:var(--surface-2);color:var(--accent-text)}
/* Categories remain pinned on activity pages; the destination row scrolls away
   so two independently sticky rows cannot overlap or consume the phone viewport. */
body.page-app .radar-activity-workspace>.explore-primary-tools{position:static}
body.page-app .explore-destination-copy{gap:3px}
body.page-app .explore-destination-copy>strong{font-size:15px;font-weight:650}
body.page-app .explore-destination-copy>span{display:none}
body.page-app .explore-entry-arrow{display:none}
body.page-app .explore-primary-tools .app-icon{width:18px;height:18px}
body.page-app .explore-mention-count{font-size:20px}

body.page-app .stock-metric-section{padding:12px;border-radius:6px}
body.page-app .stock-workspace-tabs{border-radius:0;padding-top:4px;margin-top:8px}
body.page-app .cal-grid .cal-cell{border-radius:6px}
body.page-app .season-comparison th:first-child{color:var(--text)}
body.page-app .season-comparison td{text-align:right}
body.page-app .season-comparison thead th:not(:first-child){text-align:right}
body.page-app .season-extreme{justify-content:flex-end}
@media(min-width:1000px){
 body.page-app .app-shell{grid-template-columns:184px minmax(0,1fr)}
 body.page-app .app-nav{padding:16px 10px;gap:2px}
 body.page-app .app-nav>a{font-size:14px;padding:8px 12px;gap:10px}
 body.page-app .app-main{--workspace-inset:20px;padding:var(--workspace-inset) 24px 28px}
 body.page-app .cal-grid .cal-cell{min-height:104px}
 body.page-app .radar-insider-workspace .radar-toolbar{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(320px,1fr);gap:10px;align-items:start;margin-bottom:8px}
 body.page-app .radar-insider-workspace .insider-quick{grid-template-columns:auto minmax(0,1fr);align-items:start;gap:6px 10px;margin:0}
 body.page-app .radar-insider-workspace .insider-cap-range{grid-column:1/-1}
 body.page-app .radar-insider-workspace .radar-filters{padding:0;margin:0;border:0;background:none}
}
@media(max-width:760px){
 body.page-app .app-top{min-height:52px;padding-block:calc(4px + var(--safe-top)) 4px}
 body.page-app .app-main{--workspace-inset:8px;padding-top:var(--workspace-inset);padding-inline:12px}
 body.page-app .app-view .route-page{--app-caption:12px}
 body.page-app .watchlist-view .watch-modes .btn,
 body.page-app .radar-activity-workspace .radar-categories .radar-category{min-height:44px;padding:6px 3px;gap:0;text-align:center;justify-content:center}
 body.page-app .watchlist-view .watch-mode-title,
 body.page-app .radar-category-copy>strong{font-size:12px}
 body.page-app .watchlist-view .watch-mode-purpose,.radar-category-copy>span{display:none}
 body.page-app .radar-category-copy .radar-category-short{display:block}
 body.page-app .radar-activity-workspace .radar-category>.app-icon{display:none}
 body.page-app .radar-activity-workspace .radar-filters{padding:0;margin-bottom:6px;gap:6px}
 body.page-app .radar-activity-workspace .radar-day{margin:8px 0 4px}
 body.page-app .watchlist-view .watch-session{font-size:11px;margin-block:4px}
 body.page-app .watch-compact-table .watch-company{font-size:11px}
 body.page-app .watch-indicators-table.watch-selectable tr>:first-child{width:150px}
 body.page-app .watch-indicators-table tbody>:is(tr)>:is(th,td){padding-block:5px}
 body.page-app .watch-research-heading{padding:8px 10px}
 body.page-app .explore-primary-tools{margin:4px 0 8px}
 body.page-app .explore-primary-tools>a{min-height:44px;padding:6px 3px}
 body.page-app .explore-destination-copy>strong{font-size:12px}
 body.page-app .explore-destination-copy>span,body.page-app .explore-primary-tools .app-icon{display:none}
 body.page-app:is([data-route=watchlist],[data-route=boards],[data-route=stock],[data-route=explore]) .app-main{scroll-padding-top:60px}

}
@media(min-width:1000px) and (max-width:1279px){
 body.page-app .radar-insider-workspace .radar-toolbar{grid-template-columns:minmax(0,1fr)}
}
/* Public pages share the same typeface. */
body:not(.page-app) :is(.mono,.tag){font-family:var(--font);letter-spacing:0}
@media(forced-colors:active){body.page-app .ticker-symbol{color:CanvasText;background:Canvas}}

/* Market overview: charts and exact legends fit alongside their source clocks. The market mood card leads the readings
   and the five tiles sit beside it, three over two (below it on a phone), inside one hairline frame. */
body.page-app .today-macro.has-current-dashboard{padding:12px 16px 6px;border-radius:8px}
body.page-app .today-dashboard-readings{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);margin:10px 0 12px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
body.page-app .today-dashboard-readings>.k-mood{padding:12px 16px 12px 0;border-right:1px solid var(--border)}
body.page-app .today-dashboard-metrics{margin:0;border:0;grid-template-columns:repeat(6,minmax(0,1fr))}
body.page-app .today-dashboard-metric{grid-column:span 2;padding:10px 12px;gap:4px;border-right:1px solid var(--border);border-top:0}
body.page-app .today-dashboard-metric:nth-child(n+4){grid-column:span 3;border-top:1px solid var(--border)}
body.page-app .today-dashboard-metric:is(:nth-child(3),:nth-child(5)){border-right:0}
body.page-app .today-dashboard-metric .today-macro-value{font-size:24px}
body.page-app .today-dashboard-chart .today-lines{max-height:180px}
body.page-app .today-dashboard-charts{gap:16px}
body.page-app .change-card>summary{padding:10px 12px;gap:6px 12px}
body.page-app .today-updates .change-list{gap:6px}
body.page-app .change-card{border-radius:6px}
@media(min-width:1200px){
 body.page-app .today-updates .change-list{grid-template-columns:repeat(2,minmax(0,1fr))}
 body.page-app .today-updates .change-list>:not(.change-card),body.page-app .today-updates .change-list>.change-card[open]{grid-column:1/-1}
}
body.page-app .today-lines-line:is(.is-liquidity,.is-yield){stroke:var(--accent-text)}
body.page-app .today-lines-dot:is(.is-liquidity,.is-yield){fill:var(--accent-text)}
body.page-app :is(.today-lines-key,.today-lines-tip-row):is(.is-liquidity,.is-yield) i{background:var(--accent-text)}
body:not(.page-app) :is(button,input,select,textarea){font-family:var(--font)}
body:not(.page-app) :is(.btn,.chip-btn){border-radius:6px}
body:not(.page-app) .page-track{padding-top:24px}
body:not(.page-app) #ledger :is(th,td){padding:10px 12px}
@media(max-width:760px){
 body.page-app .today-macro.has-current-dashboard{padding:10px}
 body.page-app .has-current-dashboard .today-session-head{gap:4px}
 body.page-app .has-current-dashboard .today-session-head>span:last-child{font-size:11px}
 body.page-app .today-dashboard-readings{grid-template-columns:minmax(0,1fr);margin:8px 0 10px}
 body.page-app .today-dashboard-readings>.k-mood{padding:10px 0 12px;border-right:0;border-bottom:1px solid var(--border)}
 body.page-app .today-dashboard-metric{padding:8px;gap:3px}
 body.page-app .today-dashboard-metric .today-macro-value{font-size:22px}
 body.page-app .today-dashboard-chart .today-lines{max-height:150px}
 body:not(.page-app) :is(.btn,.chip-btn,.track-record-details>summary,.outcome-review>summary){min-height:44px}
 body:not(.page-app) :is(input,select,textarea){font-size:16px}
}

/* The narrowest phones keep every tile label readable: two tiles a row, the last one across. */
@media(max-width:350px){
 body.page-app .today-dashboard-metric:nth-child(n){grid-column:span 3;border-right:1px solid var(--border)}
 body.page-app .today-dashboard-metric:is(:nth-child(even),:nth-child(5)){border-right:0}
 body.page-app .today-dashboard-metric:nth-child(5){grid-column:1/-1}
 body.page-app .today-dashboard-metric:nth-child(n+3){border-top:1px solid var(--border)}
}

body.page-app .today-lines-line.is-qqq{stroke:var(--blue)}
body.page-app .today-lines-dot.is-qqq{fill:var(--blue)}
body.page-app :is(.today-lines-key,.today-lines-tip-row).is-qqq i{background:var(--blue)}

body :is(button,input,select,textarea,svg text){font-family:var(--font)}

/* Small question-mark glyphs retain a full touch target without growing the cards. */
body.page-app .today-metric-heading{display:flex;align-items:flex-start;gap:2px;width:100%;min-height:20px}
body.page-app .today-metric-heading .today-macro-label{flex:1;min-width:0}
body.page-app .today-metric-heading .today-macro-help{position:static;transform:none;flex:0 0 44px;width:44px;height:44px;min-height:44px;margin:-12px -10px -12px -6px;border:0;background:transparent;color:var(--muted);display:grid;place-items:center;padding:0}
body.page-app .today-metric-heading .today-macro-help span{display:grid;place-items:center;width:18px;height:18px;border:1px solid currentColor;border-radius:50%;font-size:11px;font-weight:650;line-height:1}
body.page-app .today-metric-heading .today-macro-help:hover,body.page-app .today-metric-heading .today-macro-help:focus-visible{color:var(--accent-text)}
body.page-app .today-metric-heading .today-macro-help:focus-visible{outline:2px solid var(--accent-text);outline-offset:-3px;border-radius:6px}
body.page-app .today-metric-heading .today-macro-help:active span{background:var(--surface-2)}

/* rule-studio.css */
/* The studio sits inside the Alerts view (.app-view max 1120px, .alert-feed max 760px for the Inbox list).
   Widen only those two wrappers, and only while they contain the studio; Inbox and other routes keep their widths. */
body.page-app .app-view:has(.rule-studio),body.page-app[data-route] .app-view:has(.rule-studio){max-width:1560px}
.alert-feed:has(.rule-studio){max-width:none}
.rule-studio{font-size:15px;line-height:1.5;min-width:0;padding-bottom:16px}
.rule-studio h2{font-size:18px;margin:0 0 12px}.rule-studio h3{font-size:15px;margin:0}
.rule-studio .btn,.rule-studio summary,.studio-move-menu .btn{min-height:44px}
.studio-notice{padding:12px 16px;background:var(--surface-2);border-radius:10px;color:var(--muted);margin:0 0 16px}
.studio-panel,.studio-criteria,.studio-runbar,.studio-results{padding:16px;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:14px}
.rule-studio .studio-handle.btn{width:44px;min-width:44px;height:44px;flex:none;padding:0;font-size:24px;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;border:0}
.studio-help{margin-top:16px;color:var(--text-muted)}
.studio-cohort-search{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.studio-cohort-search>input{flex:1;min-width:120px;width:0}
.studio-cohort-list{max-height:22rem;overflow-y:auto;overscroll-behavior:contain}.studio-cohort-list>label{display:flex;align-items:center;gap:8px;min-height:44px}
.studio-scope select,.studio-study-controls select{box-sizing:border-box;width:100%;max-width:100%;min-width:0;min-height:44px;font-size:16px}.studio-scope>p{font-size:13px}
.studio-toolbar,.studio-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.studio-toolbar{justify-content:space-between;margin-bottom:12px}.studio-toolbar h2{margin:0}
.studio-group{padding:8px;border:1px solid var(--border);border-left:3px solid var(--focus-ring,var(--accent));border-radius:12px;background:var(--bg-2);min-width:0}
.studio-root{border-left-color:var(--accent)}.studio-group-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.studio-group-head>.btn{white-space:normal}.studio-slot{height:12px;position:relative}
.studio-slot.studio-drop-target:after{content:'';position:absolute;top:4px;left:0;right:0;border-top:3px solid var(--accent)}
.studio-group.studio-drop-target{outline:2px solid var(--accent)}.studio-dragging{opacity:.5}.studio-arming{outline:2px solid var(--accent)}
.studio-node{padding:12px;border:1px solid var(--border);background:var(--surface);border-radius:10px;min-width:0}
.studio-node-head{display:flex;gap:8px;align-items:center}.studio-node-head h3{flex:1;min-width:0}.studio-node-head>.btn:last-child{min-width:44px}
.studio-group-footer{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.studio-basis{font-size:13px;color:var(--muted)}.studio-basis p{margin:0 0 8px}
.studio-scalar{margin-top:12px;min-width:0}.studio-scalar-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.studio-scalar-top>label{font-size:14px;min-width:0}.studio-exact-box{display:flex;gap:6px;align-items:center;flex:none}.studio-exact-box>span{font-size:13px;color:var(--muted)}
.studio-exact{width:82px;min-height:44px;font:inherit;font-size:16px;text-align:right;padding:8px;border:1px solid var(--border);border-radius:8px;color:var(--text);background:var(--bg)}
.studio-exact[aria-invalid=true]{border-color:var(--red,#be352d)}
.studio-range-lane{display:flex;align-items:center;min-height:44px;width:100%}
.studio-range{width:100%;height:44px;margin:0;accent-color:var(--accent);background:transparent;touch-action:pan-y pinch-zoom;direction:ltr;cursor:ew-resize;appearance:none;-webkit-appearance:none}
.studio-range::-webkit-slider-runnable-track{height:6px;background:var(--border);border-radius:8px}
.studio-range::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:26px;height:26px;margin-top:-10px;border:3px solid var(--surface);border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.studio-range::-moz-range-track{height:6px;background:var(--border);border-radius:8px}.studio-range::-moz-range-thumb{width:24px;height:24px;border:2px solid var(--surface);border-radius:50%;background:var(--accent)}
.studio-range-hints{display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.studio-field-error{color:var(--red,#be352d);font-size:13px;margin:0}.studio-field-error:not(:empty){margin-top:8px}
.studio-presets{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.studio-explain,.studio-study{border-top:1px solid var(--border);padding-top:16px;margin-top:20px}
.studio-explanation{overflow-wrap:anywhere;margin:8px 0}
.studio-result-body{font-size:14px;overflow-wrap:anywhere}.studio-result-state{padding:10px;background:var(--surface-2);border-radius:8px}.studio-stale{border:1px solid var(--accent)}
.studio-drag-ghost{position:fixed;pointer-events:none;z-index:1000;width:min(290px,80vw);padding:12px;background:var(--surface);color:var(--text);border:2px solid var(--accent);border-radius:12px;box-shadow:0 8px 30px #0004}.studio-drag-ghost>*{display:block}.studio-drag-ghost small{margin-top:8px;color:var(--muted)}.studio-drag-ghost.invalid{border-color:var(--muted)}
.studio-announcement{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
.studio-move-menu{display:grid;gap:8px}.studio-move-menu>.btn{text-align:left;white-space:normal}
@media(prefers-reduced-motion:reduce){.rule-studio *{scroll-behavior:auto!important;transition:none!important}}
.rule-studio .studio-inspect{display:flex;gap:8px;margin:12px 0;flex-wrap:wrap}
.rule-studio .studio-inspect .input{min-width:0;flex:1 1 150px;font-size:16px}
.rule-studio .studio-listing-choices{display:grid;gap:8px;margin:12px 0}
.rule-studio .studio-listing-choices .btn{white-space:normal;text-align:left;justify-content:flex-start;min-height:44px;max-width:100%;overflow-wrap:anywhere}
.rule-studio .studio-match{border-top:1px solid var(--border);padding:16px 0;overflow-wrap:anywhere}
.rule-studio .studio-proof{margin-top:8px}
.rule-studio .studio-proof p{margin:8px 0}
.rule-studio .studio-result-body>select{width:100%;margin:8px 0;font-size:16px;min-height:44px}
.studio-cohort{min-width:0;margin:12px 0;border:1px solid var(--border);border-radius:8px;padding:10px}
.studio-cohort label{display:flex;gap:8px;align-items:center;min-height:44px}.studio-cohort input{width:20px;height:20px;flex:none}
.studio-chart{margin:12px 0}.studio-chart svg{display:block;width:100%;height:auto;color:var(--accent-text,var(--text))}.studio-chart svg text{font-size:10px;fill:var(--text)}.studio-chart figcaption{font-size:13px}
.studio-result-body>.btn{white-space:normal;max-width:100%;margin:4px 0}


/* Monitor confirmation shares the app dialog's single scroll owner. */
.monitor-confirm{min-width:0;display:flex;flex-direction:column;gap:12px}
.monitor-confirm .screen-field{display:grid;gap:6px;min-width:0}
.monitor-confirm input[type=text]{box-sizing:border-box;width:100%;min-height:44px;padding:10px 12px;font:inherit;font-size:16px;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:8px}
.monitor-confirm fieldset{min-width:0;display:grid;gap:8px;padding:12px;border:1px solid var(--border);border-radius:8px}
.monitor-confirm .screen-check{box-sizing:border-box;width:100%;min-height:44px}
.monitor-confirm>.btn{max-width:100%;min-height:44px;white-space:normal}
.monitor-confirm input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.modal-box:has(.monitor-confirm) .modal-close,.modal-box:has(.monitor-confirm) .modal-actions .btn{min-width:44px;min-height:44px}

/* Results-first workspace (PRD §R.2): compact criteria, one run bar, full-width result canvas. */
.rule-studio{display:flex;flex-direction:column;gap:12px}
.studio-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.studio-head h2{font-size:24px;margin:0}
.studio-head-title{display:flex;align-items:center;gap:10px;min-width:0}
.studio-criteria-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.studio-scope{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.studio-scope select{width:auto;max-width:100%;min-height:44px;font-size:16px}
.studio-criteria-bar .studio-actions{margin-left:auto}
.studio-criteria-bar [aria-pressed=true],.studio-result-tabs [aria-pressed=true],.studio-subviews [aria-pressed=true]{border-color:var(--accent);color:var(--accent-text,var(--text));font-weight:600}
.studio-explanation{font-size:16px;font-weight:500;margin:12px 0}
.studio-tree .studio-group{border:0;border-left:3px solid var(--border);background:transparent;padding:4px 0 4px 10px;border-radius:0}
.studio-tree>.studio-group.studio-root{border-left:0;padding-left:0}
.studio-tree-advanced .studio-group{border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:12px;padding:8px;background:var(--bg-2)}
.studio-group>.studio-node,.studio-group>.studio-group{margin:6px 0}
.studio-node{padding:8px 12px;display:grid;gap:4px}
.studio-node-head{min-height:44px}.studio-node-head h3{font-size:15px}
.studio-node-values{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-start;min-width:0}
.studio-field-chip.btn{white-space:normal;text-align:left;font-variant-numeric:tabular-nums;border:1px solid var(--border);border-radius:999px;padding:6px 14px;font-size:15px}
.studio-field-open{flex:1 1 100%;min-width:0;padding:8px 12px;border:1px solid var(--accent);border-radius:10px;background:var(--bg)}
.studio-field-open>[data-studio-field-done]{margin-top:8px}
.studio-scope .studio-field-open{flex:1 1 320px}
.studio-badge{display:inline-block;font-size:12px;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:1px 8px;margin-left:8px;white-space:nowrap}
.studio-runbar{display:grid;gap:12px}
/* The saved-run reader (study-history.js) keeps its flexible tab row; only the run bar uses the three-mode grid. */
.studio-result-tabs{display:flex;gap:8px;flex-wrap:wrap}.studio-result-tabs>.btn{flex:1;white-space:normal}
.studio-runbar .studio-result-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.studio-study-controls{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-start}
.studio-study[hidden]{display:none}
.studio-study-method{flex:1 1 100%}.studio-study-method>label{display:grid;gap:6px;margin:8px 0;max-width:360px}
.studio-study-method select{min-height:44px;font-size:16px}
.studio-portfolio-controls{display:flex;gap:8px;flex-wrap:wrap;flex:1 1 100%}.studio-portfolio-controls>p{flex:1 1 100%;margin:0;font-size:13px;color:var(--muted)}
.studio-footer{display:flex;gap:8px;flex-wrap:wrap}.studio-footer>[data-studio-run]{background:var(--accent);color:var(--accent-contrast,#fff);border-color:var(--accent)}
.studio-footer>[data-studio-run]:disabled{opacity:.5}
.studio-results{min-height:280px}.studio-results>h2{font-size:18px}
.studio-subviews{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.studio-subviews[hidden]{display:none}
.studio-mode-mismatch{padding:12px;border:1px solid var(--accent);border-radius:8px}
.studio-method-body>label{display:grid;gap:6px;max-width:420px}.studio-method-body select{min-height:44px;font-size:16px}
.studio-help>summary{cursor:pointer;min-height:44px;display:flex;align-items:center}
.studio-chooser{display:grid;gap:8px;min-width:min(420px,80vw)}.studio-chooser input{min-height:44px;font-size:16px}
.studio-chooser-list{display:grid;gap:6px;max-height:60vh;overflow-y:auto;overscroll-behavior:contain}
.studio-chooser-list>.btn{justify-content:flex-start;text-align:left;white-space:normal;min-height:44px}
.studio-chooser-list>.btn>span{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
@media(max-width:700px){
  .studio-panel,.studio-criteria,.studio-runbar,.studio-results{padding:12px}
  .studio-head h2{font-size:20px}.studio-criteria-bar .studio-actions{margin-left:0}
  .studio-runbar .studio-result-tabs{grid-template-columns:minmax(0,1fr)}
  .studio-footer>.btn{flex:1 1 140px;white-space:normal}
  .studio-scalar-top{flex-wrap:wrap}.studio-exact{width:96px}
  .studio-tree .studio-group{padding-left:6px}
  .studio-sheet-details{align-items:flex-start;flex-wrap:wrap}
  .studio-sheet-details>.studio-sheet-head{flex-basis:100%}
}
.rule-studio .btn:disabled{pointer-events:none}

/* ---- Sentence-first default (owner decision 2026-10-06; reference docs/rule-studio/mock-sentence-first-2026-10-06.html).
   Desktop: sentence editor left, instant results right (sticky). Phone: editor sticks at the top, the list scrolls
   underneath it in the page's one scroll owner, the action bar sticks at the bottom. Parameters open in a sheet. ---- */
.studio-sentence-first{font-size:14px}
.studio-sentence-first .studio-head h2{font-size:20px}
.studio-sentence-layout{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:16px;align-items:start}
.studio-mobile-nav{display:none}
.studio-sentence-editor{grid-column:1;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px}
.studio-sentence-first .studio-instant{grid-column:2;grid-row:1/span 2;min-width:0;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px;position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto;overscroll-behavior:contain;display:flex;flex-direction:column}
.studio-sentence-first .studio-advanced{grid-column:1;min-width:0;color:var(--muted);font-size:13px}
.studio-advanced>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;padding:0 4px}
.studio-advanced[open]>summary{margin-bottom:8px}
.studio-advanced[open]{color:var(--text);font-size:15px}
.studio-advanced .studio-criteria,.studio-advanced .studio-runbar,.studio-advanced .studio-results{margin-top:12px}
.studio-fine{color:var(--muted);font-size:11px}
/* the sentence */
.studio-sentence{font-size:15px;line-height:1.9;min-height:34px;overflow-wrap:anywhere}
.studio-sentence.studio-drop{outline:2px dashed var(--accent);outline-offset:2px;border-radius:8px}
.rule-studio .studio-tok.btn{display:inline-flex;align-items:center;gap:5px;min-height:30px;border:1px solid var(--border);background:var(--bg-2);border-radius:9px;padding:1px 9px;margin:1px 2px;font-size:13px;line-height:1.7;vertical-align:middle;white-space:normal;text-align:left}
.rule-studio .studio-tok-scope.btn{font-weight:600}
.rule-studio .studio-tok-add.btn{border-style:dashed;color:var(--accent)}
.studio-tok-unknown{display:inline-block;border:1px solid var(--yellow,#b58a12);color:var(--yellow,#b58a12);border-radius:9px;padding:1px 9px;margin:1px 2px;font-size:13px;line-height:1.7;vertical-align:middle}
.studio-conds{display:inline}
.studio-chip{display:inline-flex;align-items:stretch;border:1px solid color-mix(in srgb,var(--accent) 55%,transparent);background:color-mix(in srgb,var(--accent) 16%,transparent);border-radius:9px;margin:1px 0;vertical-align:middle;font-size:13px;line-height:1.7;max-width:100%}
.studio-chip-text,.studio-chip-x{border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;min-height:30px}
.studio-chip-text{padding:1px 4px 1px 9px;text-align:left}
.studio-chip-x{padding:0 8px 0 4px;color:var(--muted);font-size:14px;border-radius:0 9px 9px 0}
.studio-chip-x:hover{color:var(--red)}
.studio-chip-hot{animation:studio-pulse .9s ease-out}
.studio-chip-ghost{opacity:.6;border-style:dashed}
@keyframes studio-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 55%,transparent)}100%{box-shadow:0 0 0 10px transparent}}
.studio-glue{display:inline-block;color:var(--muted);font-size:12px;margin:0 3px;vertical-align:middle}
.studio-glue.any{color:var(--accent);font-weight:700}
/* read-only sentence (management rows): the same tokens and chips, no buttons */
.studio-sentence-static{display:block;font-size:13px;line-height:1.9}
.studio-sentence-static .studio-tok-static{display:inline-flex;align-items:center;min-height:26px;border:1px solid var(--border);background:var(--bg-2);border-radius:9px;padding:0 8px;margin:1px 2px;font-size:12px;line-height:1.7;vertical-align:middle;white-space:normal}
.studio-sentence-static .studio-tok-scope{font-weight:600}
.studio-sentence-static .studio-chip{font-size:12px}
.studio-sentence-static .studio-chip-text{display:inline-block;min-height:26px;padding:0 8px;cursor:default}
/* one outcome-labelled choice instead of AND/OR tokens */
.studio-op{display:flex;gap:6px;margin-top:8px}
.studio-op[hidden]{display:none}
.studio-op-choice{flex:1;min-width:0;border:1px solid var(--border);background:var(--bg-2);color:var(--text);border-radius:10px;padding:6px 8px;font:inherit;font-size:12px;cursor:pointer;text-align:left;line-height:1.3;min-height:44px}
.studio-op-choice b{display:block;font-size:13px}
.studio-op-choice small{color:var(--muted)}
.studio-op-choice[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 16%,transparent)}
/* sentence input */
.studio-ask{display:flex;gap:6px;margin-top:8px}
.studio-ask-input{flex:1;min-width:0;box-sizing:border-box;background:var(--bg-2);border:1px solid var(--border);color:var(--text);border-radius:10px;padding:8px 10px;font:inherit;font-size:16px;min-height:44px}
.studio-ask-input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:transparent}
.studio-mic{border:1px solid var(--border);background:var(--bg-2);color:var(--text);border-radius:10px;min-width:44px;min-height:44px;padding:0 10px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.studio-mic[hidden]{display:none}
.studio-mic.live{background:var(--accent);color:var(--accent-ink,#1a1400);border-color:var(--accent)}
.studio-mic-icon{width:20px;height:20px}
.studio-ask-hint{font-size:12px;color:var(--muted);margin:6px 0 0;min-height:16px}
.studio-examples,.studio-pills{display:flex;gap:6px;margin-top:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none;align-items:center}
.studio-examples::-webkit-scrollbar,.studio-pills::-webkit-scrollbar{display:none}
.studio-examples>.studio-fine{flex:none}
.studio-example{flex:none;border:1px dashed var(--border);background:transparent;color:var(--text);border-radius:999px;padding:6px 10px;font:inherit;font-size:12px;cursor:pointer;white-space:nowrap;min-height:32px}
.studio-mini-hist{width:34px;height:14px;color:var(--muted)}
/* sheet: parameters, scope, cap */
.studio-sheet{background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-top:10px;padding:12px}
.studio-sheet:focus{outline:none}
.studio-sheet-stack{display:grid;gap:0;margin-top:10px;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow:clip}
.studio-sheet-stack>.studio-sheet-inline{margin:0;border:0;border-radius:0;background:transparent;padding:8px 10px 9px}
.studio-sheet-stack>.studio-sheet-inline+.studio-sheet-inline{border-top:1px solid var(--border)}
.studio-sheet-stack>.studio-sheet-inline.is-active{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 72%,transparent);background:color-mix(in srgb,var(--accent) 4%,transparent)}
.studio-sheet-details{display:flex;align-items:center;gap:8px;min-width:0}
.studio-sheet-details>.studio-sheet-head{flex:1 1 180px;margin:0}
.studio-sheet-details>.studio-rsi-period{flex:none}
.studio-sheet-details>.studio-sheet-actions{flex:none;margin:0}
.studio-sheet-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:6px 12px;min-width:0}

.studio-sheet-head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px;font-weight:600;margin-bottom:6px}
.studio-sheet-title-wrap{min-width:0;overflow-wrap:anywhere}

.studio-sheet-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px}
.studio-sheet-row>.studio-scope-input{flex:1 1 160px;min-width:0;min-height:44px;font-size:16px}
.rule-studio .studio-choice.btn{border-radius:999px;white-space:normal;text-align:left}
.rule-studio .studio-choice.btn[aria-pressed=true],.rule-studio .studio-preset.btn[aria-pressed=true]{border-color:var(--accent);color:var(--accent-text,var(--text));background:color-mix(in srgb,var(--accent) 16%,transparent)}
.rule-studio .studio-rsi-period{display:flex;align-items:center;gap:6px;margin:0}
.rule-studio .studio-rsi-period>.studio-fine{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
.rule-studio .studio-rsi-period .studio-sheet-row{gap:0}
.rule-studio .studio-rsi-period .studio-choice.btn{min-height:38px;border-radius:0;margin-left:-1px;padding:7px 14px}
.rule-studio .studio-rsi-period .studio-choice.btn:first-child{margin-left:0;border-radius:9px 0 0 9px}
.rule-studio .studio-rsi-period .studio-choice.btn:last-child{border-radius:0 9px 9px 0}
.studio-sheet .studio-scalar{margin-top:3px}
.studio-sheet-presets{align-items:center}
.studio-sheet-presets>.studio-fine{margin-right:2px}

.studio-sheet-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.studio-sheet-details .studio-sheet-actions>.btn{min-height:36px;padding:6px 9px;font-size:12px}
.rule-studio .studio-danger.btn{color:var(--red)}
.studio-scrim{display:none}
/* results list */

.rule-simulation{min-width:0}
.rule-simulation-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.rule-simulation-head h2{margin:0;font-size:20px}
.rule-simulation-name{font-weight:600;margin:8px 0}
.rule-simulation-context{margin:12px 0;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.rule-simulation-context h3{font-size:14px;margin:0 0 8px;color:var(--muted)}
.rule-simulation-sentence{display:flex;align-items:center;gap:6px;flex-wrap:wrap;line-height:1.7}
.rule-simulation .perf-controls{margin-bottom:12px}
.monitor-simulate{margin:4px 0;min-height:44px}
.instant-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.instant-summary{font-size:13px;color:var(--muted);margin:0;min-width:0}
.instant-summary b{color:var(--text);font-size:16px;font-variant-numeric:tabular-nums}
.instant-summary b.instant-big.hot{color:var(--accent)}
.studio-seg{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden;flex:none}
.studio-seg>button{border:0;background:transparent;color:var(--muted);padding:5px 10px;font:inherit;font-size:12px;cursor:pointer;min-height:32px;white-space:nowrap}
.studio-seg>button[aria-pressed=true]{background:var(--bg-2);color:var(--text);font-weight:600}
.instant-ctl{display:flex;gap:8px;align-items:center;justify-content:space-between;margin:4px 0 6px;flex-wrap:wrap}
.instant-state{margin:8px 0}
.instant-stale .instant-list{opacity:.55;transition:opacity .15s}
.instant-list{list-style:none;margin:6px 0;padding:0;display:flex;flex-direction:column;gap:4px}
.instant-row{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:8px;align-items:center;padding:6px 8px;border-radius:9px;background:var(--bg-2);border:1px solid var(--border);min-width:0;font-variant-numeric:tabular-nums}
.instant-row.instant-changed{animation:instant-flash 1.4s ease-out}
@keyframes instant-flash{0%{background:color-mix(in srgb,var(--green) 16%,var(--bg-2));border-color:var(--green)}100%{background:var(--bg-2);border-color:var(--border)}}
.instant-row.instant-dim{opacity:.55}
.instant-tk{min-width:0}
.instant-tk .ticker-chip{display:inline-block;min-height:0;padding:0;border:0;background:transparent;font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-weight:700;font-size:13px;line-height:1.2}
.instant-name{display:block;color:var(--muted);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.instant-st{font-size:12px;color:var(--muted);min-width:0;line-height:1.3}
.instant-when{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.instant-dots{display:inline-flex;gap:3px;margin-right:6px;vertical-align:middle}
.instant-dot{width:7px;height:7px;border-radius:50%;border:1px solid var(--muted);display:inline-block}
.instant-dot.on{background:var(--green);border-color:var(--green)}
.instant-dot.unk{border-style:dashed}
.instant-now{display:inline-block;border-radius:999px;padding:0 6px;font-size:10px;border:1px solid var(--border);margin-right:4px;white-space:nowrap}
.instant-now.now-matched{color:var(--green);border-color:var(--green)}
.instant-now.now-non_match{color:var(--muted);border-color:transparent;padding:0;margin-right:6px}
.instant-side{display:flex;align-items:center;gap:8px;justify-content:flex-end}
.instant-change{display:flex;flex-direction:column;align-items:flex-end;gap:0;text-align:right;white-space:nowrap;line-height:1.2}
.instant-bench{display:block;max-width:14ch;white-space:normal;line-height:1.25}.instant-spy{font-size:10px;color:var(--muted);white-space:nowrap}
/* A follow row before its entry open: when the count starts, in words (wraps; no dashes). */
.instant-change.instant-pending{display:block;max-width:16ch;white-space:normal;font-size:11px;line-height:1.3;color:var(--muted)}
.return-badge{font-weight:700;font-size:13px;white-space:nowrap}
/* Returns follow the change-colour setting (T-12: --pos / --neg swap under 红涨绿跌); stance colours are --bull / --bear. */
.return-up{color:var(--pos,var(--green))}.return-down{color:var(--neg,var(--red))}.return-flat{color:var(--muted)}
.instant-spark{width:56px;height:18px;color:var(--muted);flex:none}.instant-spark .spark-marker{fill:var(--accent)}
.instant-method{font-size:11px;color:var(--muted);margin:10px 0 0}
.instant-note{padding:12px;border:1px solid var(--border);border-radius:10px;margin:8px 0}
/* action bar */
.studio-bar{position:sticky;bottom:0;margin-top:10px;padding:8px 0 calc(4px + var(--safe-bottom,0px));background:var(--surface);display:flex;gap:10px;align-items:center;justify-content:space-between;z-index:4}
.studio-bar-n{font-size:12px;color:var(--muted);min-width:0}
.studio-bar-n b{color:var(--text);font-size:14px}
.rule-studio .studio-start.btn{min-height:44px;font-weight:700;white-space:nowrap}
.studio-toast{pointer-events:auto;display:flex;gap:12px;align-items:center}
.studio-toast-undo{border:0;background:transparent;color:var(--accent);font:inherit;font-weight:600;cursor:pointer;min-height:32px;padding:0 4px}
/* advanced editor keeps its block palette */
.studio-blocks{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.studio-block{display:inline-flex;align-items:center;gap:0;border:1px dashed var(--border);border-radius:10px;background:var(--bg-2)}
.studio-block .studio-handle.btn{width:36px;min-width:36px;font-size:18px}
.studio-block-add.btn{border:0;white-space:nowrap}
@media(max-width:560px){.studio-block .studio-handle.btn{width:44px;min-width:44px}}
@media(max-width:560px){
  .studio-blocks{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:4px;-webkit-overflow-scrolling:touch}
  .studio-block{flex:none;scroll-snap-align:start}
  .studio-explanation{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer}
  .studio-explanation[aria-expanded=true]{display:block}
}
/* Phone: conditions and filtered stocks are two explicit side-by-side choices. Only the selected pane is in
   the reading flow, so a tall condition stack can never cover or push the stock results several screens away. */
@media(max-width:900px){
  .studio-sentence-first{font-size:13px}
  .studio-sentence-first .studio-head h2{font-size:17px}
  .studio-sentence-layout{display:flex;flex-direction:column;align-items:stretch;gap:8px}
  .studio-mobile-nav{position:sticky;top:0;z-index:7;display:grid;grid-template-columns:1fr 1fr;padding:4px;background:var(--surface);border:1px solid var(--border);border-radius:12px;scroll-margin-top:0}
  .studio-mobile-pane{min-width:0;min-height:44px;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:var(--muted);font:inherit;font-size:14px;font-weight:600;cursor:pointer}
  .studio-mobile-pane[aria-pressed=true]{background:var(--bg-2);color:var(--text);box-shadow:inset 0 0 0 1px var(--border)}
  .studio-mobile-pane:focus-visible{outline:3px solid var(--focus,var(--accent));outline-offset:1px}
  .studio-sentence-first[data-mobile-pane=conditions] .studio-instant{display:none}
  .studio-sentence-first[data-mobile-pane=results] .studio-sentence-editor{display:none}
  .app-main:has(.studio-sentence-first){padding-bottom:0}
  .studio-sentence-first{padding-bottom:0}
  .studio-sentence-editor{position:static;padding:10px}
  .app-main:has(.studio-sentence-first){overflow-x:hidden}
  .studio-ask-hint:empty{display:none}
  .studio-examples[data-idle]{display:none}
  .instant-summary{font-size:12px}
  .studio-sentence{font-size:14px;line-height:1.8}
  .studio-sentence-first .studio-instant{position:static;max-height:none;overflow:visible;padding:10px}
  .studio-sheet-host .studio-sheet-modal{position:fixed;left:0;right:0;bottom:0;z-index:40;border-radius:16px 16px 0 0;margin:0;padding:12px 16px calc(14px + var(--safe-bottom,0px));box-shadow:0 -12px 40px rgba(0,0,0,.4);max-height:72vh;overflow-y:auto;overscroll-behavior:contain}
  .studio-sheet-stack{margin-top:8px}
  .studio-sheet-stack>.studio-sheet-inline{padding:10px 10px 12px}
  .studio-scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:39}
  .instant-row{grid-template-columns:60px minmax(0,1fr) auto;gap:6px;padding:6px}
  .studio-bar{margin-top:6px;padding:6px 0 calc(8px + var(--safe-bottom,0px))}
}
@media(max-width:380px){.instant-spark{display:none}}
@media(prefers-reduced-motion:reduce){.rule-studio *{animation:none!important;transition:none!important}}

/* Signal Studio: one continuous report beneath the same editable definition.
   These selectors stay inside Studio; navigation and the approved duck stay unchanged. */
.signal-studio .studio-sentence-layout,body.beta-ui-route .signal-studio .studio-sentence-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
.signal-studio .studio-mobile-nav{display:none}
.signal-studio .studio-sentence-editor,.signal-studio .studio-instant,.signal-studio.studio-sentence-first .studio-instant{position:static;max-height:none;overflow:visible}
.signal-studio .studio-sentence-editor,.signal-studio.studio-sentence-first .studio-instant{grid-column:auto;grid-row:auto}
.signal-studio[data-mobile-pane] .studio-instant,.signal-studio[data-mobile-pane] .studio-sentence-editor{display:block}
.signal-studio .studio-sheet-stack,body.beta-ui-route .signal-studio .studio-sheet-stack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0}
.signal-studio .studio-sheet-details{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px}
.signal-studio .studio-sheet-details>.studio-sheet-head{grid-column:1;grid-row:1;min-width:0}
.signal-studio .studio-sheet-details>.studio-sheet-actions{grid-column:2;grid-row:1}
.signal-studio .studio-sheet-details>.studio-rsi-period{grid-column:1/-1;grid-row:2;margin-bottom:4px}
.signal-studio .studio-sheet-stack>.studio-sheet-inline{min-width:0;border-bottom:1px solid var(--border)}
.signal-studio .studio-sheet-stack>.studio-sheet-inline:only-child{grid-column:1/-1}
.signal-studio .studio-ask,.signal-studio .studio-examples{display:none}
.signal-studio .studio-tok.btn{min-height:44px}
.signal-studio .studio-pills{max-width:100%;overflow-x:auto;flex-wrap:nowrap;padding-bottom:8px}

.signal-studio .studio-rsi-period .studio-choice.btn{min-height:44px}
/* The Build tab's header row (owner 2026-10-25, alerts/playbook-toolbar.js): the name field and one toolbar on one row,
   aligned to the field. The controls are the design-system buttons (.btn.btn-sm: 44 px, 6 px radius, one padding;
   Save playbook the one primary) and the status is one quiet line. Phones: the name full width, then the status line
   (its height reserved so the buttons never jump), then the buttons on one row. */
.signal-playbook-toolbar{display:grid;grid-template-columns:minmax(0,400px) minmax(0,1fr);align-items:end;gap:12px 24px;margin-bottom:18px;min-width:0}
.signal-playbook-name-label{display:grid;gap:5px;min-width:0;font-size:11px;color:var(--muted)}
.signal-playbook-name-label .input{width:100%;min-width:0;background:var(--surface);font-size:16px;font-weight:600}
.signal-playbook-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0}
.signal-playbook-actions>.signal-tool{flex:none;min-height:44px;margin:0}
.signal-playbook-actions>.studio-save-state{flex:0 1 auto;min-width:0;margin:0 6px 0 0;font-size:13px;line-height:1.4;color:var(--muted);text-align:right}
.signal-playbook-actions>.studio-save-state:empty{display:none}
.signal-playbook-actions>.studio-save-state:is([data-studio-save-status=error],[data-studio-save-status=conflict],[data-studio-save-status=invalid]){color:var(--db-warning,var(--orange))}
.signal-playground-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.signal-playground{--perf-line:var(--accent);--perf-bench-1:var(--muted);--perf-bench-2:var(--blue);--perf-bench-3:var(--yellow);--perf-bench:var(--perf-bench-1);--perf-win:var(--pos,var(--green));--perf-loss:var(--neg,var(--red));--perf-open:var(--faint);--perf-dd:var(--neg,var(--red))}
.signal-studio .studio-bar{position:static}
.signal-playground-head h2{margin:0 0 4px}.signal-playground-head p{margin:0;font-size:13px}
.signal-playground-status{min-height:24px;font-size:13px;margin:10px 0}
.signal-playground-options{margin:0 0 16px;border-bottom:1px solid var(--border);padding-bottom:8px}
.signal-playground-options>summary,.signal-playbook-transfer>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-weight:600}
.signal-playground-option-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:12px 0}
.signal-playground-option-body>.small{grid-column:1/-1;margin:0}
.signal-playground-option{display:flex;align-items:flex-start;flex-direction:column;gap:6px;min-width:0;font-size:13px}
.signal-playground-option>.input{max-width:160px;font-size:16px}
.signal-segments{display:flex;min-width:0;flex-wrap:wrap;gap:0;max-width:100%}
.signal-segments>.btn{border-radius:0;margin-left:-1px;min-width:44px;white-space:normal;flex:1 1 auto}
.signal-segments>.btn:first-child{border-radius:6px 0 0 6px;margin-left:0}.signal-segments>.btn:last-child{border-radius:0 6px 6px 0}
.signal-segments>.btn[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 16%,transparent);border-color:var(--accent);color:var(--text)}
.signal-playground-empty{padding:24px 0;border-block:1px solid var(--border)}
.signal-playground-applied{font-size:13px;border-top:1px solid var(--border);padding-top:12px}
.signal-playground-applied>p{margin-bottom:4px}.signal-playground-chart{width:100%;min-width:0;margin-top:8px}
.signal-playground-chart svg{display:block;width:100%;height:auto}
.signal-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;padding:16px 0;border-block:1px solid var(--border);margin-top:12px}
.signal-stat{min-width:0;display:grid;gap:6px;font-size:12px}.signal-stat>strong{font-size:22px;font-variant-numeric:tabular-nums;font-weight:700}
.signal-playground-allocation,.signal-playground-history{border-top:1px solid var(--border);padding-top:20px;margin-top:20px;min-width:0}
.signal-playground-allocation>.input{max-width:300px;margin:12px 0;font-size:16px}
.signal-table-wrap{overflow:auto;max-width:100%;margin-top:12px;border:1px solid var(--border);border-radius:6px}
.signal-table{width:100%;border-collapse:collapse;text-align:left;white-space:nowrap;font-size:13px}
.signal-table :is(th,td){padding:10px 12px;border-bottom:1px solid var(--border)}
.signal-table thead th{font-weight:600;color:var(--muted)}.signal-table tbody tr:last-child>*{border-bottom:0}
.signal-table tbody th{font-weight:650}.signal-table th:first-child{position:sticky;left:0;background:var(--surface,var(--bg));z-index:1}
.signal-table .signal-weight{width:100px;min-height:44px;font-size:16px}
.signal-pager{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;font-size:12px}
.signal-coverage-note{padding:12px;background:var(--bg-2);font-size:13px}
.signal-playbook-library{display:grid;gap:8px}.signal-playbook-row{display:flex;flex-direction:column;gap:4px;padding:12px;border-bottom:1px solid var(--border);color:var(--text);text-decoration:none}
.signal-playbook-json{display:grid;gap:12px}.signal-playbook-json textarea{width:100%;font:13px/1.6 monospace;min-width:0;box-sizing:border-box}
.signal-playbook-transfer{border-top:1px solid var(--border);padding-top:8px}
@media(max-width:900px){
 .signal-studio .studio-sheet-stack,body.beta-ui-route .signal-studio .studio-sheet-stack{grid-template-columns:minmax(0,1fr)}
 .signal-playground-head{flex-wrap:wrap}.signal-playground-head>.btn{width:100%}
 .signal-playground-option-body{grid-template-columns:minmax(0,1fr)}
 .signal-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.signal-stat>strong{font-size:20px}
 .signal-studio .studio-instant,.signal-studio .studio-sentence-editor{min-width:0}
 .signal-studio .studio-bar{position:static;flex-wrap:wrap}
 .signal-studio .studio-bar>.studio-start{width:100%}
 .signal-playbook-json textarea{font-size:16px}
}

/* V3: the same production controls in a compact builder and a continuous report. */
.signal-workspace{min-width:0;max-width:1400px;margin-inline:auto}.signal-workspace-head{margin-bottom:20px}
.signal-workspace-head h1{margin:0;font-size:clamp(25px,2.2vw,32px);line-height:1.2;letter-spacing:-.025em}
.signal-eyebrow{margin:0 0 8px;font-size:10px;font-weight:700;letter-spacing:.1em;color:var(--accent)}
.signal-workspace .signal-workspace-tabs{display:flex;gap:28px;border-bottom:1px solid var(--border);margin:0 0 20px;padding:0;background:none;border-radius:0}
.signal-workspace-tabs>button{min-height:48px;flex:none;padding:10px 0;border:0;border-bottom:2px solid transparent;border-radius:0;background:none;color:var(--muted);font-weight:650}
.signal-workspace-tabs>button[aria-selected=true]{color:var(--text);border-bottom-color:var(--accent);background:none}
.signal-workflow{list-style:none;display:flex;gap:22px;margin:0 0 16px;padding:0;color:var(--muted);font-size:12px;flex-wrap:wrap}
.signal-workflow li{display:flex;align-items:center;gap:8px}.signal-workflow li>span{width:23px;height:23px;display:grid;place-items:center;border:1px solid var(--border);border-radius:50%;font-size:11px}
.signal-workflow li:first-child{color:var(--text)}.signal-workflow li:first-child>span{background:var(--accent);color:var(--bg);border-color:var(--accent)}
.signal-studio .studio-sentence-layout,body.beta-ui-route .signal-studio .studio-sentence-layout{grid-template-columns:minmax(300px,4fr) minmax(0,7fr);gap:20px;align-items:start}
.signal-studio .studio-sentence-editor,.signal-studio.studio-sentence-first .studio-instant{padding:20px;border:1px solid var(--border);border-radius:16px;background:var(--surface)}
.signal-conditions-head{display:flex;gap:12px;align-items:center;justify-content:space-between;padding-bottom:16px;border-bottom:1px solid var(--border);margin-bottom:16px}
.signal-conditions-head h2{font-size:17px;margin:0;white-space:nowrap}
body.beta-ui-route .signal-studio .signal-mobile-jump{display:none}
@media(max-width:600px){body.beta-ui-route .signal-studio .signal-mobile-jump{display:inline-flex;align-items:center;justify-content:center;min-height:44px;flex-shrink:0}}

.signal-conditions-note{font-size:12px;line-height:1.7;margin:0 0 16px}
.signal-studio .studio-sentence{font-size:13px;line-height:1.8;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--bg-2);margin-bottom:16px}
.signal-studio .studio-tok.btn{min-height:32px}.signal-studio .studio-op{margin-bottom:14px;gap:6px}
.signal-studio .studio-op-choice{padding:8px;font-size:12px;min-height:44px}.signal-studio .studio-op-choice small{display:none}
.signal-studio .studio-pills{flex-wrap:wrap;overflow:visible;gap:6px;margin:0 0 12px;padding:0}
.signal-studio .studio-sheet-stack,body.beta-ui-route .signal-studio .studio-sheet-stack{grid-template-columns:minmax(0,1fr);gap:10px;margin:0}
.signal-studio .studio-sheet-stack>.studio-sheet-inline,body.beta-ui-route .signal-studio .studio-sheet-stack>.studio-sheet-inline{padding:14px;border:1px solid var(--border);border-radius:11px;background:color-mix(in srgb,var(--accent) 5%,var(--surface))}
.signal-studio .studio-sheet-title{font-size:13px;font-weight:650;line-height:1.55}.signal-studio .studio-sheet-count:empty{display:none}
.signal-studio .studio-sheet-actions .studio-danger{font-size:0;min-width:32px;width:32px;height:32px;min-height:32px;padding:0}.signal-studio .studio-sheet-actions .studio-danger::after{content:'×';font-size:18px}
.signal-studio .studio-rsi-period{display:grid;gap:6px}.signal-studio .studio-rsi-period .studio-choice.btn{min-height:36px;font-size:11px;padding:6px 8px}
.signal-condition-presets{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;margin-top:10px}.signal-condition-presets .input{width:100%;min-width:0;font-size:13px;min-height:40px}.signal-condition-presets>.small{margin:0}
body.beta-ui-route .signal-studio .studio-sheet-inline>.studio-sheet-fields{display:grid;margin-top:12px}
body.beta-ui-route .signal-studio .studio-sheet-fields{grid-template-columns:minmax(0,1fr);gap:12px}
body.beta-ui-route .signal-condition-method{font-size:11px;color:var(--muted);margin-top:6px}
body.beta-ui-route .signal-condition-method>summary{min-height:36px;display:flex;align-items:center;cursor:pointer}
body.beta-ui-route .signal-condition-method p{line-height:1.6;margin:0 0 4px}
body.beta-ui-route .signal-allocation-settings{margin-top:16px;border-top:1px solid var(--border)}
body.beta-ui-route .signal-allocation-settings>summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:13px;font-weight:600}
body.beta-ui-route .signal-allocation-settings .signal-playground-allocation{margin-top:0}
body.beta-ui-route .signal-studio [data-signal-amount] .studio-exact{min-width:0;width:100%}
body.beta-ui-route .signal-studio [data-signal-amount] .studio-exact-box{min-width:110px;max-width:180px}
body.beta-ui-route .signal-studio .studio-advanced{margin-top:14px;border-top:1px solid var(--border)}
.signal-studio .studio-instant .signal-playground-head{padding-bottom:16px;align-items:center}.signal-playground-head h2{font-size:18px}.signal-playground-head p{font-size:11px;line-height:1.6}
.signal-report-nav{display:flex;gap:18px;flex-wrap:wrap;border-block:1px solid var(--border);margin:0 -20px;padding:0 20px;background:var(--bg-2)}
.signal-report-nav>button{font:inherit;font-size:12px;min-height:42px;border:0;background:none;color:var(--muted);padding:7px 0}
.signal-report-nav>button:hover{color:var(--text)}
.signal-playground-options{padding-top:12px;border-bottom:1px solid var(--border);margin-bottom:0}.signal-playground-options>summary{font-size:12px;min-height:32px}
.signal-playground-option-body{gap:12px;padding:8px 0 16px}.signal-playground-option{font-size:12px}.signal-playground-option-body>.small{font-size:11px;line-height:1.7}
.signal-playground-status{margin:14px 0;font-size:12px;min-height:0;line-height:1.6}
.signal-section-title{display:flex;align-items:center;gap:9px;font-size:15px;margin:0 0 14px}.signal-section-title>span{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.signal-playground-results{scroll-margin-top:20px}.signal-playground-empty{padding:24px 18px;border:1px dashed var(--border);border-radius:10px;margin-bottom:18px;background:var(--bg-2)}
.signal-playground-empty h3{font-size:17px;margin:0 0 8px;line-height:1.5}.signal-playground-empty p{font-size:12px;line-height:1.8;margin:0}
.signal-playground-applied{padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-2);font-size:11px}.signal-playground-applied>.small{font-size:10px;line-height:1.6}
.signal-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:0;border:0;margin:16px 0}.signal-stat{padding:13px 10px;border:1px solid var(--border);border-radius:10px;background:var(--bg-2);font-size:11px}.signal-stat>strong{font-size:23px;line-height:1.35}
.signal-playground-chart{margin-top:20px}.signal-result-method{font-size:12px;margin-top:16px}.signal-result-method>summary{min-height:36px;cursor:pointer}
.signal-playground-allocation,.signal-playground-history{scroll-margin-top:20px;padding-top:24px;margin-top:24px}.signal-playground-allocation>.small,.signal-playground-history>.small{font-size:12px;line-height:1.7}
.signal-studio .studio-bar{padding:18px 0 0;margin-top:24px;border-top:1px solid var(--border);display:flex;gap:12px;align-items:center;flex-wrap:wrap}.signal-studio .studio-bar-n{font-size:11px;flex:1}
.signal-studio .studio-start{background:transparent!important;color:var(--text)!important;border:1px solid var(--border)!important;font-size:12px}
.signal-playbook-transfer{margin-top:18px;font-size:12px}.signal-playbook-transfer>summary{min-height:40px}
.signal-library-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:22px}.signal-library-head h2{margin:0;font-size:22px}.signal-library-head p{margin:6px 0 0;font-size:13px;line-height:1.7}
.signal-library-list{border-top:1px solid var(--border)}
.signal-library-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 24px;padding:16px 0;border-bottom:1px solid var(--border);min-width:0}
.signal-library-main,.signal-library-summary{min-width:0}.signal-library-row-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.signal-library-row h3{font-size:15px;line-height:1.5;margin:0;overflow-wrap:anywhere}.signal-library-row h3>a{color:var(--text);text-decoration:none}.signal-library-row h3>a:hover{text-decoration:underline}.signal-library-row-head .chip{font-size:10px}
.signal-library-scope{display:flex;gap:6px 12px;flex-wrap:wrap;font-size:12px;line-height:1.65;color:var(--muted);margin-top:5px}.signal-library-cap{color:var(--text)}
.signal-library-conditions{font-size:13px;line-height:1.8;margin:4px 0;overflow-wrap:anywhere}.signal-library-operator{font-weight:650;color:var(--muted)}.signal-library-condition{font-variant-numeric:tabular-nums}.signal-library-separator{color:var(--muted)}.signal-library-group>.signal-library-group{padding-inline:3px}
.signal-library-simulation{font-size:11px;line-height:1.6;color:var(--muted);margin:3px 0 0}.signal-library-side{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:7px}.signal-library-side>time{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.signal-library-actions{display:flex;gap:6px}.signal-library-actions>.btn{min-height:44px;min-width:44px;font-size:12px;padding:8px 12px}.signal-library-row>.err{grid-column:1/-1;margin:0;font-size:12px}.signal-library-row[aria-busy=true]{opacity:.75}
.signal-library-stocks{min-width:0}.signal-library-stocks>summary{cursor:pointer;min-height:24px;overflow-wrap:anywhere}.signal-library-stocks>p{max-width:70ch;line-height:1.7;overflow-wrap:anywhere;margin:4px 0}.signal-library-summary>.small{margin:5px 0}
[data-playbook-delete-dialog] .signal-library-summary{padding:12px 0;border-block:1px solid var(--border);margin-top:14px;max-height:45vh;overflow-y:auto}
@media(max-width:600px){.signal-library-row{grid-template-columns:minmax(0,1fr);gap:9px;padding:14px 0}.signal-library-side{flex-direction:row;align-items:center;justify-content:space-between;gap:8px}.signal-library-actions{margin-left:auto;flex-shrink:0}.signal-library-row h3{font-size:14px}.signal-library-conditions{font-size:12px}.signal-library-scope{font-size:11px}}
.signal-library-monitor{margin-top:24px}.signal-library-monitoring{margin-top:24px;border-top:1px solid var(--border);padding-top:20px}.signal-feed-intro{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:18px}.signal-feed-intro>div{min-width:0;flex:1 1 320px}.signal-feed-intro h2{font-size:22px;margin-bottom:6px}.signal-feed-intro p{font-size:13px;line-height:1.7}
@media(max-width:1100px){.signal-studio .studio-sentence-layout,body.beta-ui-route .signal-studio .studio-sentence-layout{grid-template-columns:minmax(285px,4fr) minmax(0,6fr);gap:14px}.signal-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.signal-conditions-head{flex-wrap:wrap}}
@media(max-width:800px){
 .signal-studio .studio-sentence-layout,body.beta-ui-route .signal-studio .studio-sentence-layout{grid-template-columns:minmax(0,1fr);gap:18px}
 .signal-conditions-head{flex-wrap:nowrap}.signal-workflow{gap:12px;font-size:10px}.signal-workflow li{gap:5px}.signal-workflow li>span{width:20px;height:20px}
 .signal-playbook-toolbar{grid-template-columns:minmax(0,1fr);gap:10px}
 .signal-playbook-actions{flex-wrap:wrap;justify-content:flex-start}
 .signal-playbook-actions>.studio-save-state,.signal-playbook-actions>.studio-save-state:empty{display:block;flex:1 0 100%;min-height:18px;margin:0;text-align:left}
 .signal-playbook-actions>.btn-primary{margin-left:auto}
 .signal-studio .studio-sentence-editor,.signal-studio.studio-sentence-first .studio-instant{padding:16px;border-radius:13px}.signal-report-nav{margin-inline:-16px;padding-inline:16px;gap:15px}
 .signal-workspace .signal-workspace-tabs{gap:24px;margin-bottom:18px}.signal-workspace-tabs>button{font-size:13px;min-height:44px}
 .signal-library-head{flex-wrap:wrap}.signal-playground-head>.btn{width:auto}.signal-playground-head{flex-wrap:nowrap;align-items:flex-start!important}
 .signal-playground-head h2{font-size:16px}.signal-playground-head p{max-width:22ch}.signal-playground-head>.btn{min-height:44px;font-size:12px;padding:8px 12px}
 .signal-playground-option-body{grid-template-columns:repeat(2,minmax(0,1fr))}.signal-segments>.btn{font-size:11px;padding:7px 6px;min-height:42px}.signal-condition-presets .input{font-size:16px}.signal-workspace-head h1{font-size:25px}
 .signal-workspace-head .signal-eyebrow{font-size:9px}.signal-workflow li>span{flex:none}
}
/* Phones (owner 2026-10-25): the four steps are one row — "第 1/4 步 · 搭建策略" and a slim progress bar — never a 2×2 grid. */
@media(max-width:600px){
 .signal-workflow{position:relative;flex-wrap:nowrap;align-items:center;gap:0;min-height:28px;margin:0 0 12px;padding:0 0 8px;font-size:13px;line-height:1.4;border-bottom:3px solid var(--border)}
 .signal-workflow::before{content:attr(data-step-label);white-space:nowrap}
 .signal-workflow::after{content:'';position:absolute;left:0;bottom:-3px;width:25%;height:3px;border-radius:2px;background:var(--accent)}
 .signal-workflow li{display:none}
 .signal-workflow li:first-child{display:flex;gap:0;font-weight:650;white-space:nowrap}
 .signal-workflow li:first-child::before{content:'·';margin-inline:6px;color:var(--muted);font-weight:400}
 .signal-workflow li:first-child>span{display:none}
}
@media(max-width:360px){.signal-conditions-head{gap:6px}.signal-conditions-head h2{font-size:15px}.signal-report-nav{gap:12px}.signal-report-nav>button{font-size:11px}.signal-studio .studio-sentence-editor,.signal-studio.studio-sentence-first .studio-instant{padding:12px}.signal-report-nav{margin-inline:-12px;padding-inline:12px}.signal-playground-head{flex-wrap:wrap}.signal-playground-head>.btn{width:100%}}
body.beta-ui-route .signal-workspace .signal-workspace-tabs{display:flex;gap:28px;width:100%;border:0;border-bottom:1px solid var(--db-line);margin:0 0 20px;padding:0;border-radius:0;background:none}
body.beta-ui-route .signal-workspace .signal-workspace-tabs>button{min-height:48px;flex:none;padding:10px 0;border:0;border-bottom:2px solid transparent;border-radius:0;background:none;color:var(--db-muted);font-weight:650}
body.beta-ui-route .signal-workspace .signal-workspace-tabs>button[aria-selected=true]{background:none;color:var(--db-ink);border-bottom-color:var(--db-accent)}
body.beta-ui-route .signal-studio .studio-sentence-editor,body.beta-ui-route .signal-studio.studio-sentence-first .studio-instant{padding:20px;border-radius:16px;background:var(--db-paper)}
body.beta-ui-route .signal-studio .studio-sheet-stack>.studio-sheet-inline{border-color:var(--db-line)}
@media(max-width:800px){body.beta-ui-route .signal-studio .studio-sentence-editor,body.beta-ui-route .signal-studio.studio-sentence-first .studio-instant{padding:16px;border-radius:13px}body.beta-ui-route .signal-workspace .signal-workspace-tabs{gap:24px}}
@media(max-width:360px){body.beta-ui-route .signal-studio .studio-sentence-editor,body.beta-ui-route .signal-studio.studio-sentence-first .studio-instant{padding:12px}}

.signal-simple-scope{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:16px;margin-bottom:16px;border-bottom:1px solid var(--border);font-size:12px;color:var(--muted)}
.signal-simple-scope>.btn{min-width:0;white-space:normal;max-width:100%;text-align:left;font-size:12px}
body.beta-ui-route .signal-studio .studio-pills,body.beta-ui-route .signal-studio .studio-sheet-actions{display:none}
.signal-condition-card{padding:14px;border:1px solid var(--border);border-radius:11px;background:var(--surface)}
.signal-condition-toggle.btn{display:flex;justify-content:flex-start;gap:9px;align-items:flex-start;width:100%;min-height:32px;border:0;background:none!important;padding:0!important;text-align:left;white-space:normal;color:var(--text)!important;font-size:13px;font-weight:650;line-height:1.55}
.signal-condition-check{flex:0 0 17px;width:17px;height:17px;border:1px solid var(--border);border-radius:5px;margin-top:2px;display:grid;place-items:center;font-size:12px;line-height:1}
.signal-condition-toggle[aria-pressed=true] .signal-condition-check{background:var(--accent);color:var(--bg);border-color:var(--accent)}
.signal-condition-description{font-size:11px;line-height:1.65;color:var(--muted);margin:4px 0 0 26px}
body.beta-ui-route .signal-studio .studio-sheet-details{display:block}body.beta-ui-route .signal-studio .studio-rsi-period{margin-top:12px}
.signal-unsupported-conditions{font-size:11px;color:var(--muted);margin-top:4px}.signal-unsupported-conditions>summary{min-height:36px;cursor:pointer}.signal-unsupported-conditions .signal-condition-card{margin-top:8px}
.signal-preview{padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--border)}
.signal-preview-head h2{font-size:18px;margin:0 0 6px}.signal-preview-head p{margin:0;font-size:12px;line-height:1.7}
.signal-preview-status{font-size:12px;line-height:1.7;margin:12px 0}.signal-preview.is-stale .signal-preview-body{opacity:.65}
.signal-preview-count{display:flex;gap:10px;align-items:baseline}.signal-preview-count>strong{font-size:30px;line-height:1.25;font-variant-numeric:tabular-nums}.signal-preview-count>span{font-size:14px}
.signal-preview-filters{display:flex;gap:8px;margin:14px 0}.signal-preview-list{border-top:1px solid var(--border);max-height:28rem;overflow:auto;scrollbar-gutter:stable;overscroll-behavior:contain}
.signal-preview-stock{border-bottom:1px solid var(--border)}.signal-preview-stock>summary{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:8px;padding:13px 0;min-height:46px;cursor:pointer;font-size:12px;align-items:center}.signal-preview-stock>summary::after{content:'⌄';grid-column:3;grid-row:1;color:var(--muted)}.signal-preview-stock>summary>span:last-child{grid-column:2;font-size:11px;color:var(--muted)}.signal-preview-company{overflow-wrap:anywhere;color:var(--muted)}
.signal-preview-detail{padding:0 0 14px;font-size:12px}.signal-preview-detail p{margin:7px 0;line-height:1.6}.signal-preview-detail h3{font-size:13px!important;margin:14px 0 6px!important}
.signal-preview-dates{display:flex;flex-wrap:wrap;gap:6px;list-style:none;padding:0;margin:10px 0}.signal-preview-dates li{border:1px solid var(--border);border-radius:6px;padding:5px 8px;font-size:11px}
.signal-preview-terms{font-size:12px;margin-top:16px}.signal-preview-terms>summary{cursor:pointer;min-height:36px;font-weight:650}
.signal-preview-terms>summary{gap:8px}.signal-preview-terms>summary::-webkit-details-marker{display:none}
.signal-preview-terms>summary::before{content:'▸';color:var(--muted);transition:transform .12s}.signal-preview-terms[open]>summary::before{transform:rotate(90deg)}
@media(prefers-reduced-motion:reduce){.signal-preview-terms>summary::before{transition:none}}.signal-preview-terms p{line-height:1.7;color:var(--muted)}
.signal-library-monitoring>.view-head h2{font-size:20px}.signal-library-monitoring .view-head{margin-bottom:14px}
.signal-preview-timing{border-left:3px solid var(--accent);padding:8px 12px;margin:14px 0;background:var(--bg-2);font-size:12px;line-height:1.7}
.signal-time-control{display:grid;gap:6px;min-width:0;font-size:12px}.signal-time-control-label{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.signal-time-control output{font-weight:650;color:var(--text);font-variant-numeric:tabular-nums}
.signal-time-range{width:100%;height:32px;margin:0;accent-color:var(--accent);cursor:ew-resize}.signal-time-ticks{display:flex;justify-content:space-between;gap:8px;color:var(--muted);font-size:10px}.signal-time-ticks>span{text-align:center}.signal-time-ticks>span:first-child{text-align:left}.signal-time-ticks>span:last-child{text-align:right}
.signal-selected-dates{grid-column:1/-1;margin:0!important}.signal-time-view{padding:14px;border:1px solid var(--border);border-radius:10px;background:var(--bg-2)}
.signal-time-view-heading{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}.signal-time-view-heading h4{font-size:13px;margin:0}.signal-time-view-heading>span,.signal-time-period{font-size:11px;color:var(--muted)}
.signal-time-track{height:5px;margin:20px 0 16px;border-radius:4px;background:linear-gradient(to right,var(--border) 0 var(--signal-first-pct,100%),var(--accent) var(--signal-first-pct,100%) 100%);position:relative}
.signal-time-anchor{position:absolute;left:var(--signal-first-pct);top:50%;transform:translate(-50%,-50%);width:11px;height:11px;background:var(--accent);border:2px solid var(--surface);border-radius:50%;box-shadow:0 0 0 1px var(--accent)}
.signal-time-first{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:12px}.signal-time-view>.small{font-size:11px;line-height:1.7;margin-bottom:0}.signal-stock-first{display:block;font-size:10px;font-weight:400;color:var(--muted);margin-top:4px;white-space:normal;max-width:160px}
@media(max-width:600px){.signal-playground-option-body{grid-template-columns:minmax(0,1fr)}.signal-time-control{padding-block:5px}}
@media(max-width:360px){
 .signal-conditions-head h2{white-space:normal;min-width:0}
}
/* Beta preview: one page of prices and dates stays beside the condition editor. */
.signal-preview-modes{display:flex;flex-wrap:wrap;gap:8px;margin-block:14px}.signal-preview-modes>.btn[aria-pressed=true]{border-color:var(--accent);color:var(--text);background:var(--bg-2)}
.signal-preview-range{border-block:1px solid var(--border);padding-block:12px}.signal-preview-range>.small{font-size:11px;line-height:1.65;margin-bottom:0}
.signal-range-exact.input{width:76px;min-height:44px;text-align:right;font-size:16px;padding:6px 10px}.signal-time-range{min-height:44px}
.signal-preview-stock>summary{grid-template-columns:64px minmax(0,1fr) 80px;column-gap:8px;row-gap:5px;padding-block:12px}
.signal-preview-stock>summary::after{display:none}.signal-preview-stock-facts{display:grid;gap:3px;min-width:0}.signal-preview-stock-facts>span:last-child{font-size:11px;color:var(--muted)}
.signal-preview-stock>summary>.signal-preview-stock-dates{grid-column:1/-1;font-size:11px;color:var(--muted);line-height:1.6}
.signal-preview-spark{display:flex;align-items:center;justify-content:flex-end;min-width:0}.signal-preview .instant-spark{display:block;width:80px;height:28px}
.signal-history-axis{grid-column:1/-1;min-width:0}.signal-history-axis-track{height:4px;background:var(--border);position:relative;margin:20px 6px 10px;border-radius:3px}.signal-history-axis-marker{position:absolute;width:10px;height:10px;top:50%;transform:translate(-50%,-50%);border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}.signal-history-axis p{font-size:11px;line-height:1.6;margin-bottom:0}
.signal-playground-head+.signal-playground-status{margin:10px 0 16px;line-height:1.7}.signal-playground-status.err{border-left:3px solid var(--bad);padding:10px 12px;background:var(--bg-2)}
@media(max-width:380px){.signal-preview-stock>summary{grid-template-columns:54px minmax(0,1fr) 64px}.signal-preview .instant-spark{width:64px;height:26px}}
.signal-history-slider{position:relative}.signal-history-slider-marker{position:absolute;top:30px;width:2px;height:9px;background:var(--accent);pointer-events:none}.signal-preview-range [data-signal-history-first]{font-size:11px;min-height:44px;padding:6px 10px}.signal-curve-first{stroke:var(--accent);stroke-width:1.5;stroke-dasharray:3 3;pointer-events:none}.signal-curve-first-label{fill:var(--text);font-size:10px;font-weight:600;pointer-events:none}
/* Beta chart editor: the only two draggable controls live in the chart. */
.signal-playground .signal-playground-chart{margin:0}.signal-chart-editor{min-width:0}.signal-chart-stage{height:380px;position:relative;isolation:isolate;border:1px solid var(--border);border-radius:10px;background:var(--bg-2)}
.signal-chart-plot{position:absolute;inset:74px 0 auto;height:220px}.signal-chart-plot>svg{width:100%;height:220px;display:block}.signal-chart-overlay{position:absolute;inset:0;width:100%;height:380px;pointer-events:none}.signal-chart-selection{stroke:var(--accent);stroke-width:1;stroke-dasharray:6 4;opacity:.55}.signal-chart-anchor{fill:var(--accent)}
.signal-chart-handle{position:absolute;z-index:3;width:44px;height:44px;min-width:44px;min-height:44px;padding:0;transform:translateX(-50%);border:0;border-radius:50%;background:transparent;color:var(--text);touch-action:none;cursor:ew-resize}.signal-chart-handle>span{display:grid;place-items:center;width:24px;height:24px;margin:auto;border:2px solid var(--accent);border-radius:50%;background:var(--surface);font-size:15px;box-shadow:0 0 0 4px var(--bg-2)}.signal-chart-handle:focus-visible{outline:3px solid var(--focus);outline-offset:1px}.signal-chart-start{top:320px}.signal-chart-exit{top:22px}.signal-chart-exit>span{border-color:var(--text)}
.signal-chart-duration{position:absolute;top:11px;height:58px;font-size:11px}.signal-chart-duration>strong{position:absolute;right:-8px;top:-4px;white-space:nowrap;font-weight:600}.signal-chart-duration-ticks{position:absolute;inset:53px -7px auto;display:flex;justify-content:space-between;color:var(--muted);font-size:10px}
.signal-chart-context{position:absolute;left:46px;right:12px;bottom:10px;display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.signal-chart-plot .perf-axis-x{font-size:10px}.signal-chart-stale{position:absolute;left:14px;top:10px;max-width:calc(100% - 220px);font-size:11px;line-height:1.5;margin:0;color:var(--muted)}.signal-chart-stale[hidden]{display:none}.signal-chart-no-result{position:absolute;inset:132px 30px auto;text-align:center;font-size:13px;color:var(--muted)}.signal-chart-no-result[hidden]{display:none}
.signal-chart-dates,.signal-chart-first{display:flex;justify-content:space-between;flex-wrap:wrap;gap:4px 10px;margin:10px 0 0;font-size:12px;font-variant-numeric:tabular-nums}.signal-chart-dates{font-weight:650}.signal-chart-dates>span{font-weight:400;color:var(--muted)}.signal-chart-first{color:var(--muted);font-size:11px}.signal-chart-first[hidden]{display:none}.signal-chart-note{font-size:11px;line-height:1.7;margin:8px 0}.signal-chart-editor.is-stale .perf-line,.signal-chart-editor.is-stale .perf-bench,.signal-chart-editor.is-stale .perf-area{opacity:.45}
.signal-playground .signal-playground-options{margin:0 0 10px;padding-top:0}.signal-playground .signal-playground-options>summary{min-height:44px;font-weight:500;color:var(--muted)}.signal-playground .signal-playground-results>.perf-legend{margin-top:4px}.signal-playground .signal-playground-results>.signal-stats{margin-top:12px}.signal-playground .signal-playground-applied{margin-top:16px}
@media(max-width:480px){.signal-chart-stale{max-width:90px;font-size:10px;top:8px;left:8px}.signal-chart-dates{font-size:11px}.signal-chart-duration>strong{font-size:10px}.signal-chart-stage .perf-tip{max-width:220px}.signal-chart-context{font-size:9px}}

.signal-chart-context-rail{position:absolute;inset:302px 0 0;border-top:1px solid var(--border);background:var(--surface);border-radius:0 0 10px 10px}.signal-chart-context-rail>strong{display:block;font-size:10px;font-weight:600;color:var(--muted);padding:8px 14px}.signal-chart-rail{stroke:var(--border);stroke-width:3;stroke-linecap:round}.signal-chart-selected-range{stroke:var(--accent);stroke-width:3;stroke-linecap:round}
/* Follow-up list: the compact stock rows; portfolio controls are a next step. */
.signal-current-summary{display:flex;gap:5px 12px;flex-wrap:wrap;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--border);font-size:12px}.signal-current-summary>p{flex-basis:100%;margin:0;font-size:11px}.signal-follow-range{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;padding:10px 0}.signal-follow-range .signal-follow-presets,.signal-follow-sort{display:flex;gap:5px;flex-wrap:wrap}.signal-follow-custom{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.signal-follow-range>p{flex-basis:100%;margin:0;font-size:11px}.signal-follow-range .signal-range-exact{width:66px}.signal-follow-sort{margin-bottom:10px}
/* The follow list uses the compact stock row, with selection and details at its edges. */
body.beta-ui-route .signal-follow-list{container:signal-rows/inline-size;max-height:38rem;overflow-y:auto;scrollbar-gutter:stable;padding:0 3px 0 0;list-style:none;display:grid;gap:4px}
body.beta-ui-route .signal-follow-list .instant-row{grid-template-columns:44px 60px minmax(0,1fr) auto 56px;gap:6px;min-height:64px;padding:6px;align-items:center}
body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting){grid-template-columns:60px minmax(0,1fr) auto 56px}
body.beta-ui-route .signal-follow-select[hidden]{display:none}
body.beta-ui-route .signal-follow-select{display:grid;place-items:center;min-height:44px;min-width:44px}
body.beta-ui-route .signal-follow-select input{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}
body.beta-ui-route .signal-follow-select:has(input:focus-visible){outline:3px solid var(--focus);outline-offset:1px;border-radius:6px}
body.beta-ui-route .signal-follow-list .instant-tk .ticker-chip{display:flex;align-items:center;min-height:44px}
body.beta-ui-route .signal-follow-list .instant-side{flex-direction:row;gap:8px;align-items:center}
body.beta-ui-route .signal-follow-list .instant-spark{display:block;width:64px;height:24px}
body.beta-ui-route .signal-follow-list .instant-change{text-align:right;min-width:86px}
body.beta-ui-route .signal-follow-list .instant-bench{max-width:16ch}
body.beta-ui-route .signal-follow-list .instant-now{display:inline-block;font-size:10px}
body.beta-ui-route .signal-follow-list .instant-when{margin-top:3px;font-size:11px}
body.beta-ui-route .signal-follow-list .instant-age{white-space:nowrap}
body.beta-ui-route .signal-follow-dates{grid-column:5;grid-row:1;font-size:11px;color:var(--muted);min-width:0}
body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .signal-follow-dates{grid-column:4}
body.beta-ui-route .signal-follow-dates>summary{cursor:pointer;min-height:44px;min-width:44px;display:flex;align-items:center;justify-content:center;font-size:10px;list-style:none;border-radius:5px}
body.beta-ui-route .signal-follow-dates>summary::-webkit-details-marker{display:none}
body.beta-ui-route .signal-follow-dates>summary:hover{background:var(--bg-2)}
body.beta-ui-route .signal-follow-dates>summary:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
body.beta-ui-route .signal-follow-dates[open],body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .signal-follow-dates[open]{grid-column:1/-1;grid-row:2;border-top:1px solid var(--border);padding:2px 8px 8px}
body.beta-ui-route .signal-follow-dates[open]>summary{justify-content:flex-start}
body.beta-ui-route .signal-follow-dates ul{display:flex;flex-wrap:wrap;gap:6px 16px;padding-left:16px;margin:0}
body.beta-ui-route .signal-follow-dates p{margin:0 0 6px}
body.beta-ui-route .signal-follow-basket{border-top:1px solid var(--border);padding-top:12px;margin-top:12px;display:flex;gap:8px 12px;align-items:center;flex-wrap:wrap}
body.beta-ui-route .signal-follow-basket>p{flex:1 1 160px;margin:0;font-size:11px}
body.beta-ui-route .signal-follow-basket>.btn{min-height:44px}
body.beta-ui-route .signal-preview.is-stale .signal-follow-list{opacity:.55}
@container signal-rows (max-width:480px){
  body.beta-ui-route .signal-follow-list .instant-row{grid-template-columns:44px minmax(0,1fr) 104px;gap:0 6px;padding:4px 6px}
  body.beta-ui-route .signal-follow-list .instant-tk{grid-column:2;grid-row:1}
  body.beta-ui-route .signal-follow-list .instant-st{grid-column:2;grid-row:2;font-size:11px;align-self:start}
  body.beta-ui-route .signal-follow-list .instant-when{white-space:normal;line-height:1.3}
  body.beta-ui-route .signal-follow-list .instant-side{grid-column:3;grid-row:1/3;flex-direction:column;gap:2px}
  body.beta-ui-route .signal-follow-list .signal-follow-select{grid-column:1;grid-row:1}
  body.beta-ui-route .signal-follow-dates{grid-column:1;grid-row:2}
  body.beta-ui-route .signal-follow-dates[open],body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .signal-follow-dates[open]{grid-column:1/-1;grid-row:3}
  body.beta-ui-route .signal-follow-list .instant-spark{width:64px;height:20px}
  body.beta-ui-route .signal-follow-list .instant-bench{max-width:100px}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting){grid-template-columns:minmax(0,1fr) 104px 50px}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .instant-tk{grid-column:1}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .instant-st{grid-column:1}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .instant-side{grid-column:2}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .signal-follow-dates{grid-column:3;grid-row:1/3}
  body.beta-ui-route .signal-follow-list .instant-row:not(.is-selecting) .signal-follow-dates[open]{grid-column:1/-1;grid-row:3}
}
@media(max-width:600px){body.beta-ui-route .signal-follow-basket>.btn-primary{width:100%}body.beta-ui-route .signal-follow-list{max-height:34rem}}
/* Beta historical signals: one compact summary and a range bounded by found signals. */
body.beta-ui-route .signal-preview-head h2{margin:0;font-size:17px}
body.beta-ui-route .signal-preview-modes{display:inline-flex;gap:0;border:1px solid var(--border);border-radius:999px;overflow:hidden;margin:10px 0}
body.beta-ui-route .signal-preview-modes>.btn{border:0;border-radius:0;min-height:44px;font-size:12px;padding:7px 14px}
body.beta-ui-route .signal-follow-range{display:block;border-top:0;padding:0 0 12px}
body.beta-ui-route .signal-follow-range-title{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px}
body.beta-ui-route .signal-follow-range-title>output{font-weight:650;white-space:nowrap}
body.beta-ui-route .signal-follow-range-title [data-signal-history-first]{border:0;font-size:11px;text-align:right;color:var(--muted);padding:5px 0}
body.beta-ui-route .signal-follow-slider{display:block;width:100%;height:32px;margin:0;accent-color:var(--accent);cursor:pointer}
body.beta-ui-route .signal-follow-range .signal-time-ticks{font-size:10px;line-height:1.3}
body.beta-ui-route .signal-follow-other-range{font-size:11px;margin-top:4px;color:var(--muted)}
body.beta-ui-route .signal-follow-other-range>summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
body.beta-ui-route .signal-follow-other-range>div{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
body.beta-ui-route .signal-follow-presets{gap:0;flex-wrap:nowrap}
body.beta-ui-route .signal-preview-count{gap:7px;font-size:12px;flex-wrap:wrap;margin:12px 0 8px}
body.beta-ui-route .signal-preview-count>strong{font-size:20px}
body.beta-ui-route .signal-preview-count>span{font-size:12px}
body.beta-ui-route .signal-preview-count>.small{margin-left:auto}
body.beta-ui-route .signal-follow-sort{display:inline-flex;gap:0;flex-wrap:nowrap;border-radius:999px;margin-bottom:8px;max-width:100%}
body.beta-ui-route .signal-follow-sort>button{font-size:11px;min-height:44px;padding:7px 12px;white-space:normal}
body.beta-ui-route .signal-follow-coverage{font-size:11px;margin:0 0 8px}
body.beta-ui-route .signal-preview-status[hidden],body.beta-ui-route .signal-current-summary[hidden]{display:none}
body.beta-ui-route .signal-preview-terms>summary{min-height:44px;display:flex;align-items:center}
@media(max-width:600px){body.beta-ui-route .signal-follow-range-title{align-items:flex-start}body.beta-ui-route .signal-follow-range-title [data-signal-history-first]{max-width:70%}body.beta-ui-route .signal-follow-sort>button{padding:6px 8px}}
body.beta-ui-route .signal-follow-unknown{font-size:11px;margin-top:8px;color:var(--muted)}
body.beta-ui-route .signal-follow-unknown>summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
body.beta-ui-route .signal-follow-unknown ul{list-style:none;max-height:18rem;overflow:auto;padding:0;margin:0}
body.beta-ui-route .signal-follow-unknown li{display:flex;align-items:center;gap:12px;padding:4px 0;border-top:1px solid var(--border)}
body.beta-ui-route .signal-follow-unknown .ticker-chip{min-height:44px;display:flex;align-items:center;min-width:60px}
/* Beta: after-signal performance (alerts/signal-outcomes.js) — the same tokens as the simulation card; returns follow the
   change-colour setting (--pos / --neg), losses stay on the left of the histogram with text labels. */
.signal-outcomes{--perf-line:var(--accent);--perf-bench-1:var(--muted);--perf-bench-2:var(--blue);--perf-bench-3:var(--yellow);--perf-bench:var(--perf-bench-1);--perf-win:var(--pos,var(--green));--perf-loss:var(--neg,var(--red));--perf-open:var(--faint);--perf-dd:var(--neg,var(--red));
  min-width:0;padding-bottom:24px;margin-bottom:24px;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums}
.signal-outcomes-head{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between}
.signal-outcomes-head h2{margin:0;font-size:17px}
.signal-outcomes .studio-seg{max-width:100%}
.signal-outcomes .studio-seg>button{min-height:44px;font-size:12px;padding:7px 12px}
.signal-outcomes-status{font-size:12px;line-height:1.7;margin:10px 0 0;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.signal-outcomes-status[hidden]{display:none}
.signal-outcomes-status>.btn{min-height:44px}
.signal-outcomes.is-stale .signal-outcomes-body,.signal-outcomes.is-loading .signal-outcomes-body{opacity:.55;transition:opacity .15s}
.signal-outcomes-placeholder{min-height:240px;border:1px dashed var(--border);border-radius:10px;margin-top:12px;background:var(--bg-2)}
.signal-outcomes-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0 0}
.signal-outcomes-stat{min-width:0;display:grid;gap:4px;padding:12px 10px;border:1px solid var(--border);border-radius:10px;background:var(--bg-2);font-size:11px;line-height:1.5}
.signal-outcomes-stat>strong{font-size:22px;line-height:1.3;font-weight:700;overflow-wrap:anywhere}
.signal-outcomes-stat>strong>.return-badge{font-size:inherit}
.signal-outcomes-stat>small{color:var(--muted);font-size:11px}
.signal-outcomes-figure{position:relative;margin:16px 0 0;min-width:0}
.signal-outcomes-figure>figcaption{font-size:13px;font-weight:650;margin-bottom:6px}
.signal-outcomes-figure svg{display:block;width:100%;height:auto;color:var(--text)}
.signal-outcomes-figure .perf-tip{position:absolute}
.signal-outcomes-figure .perf-legend{margin-top:6px}
.signal-outcomes-figure>.small{margin:6px 0 0;line-height:1.6}
.signal-outcomes-band{fill:var(--perf-line);fill-opacity:.13;stroke:none}
.signal-outcomes-band-key{display:inline-block;width:14px;height:10px;border-radius:2px;background:color-mix(in srgb,var(--perf-line) 24%,transparent)}
.signal-outcomes-horizon{stroke:var(--accent);stroke-width:1;stroke-dasharray:3 3}
.signal-outcomes-horizon-label{fill:var(--accent);font-weight:650}
.signal-outcomes-hist .perf-zero{stroke:var(--border)}
.signal-outcomes-bar rect{fill:var(--muted)}
.signal-outcomes-bar.is-win rect{fill:var(--perf-win)}
.signal-outcomes-bar.is-loss rect{fill:var(--perf-loss)}
.signal-outcomes-bar-label{font-size:10px;fill:var(--text)}
.signal-outcomes-extremes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:14px}
.signal-outcomes-extreme{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:10px;font-size:12px;min-width:0}
.signal-outcomes-extreme>.muted:first-child{flex-basis:100%}
.signal-outcomes-extreme>.return-badge{margin-left:auto}
.signal-outcomes-method{margin:14px 0 0;line-height:1.7;font-size:11px}
.signal-outcomes-combos{margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}
.signal-outcomes-combos>.small{margin:-6px 0 0;line-height:1.6}
.signal-outcomes-combos .signal-table-wrap{margin-top:10px}
.signal-outcomes-combos .signal-table .btn{min-height:44px;white-space:nowrap}
.signal-outcomes-combos tr[aria-current=true]>*{background:color-mix(in srgb,var(--accent) 8%,transparent)}
.signal-outcomes-current{font-size:11px;padding:3px 8px;border:1px solid var(--accent);border-radius:999px;color:var(--accent-text,var(--text));white-space:nowrap}
.signal-outcomes-etf{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}
.signal-outcomes-etf>.btn{min-height:44px}
.signal-outcomes-etf>p{flex:1 1 220px;margin:0;line-height:1.6}
/* Market cap as a condition card and its direction (大于 | 小于); the moving-average sheet's two segmented rows. */
.signal-studio .studio-cap-op .studio-choice.btn,.signal-studio .studio-ma-choices .studio-choice.btn{min-height:44px}
.signal-studio .studio-ma-choices{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:6px 10px}
.signal-studio .studio-ma-choices>.studio-fine{white-space:nowrap}
.signal-cap-card .signal-condition-presets{grid-template-columns:minmax(0,1fr) auto}
.signal-cap-card .studio-cap-op{margin-top:12px}
@media(max-width:600px){
 .signal-outcomes-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
 .signal-outcomes-stat>strong{font-size:20px}
 .signal-outcomes-extremes{grid-template-columns:minmax(0,1fr)}
 .signal-outcomes-etf>.btn{width:100%}
 .signal-studio .studio-ma-choices{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:480px){
 /* Three horizon labels do not fit one row on a narrow phone: the control takes the full width and the labels wrap. */
 .signal-outcomes-horizons.studio-seg{display:flex;width:100%;flex:1 1 100%;overflow:visible}
 .signal-outcomes .studio-seg>button{flex:1 1 0;min-width:0;white-space:normal;line-height:1.25;padding:6px 6px;font-size:11px}
 .signal-outcomes-head h2{font-size:15px}
}
/* A single signal list: current matches are emphasized without splitting history. */
body.beta-ui-route .signal-follow-list .instant-now[hidden]{display:none}
body.beta-ui-route .signal-follow-list .instant-row.is-current-match{background:color-mix(in srgb,var(--accent) 12%,var(--bg-2));border-color:var(--accent);box-shadow:inset 3px 0 var(--accent)}
body.beta-ui-route .signal-follow-list .instant-row.is-selecting.is-selected{border-color:var(--accent)}
body.beta-ui-route .signal-follow-list .instant-row.is-history-unknown{opacity:1;color:var(--muted)}
body.beta-ui-route .signal-follow-list .instant-row.is-history-unknown .instant-when{font-style:italic}
body.beta-ui-route .signal-follow-legend{font-size:11px;margin:0 0 10px;color:var(--muted)}
body.beta-ui-route .signal-preview-head{margin-bottom:10px}
body.beta-ui-route .signal-selection-help{margin:8px 0;font-size:11px}
@media(max-width:600px){body.beta-ui-route .signal-follow-basket{gap:6px}body.beta-ui-route .signal-follow-basket>p{flex-basis:100%}body.beta-ui-route .signal-follow-basket>.btn-ghost{padding-inline:10px}}

/* app-beta-ui.css */
/* The signed-in workspace shell (Beta is the only UI since 2026-10-22). app.html renders body.beta-ui-route, so the
   first paint already has this layout; colours come from tokens.css. Presentation only: every view keeps its
   existing reads, route ownership and state model. */
body.beta-ui-route{
 --r-sm:6px;--r-md:10px;--r-lg:16px;--radius:10px;
 --db-reading:'Newsreader Variable',Iowan Old Style,Baskerville,Georgia,serif;
 background:var(--db-canvas);color:var(--db-ink);font-family:Manrope,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Noto Sans SC","Microsoft YaHei",sans-serif;
}
body.lang-zh.beta-ui-route{--db-reading:'Songti SC','Noto Serif SC',STSong,'Newsreader Variable',Georgia,serif}

body.beta-ui-route :is(a,button,input,select,textarea,summary):focus-visible{outline:3px solid var(--db-focus);outline-offset:3px}
body.beta-ui-route :is(button,a,summary){touch-action:manipulation}
body.beta-ui-route .app-shell{background:var(--db-canvas)}
body.beta-ui-route .app-top{min-height:64px;padding:calc(8px + var(--safe-top)) 20px 8px;background:var(--db-paper);border-color:var(--db-line)}
body.beta-ui-route .app-top .brand{color:var(--db-ink);font-size:17px;font-weight:750;text-decoration:none}
/* Public routes inside the app (sign-in, registration, recovery, OAuth return) show no member navigation and keep the
   narrow reading column. Before the first route renders, a signed-out visitor (html[data-visitor], set by
   language-preference.js) gets that shell too, so the navigation never paints and then disappears. */
:is(body.beta-ui-route:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]),html[data-visitor] body:not([data-route])) .app-nav{display:none}
body.beta-ui-route:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]) .app-view{max-width:540px}
body.beta-ui-route .app-top .avatar-mark{width:38px;height:38px}

body.beta-ui-route .app-top :is(.lang-toggle,#logout,.account-avatar){min-height:44px}
body.beta-ui-route .app-main{background:var(--db-canvas);padding:20px 24px 36px;scroll-padding-top:24px}
body.beta-ui-route .app-view{max-width:1560px}
body.beta-ui-route .route-page{min-width:0}
body.beta-ui-route .app-foot{max-width:1560px;border-color:var(--db-line);color:var(--db-muted)}
body.beta-ui-route :is(.card,.change-card,.explore-candidate,.explore-stock-row,.cboard-card,.alert-item,.studio-panel,.studio-criteria,.studio-runbar,.studio-results,.studio-sentence-editor,.studio-instant){border-color:var(--db-line);background:var(--db-paper);box-shadow:none}
body.beta-ui-route :is(.btn,.input,button,select,textarea){border-radius:6px}
body.beta-ui-route :is(.btn,.input,select,textarea){min-height:44px}

body.beta-ui-route .view-intro{max-width:72ch;line-height:1.65}
body.beta-ui-route :is(.mono,.watch-table td,.instant-row,.perf-card){font-variant-numeric:tabular-nums}
body.beta-ui-route :is(.stock-brief-summary,.evidence-analysis-card>h2,.creator-page-visual>h3){font-family:var(--db-reading);font-weight:520;letter-spacing:-.015em}

body.beta-ui-route .app-nav{background:var(--db-nav);border-color:color-mix(in srgb,#fff 15%,var(--db-nav));box-shadow:none}
body.beta-ui-route .app-nav>a{color:#d9e7df;background:transparent;border-radius:6px;box-shadow:none}
body.beta-ui-route .app-nav>a:hover{color:#fff;background:var(--db-nav-hover)}
body.beta-ui-route .app-nav>a.on{color:#173f32;background:#d8efc7;box-shadow:none}
body.beta-ui-route .app-nav>a.on::before{background:var(--db-duck)}
body.beta-ui-route .app-nav>a.on>.app-icon{color:#173f32}

/* Today: one calm editorial summary above a dense, readable change ledger. */
body.beta-ui-route .focus-today{max-width:1240px}
body.beta-ui-route .today-heading{padding:8px 0 22px;margin-bottom:20px;border-bottom-color:var(--db-line)}
body.beta-ui-route .today-heading .today-date{color:var(--db-accent-strong)}
body.beta-ui-route .today-macro-tile{border-radius:10px;background:var(--db-paper)}
body.beta-ui-route .change-card{border-radius:10px}
body.beta-ui-route .change-card[open]{border-color:var(--db-accent)}
body.beta-ui-route .change-kind{border-radius:999px}

/* Explore and Calendar use the same connected tab grammar and paper surfaces. */
body.beta-ui-route .focus-explore{max-width:1280px}
body.beta-ui-route .explore-primary-tools{grid-template-columns:repeat(3,minmax(0,1fr));border-radius:10px;background:var(--db-paper);overflow:hidden}
body.beta-ui-route .explore-primary-tools>a{min-height:64px;background:transparent}
body.beta-ui-route .explore-primary-tools>a[aria-current=page]{background:var(--db-accent-soft);color:var(--db-accent-strong);border-bottom-color:var(--db-accent)}
body.beta-ui-route .radar-activity-workspace .radar-categories .radar-category{min-height:72px}
body.beta-ui-route .radar-activity-section-head h2{font-family:inherit;font-weight:720;letter-spacing:-.015em}
body.beta-ui-route .explore-stock-list{gap:8px}
body.beta-ui-route .calendar-view{max-width:none;padding:20px 24px;border-radius:16px;background:var(--db-paper)}
body.beta-ui-route .cal-modebar{border-radius:8px;background:var(--db-canvas)}
body.beta-ui-route .cal-mode.on{background:var(--db-accent-soft);color:var(--db-accent-strong);box-shadow:none}
body.beta-ui-route :is(.cal-cell,.cal-bicell,.cal-ev){border-radius:8px;background:var(--db-paper-strong)}

/* Finance Opinion Leaders: one ranked workspace, clear stance lanes, no decorative dashboard chrome. */
body.beta-ui-route .creators-view{max-width:1440px;margin-inline:auto}
body.beta-ui-route .creator-board{gap:16px}
body.beta-ui-route .cboard-layout{gap:16px}
body.beta-ui-route .cboard-controls{padding:12px;border:1px solid var(--db-line);border-radius:10px;background:var(--db-paper)}
body.beta-ui-route :is(.cboard-rank-row,.cboard-latest-row){border-radius:8px}
body.beta-ui-route .cboard-follow{background:var(--db-accent-strong);border-color:var(--db-accent-strong);color:#fff}
body.beta-ui-route .cboard-follow.is-on{background:transparent;color:var(--db-ink);border-color:var(--db-line-strong)}

/* Alerts and simulations share the Storybook sentence-first system. */
body.beta-ui-route .alert-feed{max-width:1120px;margin-inline:auto}
body.beta-ui-route .alert-feed:has(.rule-studio){max-width:none}
body.beta-ui-route .alert-tabs{display:inline-flex;gap:0;padding:3px;border:1px solid var(--db-line);border-radius:9px;background:var(--db-paper)}
body.beta-ui-route .alert-tabs button{min-height:44px;border:0;border-radius:6px;background:transparent}
body.beta-ui-route .alert-tabs button[aria-selected=true]{background:var(--db-accent-strong);color:#fff}
body.beta-ui-route .alert-item{border-radius:10px}
body.beta-ui-route .alert-item::before{border-radius:0 3px 3px 0}
body.beta-ui-route .rule-studio{gap:16px}
body.beta-ui-route .studio-head{position:relative;box-sizing:border-box;width:100%;min-width:0;min-height:128px;align-items:center;overflow:hidden;padding:14px 18px;border:1px solid var(--db-line);border-radius:16px;background:var(--db-paper);isolation:isolate}
body.beta-ui-route .studio-head::after{content:'';position:absolute;z-index:-1;left:78px;bottom:-98px;width:220px;height:220px;border:28px solid var(--db-duck);border-radius:50%;opacity:.12}
body.beta-ui-route .studio-head-title{display:grid;grid-template-columns:104px minmax(0,1fr);gap:14px;align-items:center;flex:1 1 420px;min-width:0}
body.beta-ui-route .studio-head-title>div{min-width:0}
body.beta-ui-route .studio-head>.studio-actions{flex:0 0 auto;max-width:100%;justify-content:flex-end}
body.beta-ui-route .ducky-motion{display:block;pointer-events:none;user-select:none}
body.beta-ui-route .ducky-motion img{display:block;width:100%;height:auto;object-fit:contain}
body.beta-ui-route .studio-duck-motion{width:104px;align-self:end;margin:-9px 0 -24px}
body.beta-ui-route .studio-head-note{max-width:54ch;margin:5px 0 0;color:var(--db-muted);font-size:13px;line-height:1.45}

body.beta-ui-route .rule-studio.studio-sentence-first .studio-head h2{font-family:inherit;font-size:clamp(22px,2vw,28px);font-weight:720;letter-spacing:-.025em;line-height:1.12}
body.lang-zh.beta-ui-route .rule-studio.studio-sentence-first .studio-head h2{font-family:inherit;font-weight:720;letter-spacing:-.02em}
body.beta-ui-route .studio-head [data-studio-undo]:disabled{display:none}

body.beta-ui-route .studio-sentence-layout{grid-template-columns:minmax(360px,5fr) minmax(440px,6fr);gap:16px}
body.beta-ui-route :is(.studio-sentence-editor,.studio-sentence-first .studio-instant){padding:16px;border-radius:10px}
body.beta-ui-route .studio-pills{padding:4px 0 8px}

body.beta-ui-route .studio-sheet{border-radius:10px;background:var(--db-canvas)}
body.beta-ui-route .studio-sheet-stack{border-color:var(--db-line);border-radius:10px;background:var(--db-canvas)}
body.beta-ui-route .studio-sheet-stack>.studio-sheet-inline{background:transparent}
body.beta-ui-route .studio-sheet-stack>.studio-sheet-inline.is-active{background:color-mix(in srgb,var(--db-accent-soft) 36%,transparent);box-shadow:inset 0 0 0 1px var(--db-accent)}
body.beta-ui-route .studio-sheet .studio-scalar{display:grid;grid-template-columns:minmax(0,1fr)}
body.beta-ui-route .studio-sheet .studio-scalar-top{grid-row:1;grid-column:1}
body.beta-ui-route .studio-sheet .studio-exact{width:70px;font-family:inherit;font-variant-numeric:tabular-nums lining-nums}
body.beta-ui-route .studio-sheet .studio-sheet-presets{grid-row:2;grid-column:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin:4px 0 0;align-items:stretch}
body.beta-ui-route .studio-sheet .studio-sheet-presets>.studio-fine{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
body.beta-ui-route .studio-sheet .studio-sheet-presets>.studio-preset{position:static;min-width:0;min-height:44px;padding:4px;border:1px solid var(--db-line);border-radius:6px;background:transparent;color:var(--db-muted);font:inherit;font-size:11px;line-height:1.3;white-space:normal;overflow-wrap:anywhere;text-align:center}
body.beta-ui-route .studio-sheet .studio-sheet-presets>.studio-preset[aria-pressed=true]{color:var(--db-accent-strong)}
body.beta-ui-route .studio-sheet .studio-range-lane{grid-row:3;grid-column:1;min-height:44px}
body.beta-ui-route .studio-sheet .studio-range-hints{grid-row:4;grid-column:1;margin-top:-3px}
body.beta-ui-route .studio-sheet .studio-field-error{grid-row:5;grid-column:1}
/* An implicit auto grid track previously expanded to the longest method/label,
   then overflow:clip hid the right half of the controls on phones. */
body.beta-ui-route .studio-sheet-stack{grid-template-columns:minmax(0,1fr)}
body.beta-ui-route .studio-sheet-stack>.studio-sheet-inline{min-width:0;max-width:100%}
body.beta-ui-route .studio-sheet .studio-scalar-top{flex-wrap:wrap}
body.beta-ui-route .studio-exact{scroll-margin-block:80px}
body.beta-ui-route .studio-sheet .studio-scalar-top>label{white-space:normal;overflow:visible}
body.beta-ui-route .studio-scalar[data-input-only=true] .studio-scalar-top{display:grid;grid-template-columns:minmax(0,1fr);gap:6px}
body.beta-ui-route .studio-scalar[data-input-only=true] .studio-exact-box{width:100%;min-width:0}
body.beta-ui-route .studio-scalar[data-input-only=true] .studio-exact{width:100%;min-width:0;box-sizing:border-box;text-align:left}
body.beta-ui-route .studio-range::-webkit-slider-runnable-track{height:4px;background:var(--db-line-strong)}
body.beta-ui-route .studio-range::-webkit-slider-thumb{width:18px;height:18px;margin-top:-7px;border:2px solid var(--db-paper);background:var(--db-accent-strong);box-shadow:0 0 0 1px var(--db-accent-strong)}
body.beta-ui-route .studio-range::-moz-range-track{height:4px;background:var(--db-line-strong)}
body.beta-ui-route .studio-range::-moz-range-thumb{width:16px;height:16px;border:2px solid var(--db-paper);background:var(--db-accent-strong);box-shadow:0 0 0 1px var(--db-accent-strong)}
body.beta-ui-route .studio-instant{box-shadow:var(--db-shadow)}
body.beta-ui-route .instant-row{border-radius:6px;background:var(--db-canvas)}
body.beta-ui-route .perf-card{border-radius:10px;background:var(--db-paper)}
body.beta-ui-route .rule-studio[data-studio-view=expert] .studio-advanced{margin-top:8px;border-top:1px solid var(--db-line)}
body.beta-ui-route .rule-studio[data-studio-view=expert] .studio-advanced[open]{font-family:inherit;font-size:13px;line-height:1.55}
body.beta-ui-route .rule-studio[data-studio-view=expert] :is(.studio-explanation,.studio-node-head h3,.studio-field-chip.btn){font-family:inherit;font-size:13px;line-height:1.55}
body.beta-ui-route .rule-studio[data-studio-view=expert] .studio-explanation{font-weight:500}
body.beta-ui-route .rule-studio[data-studio-view=expert] :is(.studio-criteria,.studio-runbar,.studio-results){margin-top:0}

/* The established navy/mint/orange Watchlist table remains the deliberate high-density exception. */
body.beta-ui-route .watchlist-beta .watch-modes{border-radius:10px;background:var(--db-paper)}

/* Contextual motion stays small on data pages; it decorates a state without replacing information. */
body.beta-ui-route .watchlist-beta>.view-head{position:relative;min-height:86px;padding-left:92px}
.ducky-motion.context-duck-motion{display:none}
body.beta-ui-route .context-duck-motion{position:absolute}
body.beta-ui-route .context-duck-motion img{width:100%;height:100%}
body.beta-ui-route .watchlist-beta>.view-head>.context-duck-motion{left:0;top:-8px;width:82px;height:92px}
body.beta-ui-route .explore-page-heading{position:relative;box-sizing:border-box;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 12px;min-height:96px;margin:0 0 4px;padding:10px 106px 10px 0;overflow:visible}
body.beta-ui-route .explore-page-heading>div{min-width:0}
body.beta-ui-route .explore-page-heading h1{margin:0}
body.beta-ui-route .explore-page-heading p{margin:4px 0 0}
body.beta-ui-route .explore-page-heading>.btn{grid-column:2}
body.beta-ui-route .explore-page-heading>.context-duck-motion{right:6px;top:50%;width:84px;height:88px;translate:0 -50%}
body.beta-ui-route .cboard-rail-box{position:relative;padding-top:92px}
body.beta-ui-route .cboard-rail-box .context-duck-motion{left:50%;top:0;width:112px;height:96px;translate:-50% 0}

@media(min-width:1100px){
 body.beta-ui-route .app-shell{display:grid;grid-template-columns:208px minmax(0,1fr);grid-template-rows:64px minmax(0,1fr)}
 body.beta-ui-route .app-top{grid-column:1/-1;grid-row:1;order:0}
 body.beta-ui-route .app-nav{grid-column:1;grid-row:2;order:0;align-self:stretch;display:flex;flex-direction:column;gap:4px;margin:0;padding:18px 12px;border:0;border-right:1px solid color-mix(in srgb,#fff 15%,var(--db-nav));border-radius:0;max-width:none;overflow-y:auto}
 body.beta-ui-route .app-nav>a{display:flex;flex-direction:row;justify-content:flex-start;gap:11px;min-height:48px;padding:10px 12px;font-size:14px}
 body.beta-ui-route .app-nav>a.on{position:relative}
 body.beta-ui-route .app-nav>a.on::before{content:'';position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:3px}
 body.beta-ui-route .app-main{grid-column:2;grid-row:2;min-width:0;--workspace-inset:24px;padding:var(--workspace-inset) 28px 40px}
 :is(body.beta-ui-route:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]),html[data-visitor] body:not([data-route])) .app-main{grid-column:1/-1}
}

@media(max-width:1099px){
 body.beta-ui-route .app-nav{order:-1;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;padding:6px 8px;border:0;border-bottom:1px solid color-mix(in srgb,#fff 15%,var(--db-nav));border-radius:0;margin:0;max-width:none}
 body.beta-ui-route .app-top{order:-2}
 body.beta-ui-route .app-nav>a{min-height:50px;padding:6px 4px;font-size:11px}
 body.beta-ui-route .app-main{padding-inline:16px}
 body.beta-ui-route .studio-sentence-layout{grid-template-columns:minmax(0,1fr)}
 body.beta-ui-route .studio-sentence-first .studio-instant{grid-column:1;grid-row:auto;position:static;max-height:none;overflow:visible;box-shadow:none}
 body.beta-ui-route .studio-sentence-first .studio-advanced{grid-column:1}
}

@media(min-width:1100px) and (max-width:1420px){
 body.beta-ui-route .studio-head{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px}
 body.beta-ui-route .studio-head-title{width:100%}
}

@media(max-width:620px){
 body.beta-ui-route .app-top{min-height:56px;padding-inline:12px}
 body.beta-ui-route .app-top .avatar-mark{width:30px;height:30px}
 body.beta-ui-route .app-top .brand{font-size:14px}
 body.beta-ui-route .app-top #logout{display:none}
 body.beta-ui-route .app-main{--workspace-inset:12px;padding:var(--workspace-inset) 12px 28px}
 body.beta-ui-route .explore-primary-tools>a,body.beta-ui-route .radar-activity-workspace .radar-categories .radar-category{min-height:44px}
 body.beta-ui-route .calendar-view{padding:14px 12px}
 body.beta-ui-route .studio-head{min-height:104px;padding:10px 12px}
 body.beta-ui-route .studio-head-title{grid-template-columns:76px minmax(0,1fr);gap:8px;flex-basis:100%}
 body.beta-ui-route .studio-duck-motion{width:76px;margin:-5px 0 -18px}
 body.beta-ui-route .studio-head-note{font-size:11px}
 body.beta-ui-route .rule-studio.studio-sentence-first .studio-head h2{font-size:22px}
 body.beta-ui-route .explore-page-heading{min-height:76px;padding:6px 72px 6px 0}
 body.beta-ui-route .explore-page-heading>.context-duck-motion{right:2px;width:62px;height:68px}
 body.beta-ui-route :is(.studio-sentence-editor,.studio-sentence-first .studio-instant){padding:12px}
 body.beta-ui-route .alert-tabs{width:100%;display:grid;grid-template-columns:1fr 1fr}
 body.beta-ui-route .alert-tabs button{min-height:40px;padding:6px 9px;font-size:13px}
 body.beta-ui-route .rule-studio{gap:10px}
 body.beta-ui-route .studio-sheet-stack{margin-top:6px}
 body.beta-ui-route .studio-sheet-stack>.studio-sheet-inline{padding:7px 8px 8px}
 body.beta-ui-route .studio-sheet-details{display:grid;grid-template-columns:minmax(0,1fr) 44px;align-items:center;gap:3px 5px;min-height:44px}
 body.beta-ui-route .studio-sheet-details>.studio-sheet-head{grid-column:1;grid-row:1;min-width:0;margin:0}
 body.beta-ui-route .studio-sheet-title-wrap{display:block;min-width:0;white-space:normal;overflow-wrap:anywhere}
 body.beta-ui-route .studio-sheet-title{white-space:normal}
 
 body.beta-ui-route .studio-sheet-details>.studio-rsi-period{grid-column:1/-1;grid-row:2}
 body.beta-ui-route .studio-rsi-period .studio-sheet-row{margin:0}
 body.beta-ui-route .studio-rsi-period .studio-choice.btn{position:relative;min-width:38px;min-height:44px;padding:0 8px;border:0;background:transparent;font-size:12px;isolation:isolate}
 body.beta-ui-route .studio-rsi-period .studio-choice.btn::before{content:'';position:absolute;z-index:-1;inset:5px 0;border:1px solid var(--db-line-strong);background:var(--db-paper)}
 body.beta-ui-route .studio-rsi-period .studio-choice.btn[aria-pressed=true]::before{border-color:var(--db-accent);background:var(--db-accent-soft)}
 body.beta-ui-route .studio-rsi-period .studio-choice.btn:first-child::before{border-radius:7px 0 0 7px}
 body.beta-ui-route .studio-rsi-period .studio-choice.btn:last-child::before{border-radius:0 7px 7px 0}
 body.beta-ui-route .studio-sheet-details>.studio-sheet-actions{grid-column:2;grid-row:1}
 body.beta-ui-route .studio-sheet-details .studio-sheet-actions>.btn{position:relative;width:44px;min-width:44px;min-height:44px;padding:0;border:0;background:transparent;font-size:0}
 body.beta-ui-route .studio-sheet-details .studio-sheet-actions>.btn::before{content:'\00d7';position:absolute;inset:5px;display:grid;place-items:center;border:1px solid var(--db-line-strong);border-radius:7px;color:var(--db-danger,#b84f46);font-size:18px;line-height:1}
 body.beta-ui-route .studio-sheet-fields{grid-template-columns:minmax(0,1fr);gap:4px}
 body.beta-ui-route .studio-sheet .studio-scalar{margin-top:3px}
 body.beta-ui-route .studio-sheet .studio-scalar-top>label{font-size:12px;white-space:normal;overflow:visible}
 body.beta-ui-route .studio-sheet .studio-exact{width:62px;min-height:38px;padding:5px 7px;border-radius:7px;font-size:16px}
 body.beta-ui-route .studio-sheet .studio-exact-box{gap:4px}
 body.beta-ui-route .studio-sheet .studio-exact-box>span{font-size:11px}
 body.beta-ui-route .studio-sheet .studio-sheet-presets{height:auto;margin:4px 0 0}
 body.beta-ui-route .studio-sheet .studio-sheet-presets>.studio-preset{min-height:44px}
 body.beta-ui-route .studio-sheet .studio-range-lane{min-height:44px}
 body.beta-ui-route .studio-sheet .studio-range{height:44px}
 body.beta-ui-route .studio-sheet .studio-range::-webkit-slider-thumb{width:18px;height:18px;margin-top:-7px;border-width:2px}
 body.beta-ui-route .studio-sheet .studio-range::-moz-range-thumb{width:16px;height:16px}
 body.beta-ui-route .studio-sheet .studio-range-hints{font-size:10px}
 body.beta-ui-route .watchlist-beta>.view-head{min-height:70px;padding-left:64px}
 body.beta-ui-route .watchlist-beta>.view-head>.context-duck-motion{top:0;width:58px;height:66px}
 body.beta-ui-route .cboard-rail-box{padding-top:72px}
 body.beta-ui-route .cboard-rail-box .context-duck-motion{width:82px;height:72px}
}

@media(max-width:390px){
 body.beta-ui-route .app-top .brand{font-size:0}
 body.beta-ui-route .app-top .brand .avatar-mark{width:32px;height:32px}
 body.beta-ui-route .app-top .lang-toggle{padding-inline:8px}
 body.beta-ui-route .app-nav>a{font-size:10px;gap:3px}
 body.beta-ui-route .app-nav .app-icon{width:18px;height:18px}
}

@media(max-width:480px){
 body.beta-ui-route .app-nav>a[data-route=creators] span{font-size:0}
 body.beta-ui-route .app-nav>a[data-route=creators] span::after{content:attr(data-compact-label);font-size:10px}
}

@media(prefers-reduced-motion:reduce){
 body.beta-ui-route *,body.beta-ui-route *::before,body.beta-ui-route *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
@media(forced-colors:active){body.beta-ui-route .app-nav>a.on{outline:2px solid Highlight}}

/* app-research-map.css */
/* Production counterpart of Concepts / Research Map Cards. Existing workspace tokens only. */
.research-map{min-width:0;font-family:inherit;color:var(--text);--map-context:var(--db-focus,var(--accent));}
.research-map-summary{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:12px}
.research-map-summary .evidence-price{position:static;display:flex;align-items:baseline;gap:8px}
.research-map-summary .evidence-price strong{font-size:22px}
.research-map-summary p{margin:0;font-size:12px;flex:1;min-width:200px}
.research-map-toolbar{display:flex;gap:8px;align-items:center;margin:12px 0}
.research-map-toolbar input{flex:1;min-width:0;max-width:520px;font-size:16px}
.research-map-toolbar select{width:auto;max-width:180px;font:inherit;font-size:14px}
.research-map-toolbar>button{margin-left:auto;white-space:nowrap}
.research-map-directions{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.research-map-directions button{display:flex;align-items:center;gap:8px;min-height:44px}
.research-map-directions button[aria-pressed=true]{background:var(--surface-2);border-color:var(--accent)}
.research-map-count{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--muted);margin-left:8px}
.research-map-lanes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
.research-map-lane{--lane:var(--green);--lane-paper:var(--db-positive-soft,color-mix(in srgb,var(--lane) 16%,var(--surface)));min-width:0;border-top:2px solid var(--lane)}
.research-map-lane.is-context{--lane:var(--map-context);--lane-paper:var(--db-context-soft,color-mix(in srgb,var(--lane) 16%,var(--surface)))}
.research-map-lane.is-counter{--lane:var(--red);--lane-paper:var(--db-negative-soft,color-mix(in srgb,var(--lane) 16%,var(--surface)))}
.research-map-lane[hidden]{display:none}
.research-map-lanes:has(>.research-map-lane[hidden]){grid-template-columns:minmax(0,1fr)}
.research-map-lane-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:88px}
.research-map-lane-heading h3{margin:0 0 4px;font-size:18px;font-weight:700;line-height:1.4;color:var(--lane)}
.research-map-lane-heading p{margin:0;font-size:12px;color:var(--muted)}
.research-map-lane-heading .ducky-motion{width:80px;height:80px;flex:0 0 80px;overflow:visible}
.research-map-lane-heading .ducky-motion img{width:100%;height:100%;object-fit:contain}
/* A lane with creator views says once that they are opinions, not verified facts. */
.research-map-note{margin:0 0 12px;font-size:12px;color:var(--muted)}
.research-map-note[hidden]{display:none}
.research-map-stack{display:grid;gap:12px}
.research-card{min-width:0;border:1px solid color-mix(in srgb,var(--lane) 30%,var(--border));border-radius:10px;background:var(--lane-paper);overflow:hidden}
.research-card:hover,.research-card:focus-within{border-color:var(--lane)}
.research-card-open{display:flex;flex-direction:column;gap:10px;text-align:left;width:100%;padding:16px;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:inherit;min-height:44px}
.research-card-open:focus-visible{outline-offset:-3px}
.research-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;width:100%;font-size:11px;color:var(--muted)}
.research-card-meta time{margin-left:auto;text-align:right}
.research-card-stance{padding:0 6px;border:1px solid color-mix(in srgb,var(--lane) 50%,var(--border));border-radius:999px;color:var(--lane);font-weight:600;white-space:nowrap}
a.research-card-open{text-decoration:none}
.research-card-identity{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.research-card-identity .ticker-symbol{font-family:inherit;font-size:18px;line-height:1.5}
.research-card-identity small{color:var(--muted);font-size:11px}
.research-card-title{font-size:14px;line-height:1.5;overflow-wrap:anywhere}
.research-card-figures{font-size:13px;line-height:1.5;color:var(--muted);font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere}
.research-card-claim{font-size:14px;line-height:1.65;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.research-card-condition,.research-card-caveat{font-size:12px;line-height:1.5;color:var(--muted);overflow-wrap:anywhere}
.research-card-condition{border-left:2px solid var(--lane);padding-left:8px}
.research-card-footer{display:flex;justify-content:space-between;align-items:center;gap:8px;border-top:1px solid var(--border);padding-top:10px;width:100%;font-size:11px;line-height:1.5;color:var(--muted)}
.research-card-footer>span{overflow-wrap:anywhere;min-width:0}.research-card-footer>span:last-child{white-space:nowrap;color:var(--accent)}
.research-map-lane>.btn{width:100%;margin-top:12px}
.research-map-position{font-size:12px;color:var(--muted);text-align:center;margin:8px 0}
.research-map-empty{padding:24px 12px;border:1px dashed var(--border);border-radius:10px;font-size:13px;color:var(--muted)}
.research-map-coverage{border-top:1px solid var(--border);margin-top:16px;padding-top:8px;font-size:12px;color:var(--muted)}
.research-map-coverage summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
.research-map-coverage summary::before{content:'▸';margin-right:8px}.research-map-coverage[open] summary::before{content:'▾'}
/* Merged cards and 更多事实 (2026-10-24): a card that repeats says since when, each record reachable; folded facts. */
.research-map-filter-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}
.research-map-filter-row .research-map-directions{margin:0}
.research-map-more-facts{display:flex;align-items:center;margin-left:auto;min-height:44px}
.research-map-more-facts[aria-pressed=true]{background:var(--surface-2);border-color:var(--accent)}
.research-map-folded{display:flex;margin:8px auto 0;min-height:44px;color:var(--muted);text-align:center;white-space:normal}
.research-card-repeat{padding:0 6px;border:1px solid color-mix(in srgb,var(--lane) 40%,var(--border));border-radius:999px;color:var(--text);white-space:nowrap}
.research-card-occurrences{border-top:1px solid var(--border);padding:0 16px 8px;font-size:12px;color:var(--muted)}
.research-card-occurrences summary{min-height:44px;display:flex;align-items:center;cursor:pointer;color:var(--accent)}
.research-card-occurrences ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.research-card-occurrence{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 8px;width:100%;min-height:44px;padding:6px 0;border:0;border-top:1px dashed var(--border);background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}
.research-card-occurrence time{white-space:nowrap}
.research-card-occurrence-title{grid-column:1/-1;color:var(--text);overflow-wrap:anywhere}
@media(max-width:760px){
 .research-map-summary{gap:8px;margin-bottom:8px}.research-map-summary .evidence-price strong{font-size:18px}.research-map-summary p{font-size:11px}
 .research-map-toolbar{flex-wrap:wrap;gap:6px;margin:8px 0}.research-map-toolbar input{flex-basis:100%;max-width:none}
 .research-map-toolbar select{flex:1;max-width:50%;font-size:16px}.research-map-toolbar>.btn{font-size:12px}
 .research-map-directions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin:8px 0}
 .research-map-filter-row{display:grid;gap:4px;margin:8px 0}.research-map-filter-row .research-map-directions{margin:0}
 .research-map-more-facts{justify-content:center;width:100%;margin:0;font-size:12px}
 .research-map-directions button{justify-content:center;padding:6px 4px;font-size:12px;gap:4px}.research-map-count{margin-left:4px}
 .research-map-lanes{display:block}.research-map-lane-heading{min-height:64px}.research-map-lane-heading .ducky-motion{width:60px;height:60px;flex-basis:60px}
 .research-map-note{margin-bottom:8px}.research-card-open{padding:12px}
}

/* filter-controls.css */
/* Shared with Storybook: UI typography, explicit selected states, native keyboard range. */
.db-filter-choice,.db-cap-control{min-width:0;color:var(--db-ink,var(--text));font:inherit}
.db-filter-choice [hidden],.db-cap-control [hidden]{display:none!important}
.db-filter-options{display:flex;flex-wrap:wrap;gap:6px}
.db-filter-options>button{font:inherit;font-size:14px;font-weight:550;line-height:1.4;min-height:44px;padding:8px 12px;white-space:normal;text-align:left;cursor:pointer;border:1px solid var(--control-border,var(--border));border-radius:6px;background:var(--db-paper,var(--surface));color:inherit}
.db-filter-options>button[aria-pressed=true]{background:var(--db-accent-soft,var(--surface-2));border-color:var(--db-accent,var(--accent));color:var(--db-accent-strong,var(--text));font-weight:750}
.db-filter-options>button:focus-visible,.db-cap-range>input:focus-visible{outline:3px solid var(--db-focus,var(--accent));outline-offset:3px}
.db-cap-range{display:grid;gap:8px;margin-top:12px}
.db-cap-range>output{font-size:14px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.5}
.db-cap-range>input{appearance:none;width:100%;min-width:0;height:44px;margin:0;background:transparent;cursor:pointer;accent-color:var(--db-accent,var(--accent))}
.db-cap-range>input::-webkit-slider-runnable-track{height:4px;border-radius:2px;background:var(--db-line-strong,var(--border))}
.db-cap-range>input::-webkit-slider-thumb{appearance:none;width:18px;height:18px;margin-top:-7px;border:2px solid var(--db-paper,var(--surface));border-radius:50%;background:var(--db-accent,var(--accent));box-shadow:0 0 0 1px var(--db-accent,var(--accent))}
.db-cap-range>input::-moz-range-track{height:4px;border-radius:2px;background:var(--db-line-strong,var(--border))}
.db-cap-range>input::-moz-range-thumb{width:16px;height:16px;border:2px solid var(--db-paper,var(--surface));border-radius:50%;background:var(--db-accent,var(--accent))}
.db-range-ends{display:flex;justify-content:space-between;gap:12px;font-size:12px;line-height:1.45;color:var(--db-muted,var(--muted))}
.db-range-ends>span:last-child{text-align:right}

/* One full-width toolbar at every breakpoint, not the old insider split layout. */
body.page-app .radar-activity-workspace .radar-toolbar{display:block;margin:10px 0}
body.page-app .radar-activity-workspace .insider-quick[hidden]{display:none}
body.page-app .radar-activity-workspace .radar-tabs button{border-radius:0;box-shadow:none;padding:10px 2px;line-height:1.4;font:inherit;font-size:14px;font-weight:650}
body.page-app .radar-activity-workspace .radar-scope-bar{align-items:center}
body.page-app .radar-activity-workspace .radar-filter-actions [type=submit]{display:inline-flex}
body.page-app .radar-activity-workspace .disclosure-filters,.disclosure-filters{
 display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,180px) auto auto;align-items:end;gap:12px;
 padding:16px;margin:0;background:var(--db-paper,var(--surface));border:1px solid var(--db-line,var(--border));border-radius:10px;
 color:var(--db-ink,var(--text));font-family:Manrope,-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Noto Sans SC','Microsoft YaHei',sans-serif;font-size:14px;line-height:1.5
}
.disclosure-filters .radar-field{display:grid;gap:8px;min-width:0;margin:0}
.disclosure-filters .radar-field>label{font-size:13px;font-weight:650;color:var(--db-muted,var(--muted))}
.disclosure-filters>.radar-field>label{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden}
.disclosure-filters .radar-field .input{width:100%;min-width:0;box-sizing:border-box;font:inherit;font-size:16px;min-height:44px;padding:10px 12px;background:var(--db-paper,var(--surface));color:inherit;border:1px solid var(--db-line-strong,var(--border));border-radius:6px}
.disclosure-filters .radar-field [hidden]{display:none!important}
.disclosure-filters .radar-filter-toggle{display:block;min-height:44px;padding:8px 12px;background:transparent;border:1px solid var(--db-line-strong,var(--border));border-radius:6px;color:inherit;font:inherit;font-weight:650;cursor:pointer}
.disclosure-filters .radar-filter-toggle[aria-expanded=true]{background:var(--db-accent-soft,var(--surface-2));border-color:var(--db-accent,var(--accent))}
.disclosure-filters .radar-extra{display:none}
body.page-app .radar-activity-workspace .disclosure-filters.filters-expanded .radar-extra,.disclosure-filters.filters-expanded .radar-extra{
 display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 28px;grid-column:1/-1;order:3;padding-top:16px;border-top:1px solid var(--db-line,var(--border));align-items:start
}
.disclosure-filters .radar-extra>.radar-field:first-child{grid-column:auto}
.disclosure-filters .radar-dates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;grid-column:1/-1}
.disclosure-filters [hidden]{display:none!important}
body.page-app .radar-activity-workspace .disclosure-filters .radar-filter-actions{display:flex;gap:8px;grid-column:auto;grid-row:auto;order:0}
body.page-app .radar-activity-workspace .disclosure-filters :is(button,input,select){font-family:inherit}
body.page-app .radar-activity-workspace .disclosure-filters .btn{font-size:14px;min-height:44px}
@media(max-width:720px){
 body.page-app .radar-activity-workspace .disclosure-filters,.disclosure-filters{grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:12px}
 body.page-app .radar-activity-workspace .disclosure-filters>.radar-field:first-child{grid-column:1/-1}
 body.page-app .radar-activity-workspace .disclosure-filters:not(.filters-expanded)>.radar-field:nth-child(2){display:grid}
 body.page-app .radar-activity-workspace .disclosure-filters>.radar-filter-toggle{grid-column:2;grid-row:2}
 body.page-app .radar-activity-workspace .disclosure-filters .radar-filter-actions{display:flex;grid-column:1/-1;justify-content:flex-end;order:4}
 body.page-app .radar-activity-workspace .disclosure-filters.filters-expanded .radar-extra,.disclosure-filters.filters-expanded .radar-extra{grid-template-columns:minmax(0,1fr);gap:16px}
 .disclosure-filters .db-filter-options>button{flex:1 1 auto;text-align:center}
}

/* Explore on a phone (≤ 600 px, owner 2026-10-25): the destinations are one row that scrolls sideways; the categories are
   one row of chips that scrolls sideways (全部动态 last) and the one local row that sticks; the scope, search and filters
   become one summary bar — the choices in words and Filters, which opens the same scope tabs and form in a bottom sheet
   (.radar-sheet). The status line, the records and everything below them stay as they are. */
.radar-phonebar{display:none}
@media(max-width:600px){
 body.page-app .explore-primary-tools{display:flex;flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
 body.page-app .explore-primary-tools::-webkit-scrollbar{display:none}
 body.page-app .explore-primary-tools>a{flex:1 0 auto;justify-content:center;padding-inline:14px;white-space:nowrap}
 body.page-app .radar-activity-workspace .radar-sidebar{margin:0 0 6px;padding:2px 0}
 body.page-app .radar-activity-workspace .radar-sidebar:not(.categories-open) .radar-categories{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;border:0;border-radius:0}
 body.page-app .radar-activity-workspace .radar-sidebar .radar-categories::-webkit-scrollbar{display:none}
 body.page-app .radar-activity-workspace .radar-sidebar .radar-categories .radar-category{flex:0 0 auto;min-height:44px;padding:0 14px;border:1px solid var(--control-border,var(--db-line-strong));border-radius:999px;
  background:var(--db-paper,var(--surface));color:var(--db-ink,var(--text));font-size:13px;font-weight:600;white-space:nowrap}
 body.page-app .radar-activity-workspace .radar-sidebar .radar-categories .radar-category[aria-pressed=true]{border-color:var(--db-accent,var(--accent));background:var(--db-accent-soft,var(--surface-2));color:var(--db-accent-strong,var(--text))}
 body.page-app .radar-activity-workspace .radar-sidebar .radar-categories .radar-category[aria-pressed=true] strong{color:inherit}
 body.page-app .radar-activity-workspace .radar-sidebar .radar-category-copy>strong{font-size:13px;font-weight:inherit}
 body.page-app .radar-activity-workspace .radar-main>:is(.radar-scope-bar,.radar-toolbar,.insider-active-filters),
 body.page-app .radar-activity-workspace .radar-ticker-scope{display:none}
 body.page-app .radar-activity-workspace .radar-phonebar{display:flex;align-items:center;gap:10px;margin:2px 0 8px}
 body.page-app .radar-activity-workspace .radar-phone-summary{flex:1 1 auto;min-width:0;margin:0;font-size:13px;line-height:18px;font-weight:600;color:var(--db-ink,var(--text))}
 body.page-app .radar-activity-workspace .radar-phone-summary>span{white-space:nowrap}
 body.page-app .radar-activity-workspace .radar-filters-open{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:6px 14px 6px 12px;
  border:1px solid var(--control-border,var(--db-line-strong));border-radius:999px;background:var(--db-paper,var(--surface));color:var(--db-ink,var(--text));font:inherit;font-size:13px;font-weight:650;white-space:nowrap;cursor:pointer}
 body.page-app .radar-activity-workspace .radar-filters-open:hover{border-color:var(--db-accent,var(--accent))}
 body.page-app .radar-activity-workspace .radar-filters-open .app-icon{width:18px;height:18px}
}
/* The Filters sheet: 记录范围 as one segmented row, the keyword and ticker fields with their labels, Apply (which closes
   the sheet) and Reset beside them as on the page, then every filter (the form is expanded while it sits here, so no More
   filters toggle). The form becomes one column: a flex column, so the page's grid placements for it do not apply. */
.radar-sheet{display:grid;gap:10px;min-width:0}
.radar-sheet button{overflow-wrap:normal}
.radar-sheet>.radar-sheet-label{margin:0;font-size:13px;font-weight:650;color:var(--db-muted,var(--muted))}
.radar-sheet>.radar-tabs{display:flex;gap:6px;margin:0 0 6px;border:0}
.radar-sheet>.radar-tabs>button{flex:1 1 0;min-height:44px;padding:8px 12px;border:1px solid var(--control-border,var(--db-line-strong));border-radius:6px;background:var(--db-paper,var(--surface));
 color:var(--db-ink,var(--text));font:inherit;font-size:14px;font-weight:550;cursor:pointer}
.radar-sheet>.radar-tabs>button[aria-pressed=true]{border-color:var(--db-accent,var(--accent));background:var(--db-accent-soft,var(--surface-2));color:var(--db-accent-strong,var(--text));font-weight:750}
body.page-app .radar-sheet>form.radar-filters{display:flex;flex-direction:column;align-items:stretch;gap:14px;margin:0;padding:0;border:0;background:none}
body.page-app .radar-sheet>form>.radar-field{display:grid}
body.page-app .radar-sheet>form>.radar-field>label{position:static;width:auto;height:auto;clip-path:none;overflow:visible}
body.page-app .radar-sheet>form>.radar-filter-toggle{display:none}
body.page-app .radar-sheet>form>.radar-extra{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;padding-top:14px;border-top:1px solid var(--db-line,var(--border))}
body.page-app .radar-sheet>form>.radar-filter-actions{display:flex;gap:8px}
body.page-app .radar-sheet>form>.radar-filter-actions>.btn{flex:1 1 0;min-height:48px;font-size:15px}
.radar-sheet .db-filter-options>button{flex:1 1 auto;text-align:center}

/* ducky-motion.css */
/* Shared by the app and Storybook. Character movement lives in offline-created
   frames, not whole-image transforms or runtime interpolation. */
.ducky-motion{display:block;pointer-events:none;user-select:none}
.ducky-motion[hidden]{display:none}
.ducky-motion img{display:block;width:100%;height:auto;object-fit:contain}
/* Repeated loading indicators fade on the compositor instead of repainting
   moving gradients over every cell. Their geometry and data behavior stay put. */
.page-app :is(.skel,.watch-skeleton-cell){animation-name:ducky-loading;animation-timing-function:ease-in-out}
@keyframes ducky-loading{0%,100%{opacity:.55}50%{opacity:1}}
html[data-motion-suspended] .page-app *,
html[data-motion-suspended] .page-app *::before,
html[data-motion-suspended] .page-app *::after{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.ducky-motion img{animation:none!important;transform:none!important}}

/* app-search.css */
/* The one search box (js/app/search-box.js) and the header's search (js/app/search-palette.js): a command palette on wide
   screens, a full-screen sheet on phones. App tokens only; both themes; 16 px input text and 44 px targets everywhere; no
   sideways page scroll at 320 px. */

/* ── the box: a field with its results under it, or (the palette) in place ─────────────────────────────────────────── */
.search-box{position:relative;flex:1;min-width:0}
.search-box>input{width:100%;box-sizing:border-box;font-size:16px}
.page-app .search-box>input{font-size:16px;min-height:44px}
.page-app .app-view:has(.search-results:not([hidden])){position:relative;z-index:1}
.add-row:has(.search-box){align-items:flex-start}
.search-results{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:40;box-sizing:border-box;padding:6px;border:1px solid var(--db-line-strong);border-radius:10px;background:var(--db-paper);color:var(--db-ink);box-shadow:var(--db-shadow);max-height:min(360px,52dvh,var(--search-available-height,360px));overflow-y:auto;overscroll-behavior:contain}
.search-results[hidden]{display:none}
.search-results-above{top:auto;bottom:calc(100% + 4px)}
.search-group+.search-group,.search-group+.search-option,.search-option+.search-group{margin-top:6px;padding-top:6px;border-top:1px solid var(--db-line)}
.search-group-title{padding:6px 10px 4px;color:var(--db-muted);font-size:12px;font-weight:650;line-height:1.3}
/* One identity column for every kind (a ticker, a creator's picture, a fund's logo, a portrait), so names line up across groups. */
.search-option{display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:44px;box-sizing:border-box;padding:6px 10px;border-radius:6px;color:var(--db-ink);cursor:pointer}
.search-option.is-extra{grid-template-columns:minmax(0,1fr)}
.search-option:hover{background:var(--db-paper-2)}
.search-option[aria-selected=true]{background:var(--db-accent-soft);box-shadow:inset 3px 0 0 var(--db-accent)}
.search-option[aria-disabled=true]{opacity:.65;cursor:default}
.search-option.is-youtube .search-name{color:var(--db-link);font-weight:600}
.search-option.is-youtube :is(.search-name,.search-detail){white-space:normal;overflow-wrap:anywhere}
.search-ticker{font-size:14px;font-weight:720;letter-spacing:.01em;overflow-wrap:anywhere}
.search-names{display:grid;gap:1px;min-width:0}
.search-name{overflow:hidden;font-size:14px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}
.search-detail,.search-quote{overflow:hidden;color:var(--db-muted);font-size:12px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}
.search-state{grid-column:2/-1;color:var(--db-muted);font-size:12px}
.search-state:empty{display:none}
.search-media{display:flex;align-items:center;justify-content:flex-start;min-width:0;min-height:28px}
.search-media .entity-avatar.is-logo{max-width:100%}
.search-media .creator-avatar,.search-media .creator-monogram{width:28px;height:28px;min-width:28px;border-radius:50%;font-size:13px}
.search-media.is-icon{color:var(--db-accent-strong);padding-left:4px}
.search-mono{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:6px;background:var(--db-paper-2);color:var(--db-ink);font-size:13px;font-weight:700}
.search-option.is-person .search-mono{border-radius:50%}
.search-tags{display:flex;flex-wrap:wrap;gap:4px}
.search-tag{display:inline-block;padding:1px 5px;border:1px solid var(--db-line);border-radius:4px;color:var(--db-muted);font-size:11px;line-height:1.5;white-space:nowrap}
.search-status{min-height:20px;margin-top:4px;color:var(--db-muted);font-size:13px;line-height:1.45}
.search-status:empty{display:none}
/* While the results are open the status line speaks to screen readers only. */
.search-box:not(.is-inline):has(> input[aria-expanded="true"])>.search-status,.search-palette .search-status[data-state=count]{position:absolute;width:1px;height:1px;min-height:0;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* The watchlist's Add buttons: a grid, one row per stock, the action in its own cell. */
.search-results.is-grid .search-option{grid-template-columns:minmax(0,1fr) minmax(64px,auto);gap:8px;padding:4px;cursor:default}
.search-select-cell{min-width:0}
.search-select{display:grid;grid-template-columns:72px minmax(0,1fr);gap:10px;align-items:center;width:100%;min-height:44px;padding:6px 4px;border:0;border-radius:6px;background:transparent;color:var(--db-ink);font:inherit;text-align:left;cursor:pointer}
.search-select:disabled{cursor:default}
.search-identity{display:grid;gap:4px;justify-items:start;min-width:0}
.search-action-cell{display:flex;flex-direction:column;align-items:center;gap:4px;max-width:145px}
.page-app .search-results .search-add,.search-add{min-width:64px;min-height:44px;padding:8px 12px;font-size:13px;white-space:normal}
.search-select:focus-visible,.search-add:focus-visible{outline:3px solid var(--db-focus);outline-offset:1px}
.search-reason,.search-action-note{color:var(--db-muted);font-size:12px;line-height:1.4;overflow-wrap:anywhere;text-align:center}
.search-blocked{background:color-mix(in srgb,var(--db-muted) 6%,transparent)}
.search-blocked .search-select{color:var(--db-muted)}
@media(max-width:560px){
 .search-option{grid-template-columns:60px minmax(0,1fr) auto;gap:8px}
 .search-results.is-grid .search-option{grid-template-columns:minmax(0,1fr) 72px;gap:5px}
 .search-select{grid-template-columns:minmax(0,1fr);gap:3px;padding:6px 4px}
 .search-identity{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
 .search-select .search-name{font-size:13px}
 .search-select .search-detail{font-size:11px}
 .search-action-cell{max-width:72px}
 .search-add{width:100%;padding:8px 4px}
 .search-reason,.search-action-note{font-size:11px}
}

/* ── the header's search: a field on wide screens, a magnifier on phones; hidden on the sign-in pages ─────────────── */
.app-top .app-search{display:inline-flex;align-items:center;gap:10px;flex:0 1 340px;min-width:0;min-height:44px;box-sizing:border-box;padding:0 10px 0 12px;border:1px solid var(--db-line);border-radius:6px;background:var(--db-canvas-2);color:var(--db-muted);font:inherit;font-size:14px;text-align:left;cursor:text}
.app-top .app-search:hover{border-color:var(--db-line-strong);color:var(--db-ink)}
.app-search>.app-icon{flex:none}
.app-search-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.app-search-key{flex:none;padding:2px 6px;border:1px solid var(--db-line);border-radius:4px;background:var(--db-paper);color:var(--db-muted);font:600 11px/1.4 var(--db-font-ui)}
.app-search-key:empty{display:none}
:is(body.beta-ui-route:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]),html[data-visitor] body:not([data-route])) .app-search{display:none}
@media(hover:none),(pointer:coarse){.app-search-key{display:none}}
@media(max-width:760px){
 .app-top .app-search{flex:none;justify-content:center;width:44px;padding:0;border-color:transparent;background:transparent;color:var(--db-ink);cursor:pointer}
 .app-search-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
 .app-search-key{display:none}
}

/* ── the palette: a panel over the page; on phones the whole screen ─────────────────────────────────────────────────── */
.search-palette{box-sizing:border-box;width:min(640px,calc(100vw - 32px));max-width:none;max-height:min(640px,calc(100dvh - 12vh - 32px));margin:12vh auto auto;padding:0;border:1px solid var(--db-line);border-radius:16px;background:var(--db-paper);color:var(--db-ink);box-shadow:var(--db-shadow);overflow:hidden}
.search-palette[open]{display:flex;flex-direction:column}
.search-palette::backdrop{background:var(--db-overlay)}
.search-palette-panel{display:flex;flex:1;flex-direction:column;min-height:0}
.search-palette-head{display:flex;align-items:center;gap:8px;padding:6px 8px 6px 16px;border-bottom:1px solid var(--db-line)}
/* The field is the palette's whole head: its focus shows as the head's 3 px bottom rule rather than a ring inside the panel. */
.search-palette-head:focus-within{box-shadow:inset 0 -3px 0 var(--db-focus)}
body.beta-ui-route .search-palette .search-palette-input:focus-visible,.search-palette .search-palette-input:focus{outline:none}
.search-palette-icon{display:inline-flex;color:var(--db-muted)}
body.beta-ui-route .search-palette-input,.search-palette-input{flex:1;min-width:0;min-height:52px;padding:0;border:0;border-radius:0;background:transparent;color:var(--db-ink);font:inherit;font-size:18px;outline:none}
.search-palette-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.search-palette-close{display:inline-flex;align-items:center;justify-content:center;flex:none;min-width:44px;min-height:44px;padding:0 10px;border:0;border-radius:6px;background:transparent;color:var(--db-muted);font:inherit;font-size:14px;cursor:pointer}
.search-palette-close:hover{background:var(--db-paper-2);color:var(--db-ink)}
.search-palette-esc{padding:2px 6px;border:1px solid var(--db-line);border-radius:4px;font:600 11px/1.4 var(--db-font-ui)}
.search-palette-cancel{display:none}
.search-palette-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px}
.search-palette .search-results.is-inline{position:static;max-height:none;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible}
.search-palette .search-status{margin:0;padding:16px 12px;font-size:14px}
.search-palette-keys{margin:0;padding:8px 16px;border-top:1px solid var(--db-line);color:var(--db-muted);font-size:12px}
@media(hover:none),(pointer:coarse){.search-palette-keys{display:none}}
@media(max-width:600px){
 .search-palette,.search-palette[open]{width:100vw;height:100dvh;max-height:none;margin:0;border:0;border-radius:0;box-shadow:none}
 .search-palette-head{padding:calc(6px + var(--safe-top,0px)) 4px 6px 12px}
 body.beta-ui-route .search-palette-input,.search-palette-input{font-size:16px;min-height:48px}
 .search-palette-esc,.search-palette-keys{display:none}
 .search-palette-cancel{display:inline}
 .search-palette-close{color:var(--db-accent-strong);font-weight:650}
 .search-palette-body{padding:4px 4px calc(12px + env(safe-area-inset-bottom,0px))}
 .search-palette .search-option{min-height:52px}
}
body.search-open{overflow:hidden}
@media(prefers-reduced-motion:no-preference){.search-option{transition:background-color var(--db-fast) var(--db-ease)}}

