:root{color-scheme:dark;--bg:#07111d;--panel:#102033;--line:#2a516d;--muted:#a3bad0;--text:#f1f8ff;--red:#ff6978;--blue:#5caaff;--green:#20e69d}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:Pretendard,"D2Coding",sans-serif;font-size:14px}button,input{font:inherit}main{max-width:600px;margin:auto;padding:18px 14px 70px}header,.brand,.summary,.section-title,.stockhead{display:flex;align-items:center;justify-content:space-between}.brand{gap:10px;min-width:0}.brand strong{font-size:17px;letter-spacing:.1px}.brand small{display:block;color:var(--muted);font-size:11px;margin-top:4px}.logo{width:43px;height:43px;display:grid;place-items:center;border:2px solid #07dcef;border-radius:12px;color:#ff5779;font-size:32px;flex-shrink:0}.status{font-size:11px;color:#e8ca72;white-space:nowrap;margin-left:5px}.status.ok{color:var(--green)}.status.bad{color:var(--red)}.summary{background:linear-gradient(130deg,#142c43,#0f2031);border:1px solid #35607d;border-radius:15px;margin:18px 0 16px;padding:17px 6px}.summary>div{flex:1;text-align:center;min-width:0;border-right:1px solid #385a70}.summary>div:last-child{border:0;flex:1.22}.summary label,.metricrow label{display:block;color:#acc5d9;font-size:11px;margin-bottom:7px}.summary strong{font-size:23px;font-variant-numeric:tabular-nums}.summary .clock{font-size:clamp(19px,5.1vw,28px);color:var(--green);font-weight:800;white-space:nowrap;letter-spacing:.2px}nav,.charttabs{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:13px}nav::-webkit-scrollbar{display:none}button{border:1px solid #345c7a;color:#c1d5e7;background:#12263a;padding:11px 15px;border-radius:10px;white-space:nowrap;cursor:pointer}nav button{min-width:47px;font-weight:700}button.selected{color:white;background:#104760;border-color:#03dcf2;box-shadow:inset 0 0 0 1px #03dcf270}.panel{background:#0b1928;border:1px solid #2b516c;border-radius:16px;overflow:hidden;margin-bottom:14px}.section-title{padding:16px 14px;border-bottom:1px solid #28465b;gap:10px}.section-title b{font-size:17px}.section-title small{color:var(--muted);font-size:10px}.stocks{padding:10px;min-height:105px}.stock{background:linear-gradient(130deg,#12293e,#0c1d2e);border:1px solid #367294;border-radius:15px;padding:14px 10px;margin-bottom:10px;cursor:pointer}.stock:last-child{margin-bottom:0}.stock:active,.stock:focus-visible{outline:2px solid #00d4ef;background:#1a344b}.stockhead{justify-content:flex-start;gap:8px;padding-bottom:12px;border-bottom:1px solid #31536a;min-width:0}.stage{font-size:12px;font-weight:900;flex-shrink:0;color:#16e8fe;border:2px solid currentColor;padding:6px 7px;border-radius:9px}.stage.pre2{color:#ffcb39}.stage.pre3{color:#ff647f}.identity{display:flex;flex-wrap:wrap;gap:4px;align-items:baseline;min-width:0;flex:1}.identity b{font-size:16px;white-space:nowrap}.identity span{color:var(--muted);font-size:11px}.stockhead small{font-size:10px;color:#b7ccdd;white-space:nowrap}.metricrow{display:grid;grid-template-columns:1fr 1fr 1.15fr 1.1fr .9fr;margin-top:12px;text-align:center}.metricrow>div{min-width:0;border-right:1px solid #33566e;padding:0 3px}.metricrow>div:last-child{border:0}.metricrow label{font-size:10px;margin-bottom:5px}.metricrow strong{font-size:clamp(11px,3.15vw,16px);font-weight:800;white-space:nowrap;letter-spacing:-.4px;font-variant-numeric:tabular-nums}.pos{color:var(--red)}.neg{color:var(--blue)}.placeholder{padding:35px 12px;color:var(--muted);text-align:center}.quick-panel{border:1px solid #345f7c;border-radius:16px;background:#11263b;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:14px 5px;gap:0;margin-bottom:14px}.quick-panel button{display:flex;align-items:center;justify-content:center;gap:9px;padding:5px 2px;border:0;background:transparent;border-right:1px solid #3a5c72;border-radius:0}.quick-panel button:last-child{border-right:0}.quick-panel span{background:#24435d;border-radius:8px;padding:6px 7px;color:#c3d9ea}.quick-panel b{font-size:20px}.chartpanel{padding-bottom:12px}.charttabs{padding:10px}.chartcontent{min-height:200px;padding:12px;color:var(--muted)}.chartcontent svg{width:100%;height:205px;display:block}.disclaimer{color:#718da3;font-size:10px;line-height:1.6}.modal{position:fixed;inset:0;display:grid;place-items:center;background:#02060ce8;padding:20px;z-index:20}.modal[hidden],[hidden]{display:none!important}.modalbody{padding:22px;width:min(400px,100%);background:#112337;border:1px solid #38617b;border-radius:14px}.modalbody h2{font-size:17px}.modalbody p{color:#a9c1d2;line-height:1.6}.modalbody input{width:100%;padding:13px;background:#05121f;border:1px solid #3b5f77;color:#fff;border-radius:8px;margin-bottom:12px}.modalbody button{width:100%;color:white;background:#17668b}@media(max-width:380px){main{padding-left:9px;padding-right:9px}.brand strong{font-size:14px}.brand small{font-size:10px}.logo{width:37px;height:37px}.stock{padding:12px 7px}.stockhead{gap:5px}.identity b{font-size:14px}.stockhead small{font-size:9px}.metricrow strong{font-size:11px}.summary .clock{font-size:18px}.quick-panel button{gap:4px}.quick-panel b{font-size:17px}}

/* Mobile compact list V3: presentation only. PC 라보 정규 PRE stage 색과 동일. */
main{padding-top:11px;padding-bottom:55px}
header{gap:10px}.logo{width:36px;height:36px;font-size:25px;border-radius:10px}
.brand strong{font-size:15px}.brand small{font-size:10px;margin-top:3px}
.summary{margin:12px 0 12px;padding:9px 13px;border-radius:12px;justify-content:flex-start}
.summary>div{flex:none;border:0;display:flex;align-items:center;gap:18px;text-align:left}
.summary label{margin:0;font-size:12px}.summary strong{font-size:22px}
nav{padding-bottom:10px;gap:6px}nav button{padding:10px 12px;border-radius:9px}
.section-title{padding:11px 12px}.section-title b{font-size:16px}.section-title small{font-size:10px;text-align:right}
.stocks{padding:6px;min-height:90px}
.stock{border-radius:10px;padding:9px 10px;margin-bottom:6px}
.stockhead{padding-bottom:7px;gap:7px;border-bottom:1px solid #29475c}
.identity b{font-size:14px}.identity span{font-size:10px}.stockhead small{font-size:10px}
.stage{font-size:11px;border-width:1px;padding:4px 5px;border-radius:5px;color:#65d7f0;border-color:#2c7b8e;background:#102c39}
.stage.pre1{color:#6cbdff;border-color:#34678a;background:#112c43}
.stage.pre2{color:#f5ce65;border-color:#80652a;background:#332b19}
.stage.pre3{color:#47e4ae;border-color:#20765d;background:#10382e}
.metricrow{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:8px}
.metricrow>div{padding:0 2px}.metricrow label{margin-bottom:4px;font-size:9px}
.metricrow strong{font-size:clamp(11px,3.0vw,15px);letter-spacing:-.3px}
.quick-panel{padding:8px 4px;border-radius:12px}
@media(max-width:380px){.stock{padding:8px 6px}.stockhead small{font-size:9px}.stage{font-size:10px;padding:3px 4px}.metricrow strong{font-size:11px}.identity b{font-size:13px}.section-title b{font-size:14px}}

/* PC 라보와 동일한 P 3-LED 등급, 색상 및 변화 플래시 */
.p-led-group{display:inline-flex;align-items:center;gap:3px;flex:none;white-space:nowrap;margin-left:auto}
.p-led-group b{font-size:10px;color:#c2d3e3;margin-right:2px}
.p-led{display:inline-block;width:5px;height:12px;border-radius:2px;background:#657180}
.p-led.good{background:#27de91;box-shadow:0 0 4px #27de9155}
.p-led.mid{background:#e9b847}
.p-led.bad{background:#ff656b}
.p-led.unknown{background:#657180}
@keyframes pLedFlashUp{0%,100%{filter:brightness(1);opacity:1}50%{filter:brightness(2.1) drop-shadow(0 0 4px #27e89e);opacity:.3}}
@keyframes pLedFlashDown{0%,100%{filter:brightness(1);opacity:1}50%{filter:brightness(2.2) drop-shadow(0 0 5px #ff6573);opacity:.28}}
.p-led.p-flash-up{animation:pLedFlashUp .45s ease-in-out 3}
.p-led.p-flash-down{animation:pLedFlashDown .45s ease-in-out 5}
@media(max-width:380px){.p-led-group{gap:2px}.p-led{width:4px;height:10px}}

/* 선택한 종목 바로 아래에 차트를 배치. 새 종목 선택 시 기존 차트는 이동. */
.stock.expanded{border-color:#00d4ef;margin-bottom:3px;border-bottom-left-radius:5px;border-bottom-right-radius:5px}
.stocks>.chartpanel{margin:0 0 10px;border-color:#287b9a;border-top:2px solid #00d4ef;border-radius:6px 6px 12px 12px;background:#0b1c2c}
.stocks>.chartpanel .section-title{padding:9px 11px}
.stocks>.chartpanel .section-title b{font-size:13px}
.stocks>.chartpanel .charttabs{padding:8px 10px 3px}
.stocks>.chartpanel .charttabs button{padding:7px 10px;font-size:12px}
.stocks>.chartpanel .chartcontent{padding:8px 10px;min-height:190px}
.stocks>.chartpanel .chartcontent svg{height:auto;min-height:180px}

/* V9: 포착 종목 오른쪽 정규장 진행 상황 (09:00~15:30, KST) */
.summary{gap:13px;align-items:center}
.summary>div:first-child{flex:0 0 auto;gap:9px}
.summary .market-progress{display:block;flex:1;min-width:0;text-align:left;border-left:1px solid #385a70;padding-left:12px}
.market-progress-head,.market-progress-foot{display:flex;justify-content:space-between;align-items:center;gap:5px;white-space:nowrap}
.market-progress-head{margin-bottom:6px;font-size:10px;color:#abc8dd}
.summary .market-progress-head strong{font-size:11px;color:#d6efff;font-weight:700}
.market-track{height:8px;border:1px solid #426078;background:#071525;border-radius:20px;overflow:hidden}
.market-fill{width:0;height:100%;background:#16d8b5;border-radius:20px;transition:width .4s linear}
.market-progress-foot{margin-top:5px;color:#a5c5d7;font-size:10px;font-variant-numeric:tabular-nums}
@media(max-width:380px){.summary{gap:8px;padding-left:9px;padding-right:9px}.summary>div:first-child{gap:6px}.summary .market-progress{padding-left:8px}.market-progress-head,.market-progress-foot{font-size:9px}.summary .market-progress-head strong{font-size:10px}}

/* V10: 신규 PRE 수신 시 카드 테두리 플래시, 사운드 ON/OFF */
.header-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}
#preSound{font-family:inherit;font-size:11px;font-weight:700;background:#1b3449;color:#cbdcea;border:1px solid #48657a;border-radius:9px;padding:7px 8px;white-space:nowrap;cursor:pointer}
#preSound[aria-pressed="true"]{color:#b9ffdb;border-color:#36b882;background:#123c34}
.stock.pre-new-flash{animation:preNewFlash .45s ease-in-out 4}
@keyframes preNewFlash{0%,100%{box-shadow:0 0 0 0 transparent;border-color:#24435a}50%{box-shadow:0 0 0 2px #ffcc4d,0 0 15px #ffcc4d88;border-color:#ffd966;background-color:#273744}}
@media(prefers-reduced-motion:reduce){.stock.pre-new-flash{animation:none;outline:2px solid #ffd966}}
@media(max-width:380px){.header-actions{gap:4px}#preSound{font-size:10px;padding:6px 5px}}

/* V22 role-aware account screens */
.auth-tabs{display:flex;gap:8px;margin:12px 0}.auth-tabs button{flex:1}.modalbody input:not([type=checkbox]){width:100%;min-height:38px;box-sizing:border-box;margin:5px 0}.modalbody label{display:block;font-size:12px;margin:8px 0}.legal-text{max-height:230px;overflow:auto;border:1px solid #334155;padding:10px;border-radius:8px;font-size:12px;line-height:1.6}.legal-text p{margin:5px 0 11px}.account-panel{max-width:680px;margin:8px auto 20px;background:#152538;border:1px solid #334155;padding:16px;border-radius:12px;color:#d8e5f5}.account-top{display:flex;justify-content:space-between}.account-panel input{width:100%;box-sizing:border-box;padding:9px;margin:6px 0;background:#101c2c;color:white;border:1px solid #4a5d71;border-radius:7px}.account-panel button,.modalbody button{cursor:pointer}.admin-settings{display:grid;grid-template-columns:1fr;gap:7px}.account-panel label{font-size:13px}.account-row{padding:10px 0;border-bottom:1px solid #344458;font-size:13px}.account-row button{margin:3px}.account-panel h3{margin-top:18px}#accountBody p{margin:6px 0}.payment-input{display:block}.account-panel [hidden],.modal [hidden]{display:none!important}

body,button,input,select,textarea{font-family:'D2Coding'!important}

/* V25: 관리자 PIN의 숫자 6칸 (D2Coding) */
.admin-pin-row{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:7px;margin:9px 0 12px}.admin-pin-label{font-size:12px;color:#cbd5e1}.modalbody .admin-pin-digit{font-family:D2Coding,monospace;text-align:center;font-size:22px;font-weight:700;min-width:0;width:100%;height:48px;padding:0;border:1px solid #6c859d;border-radius:8px;background:#0d1726;color:#fff}.modalbody .admin-pin-digit:focus{outline:2px solid #60a5fa;outline-offset:1px}.modalbody [hidden]{display:none!important}

/* V26: 6-digit user PIN, signup ID availability, visible signup action on mobile */
.modal{align-items:center;overflow:hidden;padding:12px;}
.modalbody{max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;min-height:0;padding:16px;}
.modalbody .admin-pin-digit,.modalbody .user-pin-digit,.modalbody .reg-pin-digit{font-family:D2Coding!important;text-align:center;font-size:22px;font-weight:700;min-width:0;width:100%;height:48px;padding:0;border:1px solid #6c859d;border-radius:8px;background:#0d1726;color:#fff}
.modalbody .admin-pin-row{grid-template-columns:repeat(6,minmax(0,1fr));gap:5px}
.reg-user-row{display:flex;gap:7px;align-items:center}
.modalbody .reg-user-row input{flex:1;min-width:0}
.modalbody .reg-user-row button{flex:0 0 auto;width:auto;padding:10px}
#usernameCheckResult{display:block;min-height:18px;color:#d5e6f3;font-size:12px}
#signupFields{min-height:0}
.signup-action{position:sticky;bottom:-16px;background:#112337;padding:12px 0 max(14px,env(safe-area-inset-bottom));border-top:1px solid #38617b;z-index:2}
.signup-action button{min-height:48px;margin:0}
#authError{flex:none}
@media(max-height:640px){.modal{padding:6px}.modalbody{max-height:calc(100dvh - 12px);padding:12px}.legal-text{max-height:130px}}

/* V28: 모바일 관리자 화면 - 사용자 승인 우선 배치 */
.admin-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin:12px 0}.admin-stats>div{background:#23364a;border-radius:9px;padding:10px 5px;text-align:center}.admin-stats b{display:block;font-size:21px}.admin-stats small{display:block;font-size:11px;color:#b9c9dc}.admin-user-card{border:1px solid #374c64;border-radius:12px;padding:13px;margin:12px 0;background:#1b2d40}.admin-user-head{display:flex;gap:6px;justify-content:space-between;align-items:flex-start}.admin-user-head strong{font-size:16px}.admin-user-head small{display:block;font-size:11px;color:#adc0d4;margin-top:5px}.admin-user-status{white-space:nowrap;font-size:11px;border-radius:20px;padding:5px 8px;background:#31455a}.admin-user-status.waiting{color:#ffd778}.admin-user-status.active{color:#9be5b6}.admin-user-status.expired{color:#fdadae}.admin-user-card p{margin:6px 0;font-size:12px}.period-label{display:block;margin-top:12px}.admin-period{box-sizing:border-box;width:100%;border-radius:8px;border:1px solid #50677e;background:#112237;color:#e3edfb;font-size:15px;padding:11px}.admin-user-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}.admin-user-actions button{min-height:43px;border-radius:9px}.admin-user-actions .admin-primary{background:#255b80;border:1px solid #4e97bd;color:#fff}.admin-fold{margin-top:17px;border:1px solid #344d63;border-radius:10px;padding:13px}.admin-fold summary{cursor:pointer;font-weight:700}.admin-fold summary span{display:block;font-weight:400;font-size:11px;color:#a8bdd2;padding:4px 0}.admin-fold .admin-settings{padding-top:14px}.admin-user-actions button:disabled{opacity:.45;cursor:not-allowed}

/* V29: 관리자 전용 화면. 관리자에게 PRE 목록/차트/장 진행률을 보이지 않는다. */
body.admin-mode main{display:none!important;}
body.admin-mode #accountPanel{display:block!important;margin:12px auto 24px;max-width:680px;}
body.admin-mode #accountBody{display:none!important;}

/* V32: PRE 화면 전용 실제 로그아웃 버튼 */
#preLogoutBtn{font-size:11px;padding:7px 9px;white-space:nowrap}
@media(max-width:380px){#preLogoutBtn{font-size:10px;padding:6px 5px}.header-actions{flex-wrap:wrap}}

/* V33: 작은 모바일 화면의 PRE 헤더 겹침 방지.
   브랜드를 첫 행, 계정/로그아웃/사운드/연결 상태를 둘째 행으로 배치.
   인증, PRE 표시, 관리자 화면의 JS 동작은 변경하지 않는다. */
header{
  display:flex;
  flex-direction:column;
  align-items:stretch;
  justify-content:flex-start;
  gap:9px;
}
header .brand{width:100%;justify-content:flex-start}
header .brand>div:last-child{min-width:0}
header .brand strong{display:block;white-space:nowrap}
header .header-actions{
  width:100%;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:flex-start;
  gap:6px;
}
header .header-actions button{flex:0 0 auto;min-width:0;padding:7px 9px;font-size:11px}
header .header-actions .status{margin-left:auto;font-size:10px;white-space:nowrap}
@media(max-width:380px){
  header .header-actions{gap:5px}
  header .header-actions button{padding:7px 6px;font-size:10px}
  header .header-actions .status{font-size:10px}
}

/* V34: full-screen separate disclosures with explicit name confirmation. */
.legal-steps{display:grid;gap:9px;padding:12px 0}.legal-steps p{margin:0 0 6px;color:#bcd0e2}.legal-open{width:100%;min-height:58px;text-align:left;background:#18364b;border:1px solid #437a9b;color:#eff9ff;border-radius:10px;padding:11px}.legal-open span{float:right;color:#85dfbf}.legal-confirm-status{opacity:.85}
.legal-overlay{position:fixed;inset:0;z-index:9999;background:#07111d;display:flex;justify-content:center;color:#eef7ff}.legal-overlay[hidden]{display:none!important}.legal-dialog{width:min(100%,650px);height:100dvh;display:flex;flex-direction:column;background:#102033;overflow:hidden}.legal-header{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #3a6078}.legal-header h2{font-size:18px;margin:0}.legal-header button,.legal-sign button{background:#173f55;color:#f5fbff;border:1px solid #4c819b;border-radius:9px;padding:10px}.legal-document{flex:1;overflow-y:auto;padding:20px 18px;font-size:15px;line-height:1.85;overscroll-behavior:contain}.legal-document p{margin:12px 0}.legal-sign{flex-shrink:0;padding:12px 16px max(16px,env(safe-area-inset-bottom));border-top:1px solid #3a6078;background:#122b40;max-height:42dvh;overflow-y:auto}.legal-sign p{font-size:12px;margin:0 0 8px;color:#c2d6e8}.legal-sign label{display:block;font-size:12px;margin-bottom:6px}.legal-sign input{width:100%;min-height:44px;border-radius:7px;background:#071827;color:#fff;border:1px solid #5b87a0;padding:9px}.legal-sign button{width:100%;margin-top:8px;min-height:46px;background:#086d89}.legal-sign #legalError{color:#ff9d9d;margin-top:5px}
