:root{--ink:#213449;--muted:#62748a;--border:#d5dee7;--bg:#e9eef4;--panel:#fff;--navy:#1c3049;--blue:#315f9e;--blue-tint:#eaf1fc;--up:#087f78;--down:#c45655;--mark:#a76811;--mark-tint:#fff4df;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace;--body:"Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:13px/1.5 var(--body)}button,input,select,textarea{font:inherit;color:inherit}button,select{cursor:pointer}button{border:1px solid var(--border);border-radius:4px;background:var(--panel);padding:6px 11px;white-space:nowrap;transition:background .15s,border-color .15s}button:hover{background:var(--blue-tint);border-color:#8fa8c5}button:disabled{opacity:.45;cursor:default}button.active{background:var(--blue-tint);color:var(--blue);border-color:#9db7d9}button.primary{color:white;background:var(--blue);border-color:var(--blue)}button.primary:hover{background:#264d83}button.danger{color:var(--down)}:focus-visible{outline:2px solid var(--blue);outline-offset:3px}input,select,textarea{border:1px solid var(--border);border-radius:4px;background:white;padding:7px 9px;min-width:0}textarea{resize:vertical}label{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12px}h1,h2,p{margin:0}h2{font-size:13px;font-weight:700}h1{font:700 20px var(--mono);letter-spacing:-.5px}kbd{font:10px var(--mono);border:1px solid var(--border);border-radius:3px;padding:1px 3px;margin-left:6px}button[hidden],[hidden]{display:none!important}.app-header{height:52px;display:flex;align-items:center;justify-content:space-between;background:var(--navy);color:#e6edf7;padding:0 22px}.brand{display:flex;align-items:center;gap:11px}.brand strong{font:600 19px "Avenir Next",var(--body);letter-spacing:-.5px}.brand>span{font-size:12px;color:#c4d1e1}.brand svg{width:24px;height:24px;stroke:#adcaef;stroke-width:1.5;fill:var(--navy)}.brand .candle-icon{fill:#adcaef;stroke:none}.header-divider{height:18px;border-left:1px solid #60758f;margin:0 4px}.header-meta{font:11px var(--mono);display:flex;align-items:center;gap:12px}.quiet{color:#aabed5}.source-dot{width:6px;height:6px;border-radius:50%;background:#87c4c0}#clock{padding-left:8px;color:#b7c8dc}main{padding:14px 18px 0;max-width:2200px;margin:auto}.toolbar{display:flex;align-items:center;gap:16px;margin-bottom:12px}.toolbar label{gap:8px}.toolbar select{min-width:80px;background:#f8fafc}.toolbar #symbol{min-width:144px;font-family:var(--mono);font-weight:600}.quick-timeframes{display:flex;gap:4px}.quick-timeframes button{padding:6px 9px}.count-label input{width:80px;font-family:var(--mono)}.toolbar-end{display:flex;gap:6px;margin-left:auto}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 294px;gap:12px;align-items:stretch}.chart-panel,.inspector,.marks-panel{background:var(--panel);border:1px solid var(--border);border-radius:6px;overflow:hidden}.chart-panel{display:flex;flex-direction:column;min-width:0}.chart-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px 10px}.chart-heading>div:first-child{display:flex;align-items:center;gap:12px}#chart-subtitle{font-size:12px;color:var(--muted)}.pill{font:10px var(--mono);padding:3px 6px;background:#edf2f7;color:#536982;border-radius:3px;white-space:nowrap}.quote{display:grid;grid-template-columns:auto auto;column-gap:10px;align-items:center}.quote>span{font-size:10px;color:var(--muted)}.quote strong{font:500 14px var(--mono)}.quote small{grid-column:2;text-align:right;color:var(--muted);font:10px var(--mono);margin-top:3px}.ohlc-strip{display:flex;gap:16px;align-items:center;flex-wrap:wrap;font:11px var(--mono);padding:8px 16px;border-top:1px solid #edf1f5;border-bottom:1px solid var(--border);background:#f8fafc;min-height:34px}.ohlc-strip>span{color:var(--muted)}.ohlc-strip b{color:var(--ink);font-weight:500;margin-left:4px}#bar-time{color:var(--muted)}.chart-tools{display:flex;gap:12px;align-items:center;padding:9px 14px}.mode-group{display:flex;gap:5px}.mode-group button{font-size:12px;padding:5px 9px}.mode-group #mark-mode.active{background:var(--mark-tint);color:var(--mark);border-color:#d8ad63}.legend{display:flex;align-items:center;gap:5px;color:var(--muted);font-size:10px;margin-left:auto}.legend i{width:7px;height:9px;display:inline-block;margin-left:7px}.up-swatch{border:1px solid var(--up);background:var(--up)}.down-swatch{background:var(--down)}.mark-swatch{background:var(--mark);border-radius:50%}.chart-nav{display:flex;gap:4px}.chart-nav button{padding:3px 9px}.canvas-wrap{position:relative;flex:1;min-height:390px;height:clamp(390px,48vh,640px)}#chart{display:block;width:100%;height:100%;touch-action:none;cursor:crosshair}.chart-message{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);background:#ffffffed;pointer-events:none;font-size:13px}.overview-row{display:flex;align-items:center;gap:12px;padding:4px 14px;background:#f8fafc;border-top:1px solid var(--border);font:10px var(--mono);color:var(--muted)}#overview{height:35px;flex:1;min-width:0;cursor:pointer}.chart-footer{display:flex;gap:10px;justify-content:space-between;flex-wrap:wrap;padding:7px 14px;font:10px var(--mono);color:var(--muted);border-top:1px solid #edf1f5}#buffer-status{color:var(--blue)}.inspector{display:flex;flex-direction:column}.point-section{padding:14px;border-top:3px solid #c99c51;background:linear-gradient(#fffaf1 0,#fff 85px)}.section-title{display:flex;align-items:center;justify-content:space-between;gap:10px}.helper{font-size:11px;color:var(--muted);line-height:1.8}.point-section>.helper{margin-top:9px}.point-values{margin:12px 0}.point-values>div{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px solid #edf1f5}.point-values dt{font-size:11px;color:var(--muted)}.point-values dd{margin:0;font:12px var(--mono)}#point-price{font-size:17px;color:var(--mark)}.subheading{font-size:11px;margin:12px 0 8px}.subheading span{color:var(--muted);float:right;font-size:10px}.tag-choices{display:flex;flex-wrap:wrap;gap:6px;max-height:106px;overflow:auto}.tag-choice{font-size:11px;padding:5px 7px}.tag-choice.active{color:var(--mark);background:var(--mark-tint);border-color:#d8ad63}.point-actions{display:flex;gap:6px;margin-top:14px}.point-actions .primary{flex:1}.save-hint{font-size:10px;color:var(--muted);margin-top:7px}.tag-section{padding:14px;border-top:1px solid var(--border);flex:1}.number-badge{font:11px var(--mono);background:#eef2f7;padding:2px 7px;border-radius:3px;color:var(--muted)}#tag-form{margin-top:11px}#tag-form label{display:flex;align-items:stretch;flex-direction:column;margin-bottom:9px;gap:4px;font-size:11px}#tag-form input,#tag-form textarea{font-size:12px;padding:6px 8px;width:100%}.tag-form-actions{display:flex;gap:6px}.tag-form-actions button{font-size:11px}.tag-list{max-height:150px;overflow:auto;margin-top:10px}.tag-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 0;border-top:1px solid #edf1f5}.tag-row strong{font-size:11px;overflow-wrap:anywhere}.tag-row p{font-size:10px;color:var(--muted);overflow-wrap:anywhere}.tag-row button{padding:3px 6px;font-size:10px}.tag-row-actions{display:flex;gap:3px;flex-shrink:0}.marks-panel{margin-top:12px}.marks-heading{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border)}.marks-heading .section-title{justify-content:start}.mark-filters{display:flex;gap:6px}.mark-filters select{font-size:11px;padding:5px 8px;max-width:200px}.table-wrap{max-height:240px;min-height:113px;overflow:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}th{background:#f5f8fb;color:var(--muted);font-weight:500;font-size:10px;position:sticky;top:0;z-index:1}th span{color:#8796a6;margin-left:4px}th,td{padding:8px 14px;border-bottom:1px solid #e9eef4;white-space:nowrap}td{font-family:var(--mono)}td.numeric,th.numeric{text-align:right}tbody tr:hover{background:#f7faff}.empty{font-family:var(--body);color:var(--muted);text-align:center;padding:26px 14px;font-size:12px}.table-tag{display:inline-block;margin:1px 4px 1px 0;padding:2px 6px;border:1px solid #e7d7b8;background:#fff9ee;color:var(--mark);border-radius:3px;font:10px var(--body)}td button{font:11px var(--body);padding:3px 8px;margin-right:4px}.app-footer{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px;padding:10px 0 14px}.separator{margin:0 6px;color:#9eacbc}.notice{border:1px solid #d2ad73;color:#7a4d0c;background:#fff5e6;padding:9px 13px;border-radius:4px;margin-bottom:10px;font-size:12px}.notice.success{background:#eaf6f4;color:#146e62;border-color:#a4c9c3}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(min-width:1700px){.workspace{grid-template-columns:minmax(0,1fr) 330px}.canvas-wrap{min-height:500px}.tag-list{max-height:240px}}
@media(max-width:1100px){.toolbar{gap:8px;flex-wrap:wrap}.quick-timeframes{display:none}.workspace{grid-template-columns:minmax(0,1fr) 260px}.chart-heading{align-items:start}.chart-heading>div:first-child{flex-wrap:wrap;gap:7px}.quote{display:none}.ohlc-strip{gap:8px}.legend{display:none}.chart-nav{margin-left:auto}.header-meta .quiet{display:none}}
@media(max-width:760px){main{padding:10px 10px 0}.app-header{padding:0 12px}.header-meta{display:none}.workspace{grid-template-columns:1fr}.inspector{display:grid;grid-template-columns:1fr 1fr}.point-section,.tag-section{padding:12px}.tag-section{border-top:0;border-left:1px solid var(--border)}.toolbar{gap:8px 12px}.toolbar label{font-size:11px}.toolbar-end{margin-left:0}.toolbar #symbol{min-width:116px}.canvas-wrap{height:420px;flex:auto}.app-footer{flex-direction:column;gap:5px}.chart-footer{font-size:9px}.marks-heading{gap:8px;flex-wrap:wrap}button{min-height:36px}.tag-row{align-items:start;flex-wrap:wrap}}
@media(max-width:430px){.brand>span:last-child{font-size:10px}.inspector{grid-template-columns:1fr}.tag-section{border-top:1px solid var(--border);border-left:0}.toolbar-end{margin-left:auto}.toolbar label{flex-direction:column;align-items:start;gap:3px}.chart-heading{padding:12px}.ohlc-strip{font-size:10px;padding:7px 12px}.ohlc-strip time{width:100%}.mark-filters{width:100%}.mark-filters select{max-width:50%;flex:1}.chart-footer>span:first-child{width:100%}.chart-message{font-size:11px}.chart-tools{padding:8px}.canvas-wrap{height:370px;min-height:370px}}
/* Keep chart, inspector and saved-point table in the same desktop overview. */
@media(min-width:761px){
  .workspace{height:clamp(420px,calc(100vh - 320px),780px)}
  .chart-panel{min-height:0}
  .canvas-wrap{height:auto;min-height:0}
  .inspector{overflow-y:auto}
  .tag-list{max-height:110px}
}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Candidate review reuses the same chart and single-point annotation model. */
.review-tabs{display:flex;gap:4px;align-items:center;margin-top:12px;border-bottom:1px solid var(--border)}
.review-tabs button{border:0;border-bottom:2px solid transparent;border-radius:4px 4px 0 0;background:transparent;font-size:12px;padding:8px 14px}
.review-tabs button.active{background:var(--panel);border-bottom-color:var(--blue)}
.review-tabs span{font:11px var(--mono);margin-left:7px;color:var(--muted)}
.review-tabs~.marks-panel{margin-top:0;border-radius:0 0 6px 6px;border-top:0}
.candidates-panel{background:var(--panel);border:1px solid var(--border);border-top:0;border-radius:0 0 6px 6px;overflow:hidden}
.scan-toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:10px 14px}
.scan-toolbar label{font-size:11px}.scan-toolbar select{font-size:11px;padding:5px 7px}.scan-toolbar button{font-size:11px}
.candidate-navigation{margin-left:auto;display:flex;gap:8px;align-items:center}.candidate-navigation span{font:11px var(--mono);color:var(--muted);min-width:34px;text-align:center}
.scan-status-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px 8px;color:var(--muted);font-size:11px}
.scan-status-row label{font-size:10px;white-space:nowrap}.scan-status-row input{accent-color:var(--blue)}
.candidate-detail{display:flex;gap:12px;flex-wrap:wrap;align-items:center;font-size:11px;padding:8px 14px;background:var(--blue-tint);border-top:1px solid #d6e3f5;color:var(--blue)}
.candidate-detail strong{font-weight:600}.candidate-detail .helper{color:var(--blue)}
.candidate-table{min-height:78px;max-height:190px}.candidate-table tr.selected{background:#eaf1fc}.candidate-table td{font-size:11px;padding-top:6px;padding-bottom:6px}
.review-actions{display:flex;gap:5px;margin-top:9px}.review-actions button{flex:1;font-size:11px;padding:6px 4px}
.review-actions button[data-verdict=yes]{color:var(--up)}.review-actions button[data-verdict=no]{color:var(--down)}
.verdict{font:11px var(--body)}.verdict.yes{color:var(--up)}.verdict.no{color:var(--down)}.verdict.hold{color:var(--mark)}
@media(max-width:1100px){.candidate-navigation{margin-left:0}.scan-toolbar{gap:7px}.scan-status-row{align-items:start;flex-wrap:wrap}}
@media(max-width:430px){.scan-toolbar{padding:10px}.scan-toolbar label{flex-wrap:wrap}.scan-toolbar select{max-width:180px}.candidate-navigation{width:100%;justify-content:space-between}.review-tabs button{padding:8px 10px;font-size:11px}.scan-status-row{padding-left:10px;padding-right:10px}}
.live-toolbar{display:flex;align-items:center;gap:5px 8px;flex-wrap:wrap;padding:5px 9px;background:#edf3f8;border:1px solid #d2dfeb;border-radius:4px;margin:6px 0;font-size:11px}.live-toolbar label{display:flex;align-items:center;gap:4px}.live-toolbar button,.live-toolbar select{font-size:11px;min-height:26px;padding:3px 6px}.live-toolbar>strong,.live-toolbar>span:not(#live-status){white-space:nowrap}.live-toolbar details{color:#52667c}.live-toolbar details[open]{flex-basis:100%;border-top:1px solid #d2dfeb;padding-top:5px}.live-toolbar details .helper{margin:5px 0}.live-toolbar summary{cursor:pointer;font-size:11px}.live-toolbar #telegram-test{margin:5px 0}.live-toolbar #live-checks{font-size:11px}.live-toolbar button.active{background:#087f78;color:white}.live-toolbar #live-status{flex:1;min-width:120px;font-size:10px;color:#52667c}.history-panel{background:white;border:1px solid #dce4ed;border-radius:6px}.delivery-error{display:block;max-width:300px;white-space:normal;color:#a14439;font-size:11px}#live-checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:6px}
.login-page{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:min(100%,360px);padding:28px;background:#fff;border:1px solid var(--border);border-top:3px solid var(--blue);border-radius:6px}.login-brand{font-size:19px;font-weight:700;color:var(--ink);margin-bottom:26px}.login-brand span{font-size:11px;font-weight:400;color:var(--muted);margin-left:8px}.login-card h1{font-size:20px;margin:0 0 8px}.login-card p{font-size:12px;color:var(--muted);line-height:1.8}.login-card form{display:grid;gap:9px;margin:20px 0}.login-card label{font-size:12px}.login-card input{width:100%;font-size:16px;padding:9px}.login-card button{margin-top:4px;padding:10px}.login-card details{font-size:11px;color:var(--muted)}.login-card summary{cursor:pointer}.login-card #login-error{color:#a14439;margin:0}.header-meta #logout{font-size:10px;padding:3px 7px;background:transparent;color:#d7e2ef;border-color:#62748a}.mobile-logout{margin-left:auto}
.app-header>#logout{font-size:10px;padding:3px 7px;margin-left:12px;background:transparent;color:#d7e2ef;border-color:#62748a;white-space:nowrap}.app-header .header-meta{margin-left:auto}
