/* OSR-24: frontend-only mobile/QOL layer. No model or accounting behavior lives here. */
:root{
  --qol-space-1:4px;--qol-space-2:8px;--qol-space-3:12px;--qol-space-4:16px;--qol-space-5:20px;
  --qol-tap:44px;--qol-radius-sm:12px;--qol-radius-md:16px;--qol-radius-lg:22px;
  --qol-warning:#e8c46c;--qol-danger:#f2a0a0;
}
html{scroll-padding-top:132px}
body{font-size:16px}
button,select,input,textarea,summary{touch-action:manipulation}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--gold-2);outline-offset:3px}
button:disabled{cursor:default;opacity:.58}
.app-shell{padding-bottom:calc(112px + env(safe-area-inset-bottom))}
main{padding-bottom:var(--qol-space-4)}
.primary-button,.secondary-button,.pill-button,.text-button,.chip,.quest-status{min-height:var(--qol-tap)}
.primary-button,.secondary-button{padding:12px 14px;font-size:13px}
.text-button{display:inline-flex;align-items:center;justify-content:center;padding:8px 10px;border-radius:10px}
.pill-button{display:inline-flex;align-items:center;justify-content:center;padding:9px 13px}
.money-mode-switch button,.flip-mode-tabs button{min-height:48px}
.money-toolbar select,.flip-journal-toolbar select,.flip-journal-toolbar input,.setting-field select,.setting-field input[type="url"],.ge-limit-manual-form input,.dip-toolbar select,.dip-budget-input-row input{min-height:var(--qol-tap);font-size:16px}
input[type="checkbox"]{width:22px;height:22px;accent-color:var(--gold)}
.range-row input[type="range"]{min-height:44px}
.dip-alert-toggles label,.dip-alert-levels label,.ge-limit-check{min-height:44px;align-items:center}
.bottom-nav{padding-top:7px;padding-bottom:calc(7px + env(safe-area-inset-bottom));box-shadow:0 -10px 30px rgba(0,0,0,.24)}
.bottom-nav button{min-height:58px;padding:7px 4px;position:relative}
.bottom-nav button span{font-size:21px}.bottom-nav button small{font-size:11px}
.bottom-nav button.active:before{content:"";position:absolute;top:2px;width:22px;height:3px;border-radius:999px;background:var(--gold)}
.bottom-nav button[aria-current="page"] small{color:var(--gold-2)}
.topbar{min-height:74px}
#pageTitle{overflow-wrap:anywhere}
.method-title,.flip-card-title{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.25}
.method-title{font-size:15px}.flip-card-title{font-size:16px;font-weight:850}
.empty-card,.flip-no-picks{line-height:1.55}
.empty-card strong,.flip-no-picks strong{display:block;color:var(--text);font-size:13px;margin-bottom:5px}
.empty-card p{font-size:11px;margin-top:5px}
.qol-section-nav{position:sticky;top:calc(72px + env(safe-area-inset-top));z-index:18;display:flex;gap:6px;overflow-x:auto;margin:10px 0 14px;padding:6px;background:rgba(13,17,20,.94);border:1px solid var(--line);border-radius:16px;backdrop-filter:blur(14px);scrollbar-width:none}
.qol-section-nav::-webkit-scrollbar{display:none}
.qol-section-nav button{flex:1 0 auto;min-width:76px;min-height:44px;border:0;border-radius:11px;background:transparent;color:var(--muted);font-size:11px;font-weight:800;padding:8px 10px}
.qol-section-nav button.active,.qol-section-nav button[aria-current="location"]{background:var(--surface-3);color:var(--text)}
.qol-section-nav button.active:first-child{color:var(--gold-2)}
#qolFlipRecommendations,#dipHeading,.qol-journal-heading,.qol-research-heading{scroll-margin-top:142px}
.qol-freshness{display:flex;align-items:center;gap:7px;margin-top:10px;color:var(--muted);font-size:10px;line-height:1.35}
.qol-freshness:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px rgba(109,209,156,.08)}
.qol-freshness.stale{color:var(--qol-warning)}.qol-freshness.stale:before{background:var(--qol-warning)}
.qol-freshness.empty:before{background:var(--muted)}
.qol-advanced-control{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:10px 0 16px;padding:9px 10px;border:1px solid #252d34;background:#0c1013;border-radius:14px}
.qol-advanced-control span{font-size:10px;color:var(--muted);line-height:1.35}.qol-advanced-control .text-button{flex:0 0 auto}
.flip-card{gap:12px}.flip-card-top{align-items:center}
.flip-card-sub{font-size:10px;line-height:1.45}
.flip-offer{padding:11px;border-radius:14px}.flip-offer span{font-size:9px;letter-spacing:.07em}.flip-offer strong{font-size:16px;line-height:1.2;margin-top:5px}.flip-offer small{font-size:8px;line-height:1.35;margin-top:4px}
.flip-offer-profit{border-color:rgba(109,209,156,.28);background:rgba(109,209,156,.055)}.flip-offer-profit strong{font-size:18px}
.flip-reasons{gap:6px}.flip-reasons span{font-size:9px;padding:6px 8px;line-height:1.3}
.ge-limit-chip{font-size:10px;line-height:1.4;padding:9px 10px;border-color:rgba(231,185,85,.34)}
.flip-actions button{min-height:44px;font-size:11px;padding:10px 9px}
.flip-reject-action,[data-trade-action="stuck"],[data-trade-action="cancel"],.text-button.danger{color:var(--qol-danger)}
.qol-card-details{border:1px solid #242c33;border-radius:13px;background:#0b1013;overflow:hidden}
.qol-card-details>summary{display:flex;align-items:center;justify-content:space-between;min-height:44px;padding:10px 11px;cursor:pointer;color:#c3ccd3;font-size:10px;font-weight:800;list-style:none}
.qol-card-details>summary::-webkit-details-marker{display:none}.qol-card-details>summary:after{content:"＋";color:var(--gold-2);font-size:14px}.qol-card-details[open]>summary:after{content:"−"}
.qol-card-details .flip-metrics{padding:0 9px 9px}.qol-card-details .flip-card-footer{padding:0 10px 10px}
.flip-metric{padding:9px}.flip-metric span{font-size:8px}.flip-metric strong{font-size:11px}
.dip-lab{border-color:rgba(231,185,85,.42);box-shadow:0 10px 34px rgba(0,0,0,.2)}.dip-lab #dipHeading{font-size:22px}
.dip-status{font-size:11px;line-height:1.55}
.dip-chip-row{gap:6px}.dip-chip-row span{font-size:9px;line-height:1.3;padding:6px 8px}
.dip-chip-row span.qol-risk{color:#f3b3a6;border-color:rgba(240,127,127,.34);background:rgba(240,127,127,.08)}
.dip-chip-row span.qol-evidence{color:#aee0c3;border-color:rgba(109,209,156,.28);background:rgba(109,209,156,.06)}
.dip-alert-head strong{font-size:13px}.dip-alert-head small,.dip-alert-message,.dip-alert-consent p{font-size:10px}.dip-alert-head button{min-height:44px;font-size:10px}
.dip-alert-health-grid span{font-size:8px}.dip-alert-health-grid strong{font-size:11px}.dip-alert-health-grid small{font-size:9px}
.flip-portfolio-summary>div,.flip-journal-summary>div{padding:11px}
.flip-portfolio-summary span,.flip-journal-summary span{font-size:8px}.flip-portfolio-summary strong,.flip-journal-summary strong{font-size:14px;line-height:1.25}.flip-portfolio-summary small,.flip-journal-summary small{font-size:8px;line-height:1.35}
.flip-journal-summary{gap:8px}.flip-journal-toolbar label>span{font-size:9px}.flip-journal-meta{font-size:10px}
.flip-trade-card{padding:13px;gap:10px}
.flip-trade-top{display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:10px}
.flip-trade-top>div:not(.qol-journal-item-thumb){min-width:0}
.qol-journal-item-thumb{width:48px;height:48px;border-radius:13px;border:1px solid #2a333a;background:#0a0f12;display:grid;place-items:center;overflow:hidden}
.qol-journal-item-thumb img{width:42px;height:42px;object-fit:contain}
.qol-journal-item-thumb.missing:after{content:"?";font-size:15px;color:var(--muted);font-weight:900}
.qol-journal-item-thumb.missing img{display:none}
.flip-trade-top strong{font-size:14px}
.flip-trade-status{font-size:9px;padding:6px 9px;border:1px solid #303941;font-weight:850}
.flip-trade-status.placed{color:var(--gold-2);border-color:rgba(231,185,85,.3);background:rgba(231,185,85,.07)}.flip-trade-status.bought{border-color:rgba(120,169,255,.3);background:rgba(120,169,255,.07)}.flip-trade-status.sold{border-color:rgba(109,209,156,.3);background:rgba(109,209,156,.07)}.flip-trade-status.stuck,.flip-trade-status.cancelled{border-color:rgba(240,127,127,.28);background:rgba(240,127,127,.06)}
.flip-trade-outcome span,.flip-trade-grid span{font-size:8px}.flip-trade-outcome strong{font-size:15px}.flip-trade-grid strong{font-size:11px}.flip-trade-outcome small,.flip-trade-grid small{font-size:8px}
.flip-trade-actions{gap:7px}.flip-trade-actions button{min-height:44px;font-size:10px;padding:9px 11px}
.qol-journal-market-legend{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin:-2px 0 10px;padding:11px 12px;border:1px solid #263039;border-radius:14px;background:#0c1115}
.qol-journal-market-legend>div{min-width:0}.qol-journal-market-legend strong{display:block;font-size:11px}.qol-journal-market-legend span{display:block;margin-top:2px;font-size:9px;color:var(--green)}.qol-journal-market-legend small{display:block;margin-top:4px;font-size:8px;line-height:1.4;color:var(--muted)}
.qol-journal-market-legend.stale span{color:var(--qol-warning)}.qol-journal-market-legend button{flex:0 0 auto;white-space:nowrap}
.qol-journal-market{border:1px solid #273139;background:linear-gradient(145deg,#0c1215,#0a0f12);border-radius:14px;padding:10px;display:grid;gap:8px}
.qol-journal-market.stale{border-color:rgba(231,185,85,.28)}
.qol-journal-market-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.qol-journal-market-head>div span{display:block;font-size:8px;letter-spacing:.07em;color:var(--muted);font-weight:900}
.qol-journal-market-head>div small{display:block;margin-top:3px;font-size:8px;color:var(--muted)}
.qol-market-source{font-size:8px;color:#aeb9c2;background:#151c21;border:1px solid #29343b;border-radius:999px;padding:5px 7px;white-space:nowrap}
.qol-journal-market-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.qol-market-side{min-width:0;border:1px solid #253038;border-radius:12px;background:#0a0f12;padding:9px}
.qol-market-side>span{display:block;font-size:8px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.qol-market-side>strong{display:block;margin-top:3px;font-size:14px;color:var(--text);overflow-wrap:anywhere}
.qol-market-live{display:flex;align-items:baseline;justify-content:space-between;gap:8px;border-top:1px solid #20292f;margin-top:7px;padding-top:7px}
.qol-market-live span{font-size:8px;color:var(--muted)}.qol-market-live b{font-size:11px;overflow-wrap:anywhere;text-align:right}
.qol-market-side>small{display:block;margin-top:4px;font-size:8px;line-height:1.3}.qol-market-side>small.good{color:var(--green)}.qol-market-side>small.watch{color:var(--qol-warning)}.qol-market-side>small.neutral{color:var(--muted)}

.ge-limit-context summary{min-height:44px;font-size:10px}.ge-limit-context summary strong{font-size:10px}.ge-limit-grid span{font-size:8px}.ge-limit-grid strong{font-size:11px}.ge-limit-context>small{font-size:8px}
.ge-limit-manager{padding:13px}.ge-limit-manager-head strong{font-size:13px}.ge-limit-manual-row{min-height:48px}.ge-limit-manual-row strong{font-size:11px}.ge-limit-manual-row small{font-size:9px}
.flip-research-grid>div,.flip-audit-summary>div{padding:11px}.flip-research-grid span,.flip-audit-summary span{font-size:8px}.flip-research-grid strong,.flip-audit-summary strong{font-size:12px}
.qol-inline-error{margin:7px 0 10px;border:1px solid rgba(240,127,127,.28);background:rgba(240,127,127,.055);border-radius:12px;padding:0 10px}
.qol-inline-error summary{min-height:44px;display:flex;align-items:center;color:#f0b0b0;font-size:10px;cursor:pointer}.qol-inline-error code{display:block;padding:0 0 10px;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--muted);font-size:9px;line-height:1.45}
.qol-busy{position:relative}.icon-button.qol-busy:after{display:none}.qol-busy:after{content:"";display:inline-block;width:12px;height:12px;margin-left:8px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:qol-spin .7s linear infinite;vertical-align:-2px}
@keyframes qol-spin{to{transform:rotate(360deg)}}
body.qol-sheet-open{overflow:hidden}.bottom-sheet[role="dialog"]{overscroll-behavior:contain}.qol-sheet-close{display:flex;margin:0 0 8px auto;min-width:64px}.toast[role="status"]{bottom:calc(92px + env(safe-area-inset-bottom));font-size:13px}
@media(max-width:540px){
  main{padding-left:12px;padding-right:12px}
  .qol-journal-market-legend{align-items:stretch}.qol-journal-market-legend button{align-self:center}
  .qol-journal-market-grid{grid-template-columns:1fr 1fr}.flip-hero{padding:15px}.flip-hero p{font-size:11px}.flip-offers{gap:7px}.flip-offer{padding:10px}.flip-metrics{gap:6px}.flip-actions{grid-template-columns:1fr 1fr}.flip-actions .primary-button{font-weight:850}.flip-portfolio-summary,.flip-journal-summary{gap:7px}.flip-journal-toolbar{gap:8px}.flip-journal-toolbar select,.flip-journal-toolbar input{font-size:16px}.dip-lab{padding:13px}.dip-alert-grid input[type="number"]{font-size:16px;min-height:44px}.bottom-sheet{max-height:92dvh}
}
@media(max-width:390px){
  .topbar{padding-left:12px;padding-right:12px}h1{font-size:25px}.qol-section-nav{margin-left:-2px;margin-right:-2px}.qol-section-nav button{min-width:72px;padding-left:8px;padding-right:8px}.flip-card{padding:12px}.flip-offer strong{font-size:15px}.flip-offer-profit strong{font-size:17px}.flip-portfolio-summary strong,.flip-journal-summary strong{font-size:13px}
}
@media(max-width:360px){
  main{padding-left:10px;padding-right:10px}
  .flip-trade-top{grid-template-columns:42px minmax(0,1fr) auto}.qol-journal-item-thumb{width:42px;height:42px}.qol-journal-item-thumb img{width:37px;height:37px}
  .qol-journal-market-legend{display:grid}.qol-journal-market-legend button{width:100%}
  .qol-journal-market-grid{grid-template-columns:1fr}.qol-section-nav button{min-width:68px;font-size:10px}.flip-actions{grid-template-columns:1fr 1fr}.flip-actions .primary-button{grid-column:auto}.flip-journal-toolbar{grid-template-columns:1fr}.flip-journal-search{grid-column:auto}.flip-trade-actions{display:grid;grid-template-columns:1fr 1fr}.flip-trade-actions .primary-button{grid-column:1/-1}.dip-alert-grid{grid-template-columns:1fr}
}
@media(min-width:721px){.qol-section-nav{top:86px}.qol-advanced-control{padding-left:13px;padding-right:13px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}
