:root{--pink:#ec4899;--yellow:#f59e0b;--orange:#f97316;--red:#ef4444;--purple:#a855f7}.ctr-header{position:-webkit-sticky;position:sticky;top:0;z-index:100;background:rgba(10,10,15,.96);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border);padding:0 20px}.ctr-header-inner{max-width:1200px;margin:0 auto;gap:14px;height:56px}.ctr-header-inner,.nav-logo{display:flex;align-items:center}.nav-logo{flex-shrink:0;text-decoration:none}.nav-logo img{width:100px;height:34px;object-fit:contain}.nav-title{font-family:Bebas Neue,sans-serif;font-size:20px;letter-spacing:3px;color:var(--purple)}.nav-back{display:inline-flex;align-items:center;gap:5px;color:var(--muted);text-decoration:none;font-size:11px;font-weight:700;padding:4px 10px;border-radius:5px;border:1px solid var(--border);background:var(--card);letter-spacing:.5px;transition:all .15s;flex-shrink:0}.nav-back:hover{color:var(--text);border-color:hsla(0,0%,100%,.2)}.ctr-page{max-width:1000px;margin:0 auto;padding:24px 20px 60px;position:relative;z-index:1}.ctr-page-title{font-family:Bebas Neue,sans-serif;font-size:32px;letter-spacing:3px;color:var(--text);margin-bottom:2px}.ctr-page-title span{color:var(--purple)}.ctr-page-subtitle{font-size:12px;color:var(--muted);margin-bottom:20px;font-weight:600;letter-spacing:.3px}.tip-box{background:rgba(34,197,94,.04);border:1px solid rgba(34,197,94,.2);border-radius:8px;padding:12px 16px;margin-bottom:20px;display:flex;gap:10px;align-items:flex-start}.tip-icon{font-size:15px;flex-shrink:0;margin-top:1px}.tip-text{font-size:12px;color:rgba(34,197,94,.85);line-height:1.7;font-weight:600}.tip-text strong{color:var(--green)}.upload-zone{border:2px dashed var(--border);border-radius:12px;background:var(--card);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;cursor:pointer;transition:all .2s;min-height:220px;position:relative;margin-bottom:20px}.upload-zone.drag-over,.upload-zone:hover{border-color:var(--purple);background:rgba(168,85,247,.05)}.upload-zone input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}.upload-icon{font-size:40px;margin-bottom:14px;opacity:.45}.upload-title{font-family:Bebas Neue,sans-serif;font-size:20px;letter-spacing:2px;color:var(--muted);margin-bottom:6px}.upload-sub{font-size:11px;color:var(--muted);font-weight:600;opacity:.7}.main-layout{display:grid;grid-template-columns:1fr 300px;grid-gap:16px;gap:16px;align-items:start}.canvas-wrapper{background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--border);gap:6px;flex-wrap:wrap}.toolbar-left,.toolbar-right{display:flex;gap:5px;align-items:center}.toolbar-divider{width:1px;height:18px;background:var(--border);flex-shrink:0;margin:0 2px}.tool-btn{padding:4px 10px;border-radius:4px;border:1px solid var(--border);background:var(--bg);color:var(--muted);font-family:Rajdhani,Sarabun,sans-serif;font-size:11px;font-weight:700;cursor:pointer;transition:all .15s;letter-spacing:.5px}.tool-btn:hover:not(:disabled){border-color:hsla(0,0%,100%,.2);color:var(--text)}.tool-btn:disabled{opacity:.35;cursor:not-allowed}.tool-btn.active-outer{background:rgba(236,72,153,.15);border-color:var(--pink);color:var(--pink)}.tool-btn.active-inner{background:rgba(34,197,94,.15);border-color:var(--green);color:var(--green)}.tool-btn.danger:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.tool-btn.active-front{background:rgba(168,85,247,.15);border-color:var(--purple);color:var(--purple)}.tool-btn.active-back{background:rgba(255,214,10,.12);border-color:var(--gold);color:var(--gold)}.opacity-control{display:flex;align-items:center;gap:6px;padding:3px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg)}.opacity-label{color:var(--muted);letter-spacing:.5px}.opacity-label,.opacity-val{font-size:11px;font-weight:700;flex-shrink:0}.opacity-val{color:var(--text);width:30px;text-align:right;font-family:JetBrains Mono,monospace}.opacity-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:80px;height:4px;border-radius:2px;background:linear-gradient(to right,var(--teal) 0,var(--teal) var(--pct,100%),var(--border) var(--pct,100%));outline:none;cursor:pointer}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--text);border:2px solid var(--teal);cursor:pointer;-webkit-transition:transform .1s;transition:transform .1s}.opacity-slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.opacity-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--text);border:2px solid var(--teal);cursor:pointer}.upload-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px;gap:12px;margin-bottom:20px}.upload-row .upload-zone{min-height:130px;padding:22px 14px;margin-bottom:0}.upload-row .upload-zone .upload-icon{font-size:28px;margin-bottom:8px}.upload-row .upload-zone .upload-title{font-size:16px}.upload-zone.loaded{border-color:rgba(34,197,94,.45);border-style:solid;background:rgba(34,197,94,.04)}@media (max-width:700px){.upload-row{grid-template-columns:1fr}}.mini-grade-box{display:flex;flex-direction:column;align-items:center;padding:10px 6px;border-radius:7px;border:1px solid;background:rgba(0,0,0,.2)}.mini-grade-label{font-family:Bebas Neue,sans-serif;font-size:10px;letter-spacing:2px;color:var(--muted);margin-bottom:2px}.mini-grade-num{font-family:Bebas Neue,sans-serif;font-size:34px;line-height:1;letter-spacing:-1px}.mini-grade-sub{font-size:9px;font-weight:600;color:var(--muted);margin-top:3px;text-align:center}.grade-overall-label{font-family:Bebas Neue,sans-serif;letter-spacing:2px;margin-bottom:2px}.grade-overall-label,.zoom-label{font-size:10px;color:var(--muted)}.zoom-label{font-family:JetBrains Mono,monospace;font-weight:500;min-width:36px;text-align:center;padding:4px 5px;background:var(--bg);border:1px solid var(--border);border-radius:4px}.canvas-area{position:relative;overflow:hidden;background:#050508;height:clamp(360px,65vh,700px)}#mainCanvas{display:block;cursor:-webkit-grab;cursor:grab}.side-panel{display:flex;flex-direction:column;gap:12px}.guide-card,.legend-card,.result-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;overflow:hidden}.guide-header,.legend-header,.result-header{padding:10px 16px;background:hsla(0,0%,100%,.02);border-bottom:1px solid var(--border);font-family:Bebas Neue,sans-serif;font-size:14px;letter-spacing:2px;color:var(--muted)}.result-header{justify-content:space-between}.btn-info,.result-header{display:flex;align-items:center}.btn-info{width:20px;height:20px;border-radius:50%;border:1px solid var(--border);background:var(--bg);color:var(--muted);font-family:Rajdhani,sans-serif;font-size:12px;font-weight:700;cursor:pointer;line-height:1;justify-content:center;transition:all .15s;flex-shrink:0}.btn-info:hover{border-color:var(--purple);color:var(--purple);background:rgba(168,85,247,.1)}.criteria-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:500;opacity:0;transition:opacity .25s}.criteria-backdrop.open{display:flex;align-items:center;justify-content:center}.criteria-backdrop.visible{opacity:1}.criteria-dialog{background:var(--panel);border:1px solid var(--border);border-radius:12px;width:min(420px,92vw);max-height:85vh;display:flex;flex-direction:column;transform:translateY(12px);transition:transform .25s;overflow:hidden}.criteria-backdrop.visible .criteria-dialog{transform:translateY(0)}.criteria-dlg-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);font-family:Bebas Neue,sans-serif;font-size:15px;letter-spacing:2px;color:var(--text);flex-shrink:0}.criteria-dlg-close{width:26px;height:26px;border-radius:50%;border:1px solid var(--border);background:var(--card);color:var(--muted);font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}.criteria-dlg-close:hover{border-color:var(--accent);color:var(--accent)}.criteria-dlg-body{overflow-y:auto;padding:16px 18px}.criteria-section-title{font-size:9px;font-weight:700;letter-spacing:1px;padding:8px 0 4px}.criteria-section-title:first-child{padding-top:0}.criteria-row{display:flex;justify-content:space-between;align-items:center;padding:5px 0;border-bottom:1px solid hsla(0,0%,100%,.04)}.criteria-row:last-child{border-bottom:none}.result-body{gap:14px}.grade-badge,.result-body{padding:16px;display:flex;flex-direction:column}.grade-badge{align-items:center;border-radius:8px;border:1px solid;background:rgba(0,0,0,.25)}.grade-badge .grade-num{font-family:Bebas Neue,sans-serif;font-size:52px;line-height:1;letter-spacing:-1px}.grade-badge .grade-label{font-family:Bebas Neue,sans-serif;font-size:14px;letter-spacing:2px;margin-top:4px}.grade-badge .grade-sub{font-size:11px;color:var(--muted);margin-top:6px;font-weight:600;text-align:center}.grade-10{border-color:rgba(34,197,94,.4);color:var(--green)}.grade-9{border-color:rgba(6,182,212,.4);color:var(--teal)}.grade-8{border-color:rgba(245,158,11,.4);color:var(--yellow)}.grade-7{border-color:rgba(249,115,22,.4);color:var(--orange)}.grade-low{border-color:rgba(239,68,68,.4);color:var(--red)}.grade-none{border-color:var(--border);color:var(--border)}.bgs-10{border-color:rgba(255,214,10,.45);color:var(--gold)}.bgs-9h{border-color:rgba(34,197,94,.4);color:var(--green)}.bgs-9{border-color:rgba(6,182,212,.4);color:var(--teal)}.bgs-low{border-color:rgba(239,68,68,.4);color:var(--red)}.grading-split{display:grid;grid-template-columns:1fr 1px 1fr;grid-gap:0;gap:0;align-items:start}.grading-col{display:flex;flex-direction:column;gap:8px}.grading-col:first-child{padding-right:10px}.grading-col:last-child{padding-left:10px}.grading-divider-v{background:var(--border);align-self:stretch}.grading-col-label{font-family:Bebas Neue,sans-serif;font-size:13px;letter-spacing:3px;text-align:center;padding:2px 0 4px;border-bottom:1px solid var(--border);gap:6px}.btn-grade-info,.grading-col-label{display:flex;align-items:center;justify-content:center}.btn-grade-info{width:16px;height:16px;border-radius:50%;border:1px solid;background:transparent;color:inherit;font-size:10px;font-weight:700;cursor:pointer;line-height:1;padding:0;opacity:.7;transition:opacity .15s;font-family:Rajdhani,sans-serif;letter-spacing:0;flex-shrink:0}.btn-grade-info:hover{opacity:1}.psa-detail-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.65);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);z-index:510;opacity:0;transition:opacity .25s;align-items:center;justify-content:center}.psa-detail-backdrop.open{display:flex}.psa-detail-backdrop.visible{opacity:1}.psa-detail-dialog{background:var(--panel);border:1px solid var(--border);border-radius:14px;width:min(480px,94vw);max-height:88vh;display:flex;flex-direction:column;transform:translateY(14px);transition:transform .25s}.psa-detail-backdrop.visible .psa-detail-dialog{transform:translateY(0)}.psa-detail-dlg-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);flex-shrink:0}.psa-detail-dlg-header span{font-family:Bebas Neue,sans-serif;font-size:16px;letter-spacing:2px;color:var(--accent)}.psa-detail-dlg-close{width:26px;height:26px;border-radius:50%;border:1px solid var(--border);background:var(--card);color:var(--muted);font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}.psa-detail-dlg-close:hover{border-color:var(--accent);color:var(--accent)}.psa-detail-dlg-body{overflow-y:auto;padding:16px 18px 20px}.psa-intro{font-size:12px;color:var(--muted);line-height:1.7;margin-bottom:14px}.psa-tier{margin-bottom:12px;border-radius:8px;overflow:hidden;border:1px solid var(--border)}.psa-tier-header{padding:7px 12px;font-size:11px;font-weight:700;letter-spacing:1px;display:flex;align-items:center;gap:8px}.psa-tier-grade{font-family:Bebas Neue,sans-serif;font-size:20px;line-height:1}.psa-tier-name{font-size:11px;font-weight:700;letter-spacing:1px}.psa-tier-body{padding:8px 12px 10px;font-size:12px;color:var(--muted);line-height:1.75;background:rgba(0,0,0,.2)}.psa-tier-body .centering-note{display:inline-block;margin-top:5px;font-family:JetBrains Mono,monospace;font-size:10px;color:var(--teal);background:rgba(6,182,212,.08);border:1px solid rgba(6,182,212,.2);border-radius:4px;padding:2px 7px}.psa-source{margin-top:14px;font-size:10px;color:var(--muted);text-align:center}.psa-source a{color:var(--teal);text-decoration:none}.psa-source a:hover{text-decoration:underline}.mini-grade-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:4px;gap:4px}.mini-grade-row .mini-grade-box{padding:8px 4px}.mini-grade-row .mini-grade-num{font-size:28px}.mini-grade-row .mini-grade-sub{font-size:8px}.grade-badge.sm{padding:10px 8px}.grade-badge.sm .grade-num{font-size:38px}.grade-badge.sm .grade-label{font-size:12px}.grade-badge.sm .grade-sub{font-size:10px;margin-top:4px}.center-section{display:flex;flex-direction:column;gap:10px}.axis-label{font-size:10px;font-weight:700;color:var(--muted);letter-spacing:1px;text-transform:uppercase;margin-bottom:6px;display:flex;justify-content:space-between}.axis-label span{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text);font-weight:500}.axis-bar-wrap{height:8px;background:var(--bg);border-radius:4px;overflow:hidden;display:flex;position:relative;border:1px solid var(--border)}.axis-bar-left{border-radius:4px 0 0 4px}.axis-bar-left,.axis-bar-right{height:100%;transition:width .4s}.axis-bar-right{border-radius:0 4px 4px 0}.axis-center-line{position:absolute;left:50%;top:0;bottom:0;width:1px;background:hsla(0,0%,100%,.15)}.axis-pct{display:flex;justify-content:space-between;margin-top:4px}.axis-pct span{font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500}.axis-pct .left-pct{color:var(--teal)}.axis-pct .right-pct{color:var(--accent)}.meas-row{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;background:var(--card);border-radius:5px;border:1px solid var(--border)}.meas-label{font-size:10px;font-weight:700;color:var(--muted);letter-spacing:.5px}.meas-val{font-family:JetBrains Mono,monospace;font-size:12px;font-weight:500;color:var(--text)}.guide-body{gap:8px}.guide-body,.legend-body{padding:12px 16px;display:flex;flex-direction:column}.legend-body{gap:7px}.guide-row{display:flex;gap:8px;align-items:flex-start}.guide-dot{width:6px;height:6px;border-radius:50%;margin-top:5px;flex-shrink:0}.guide-text{font-size:12px;color:var(--muted);line-height:1.6;font-weight:600}.legend-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0;border-bottom:1px solid hsla(0,0%,100%,.04)}.legend-row:last-child{border-bottom:none}.legend-grade{font-size:11px;font-weight:500}.legend-cond,.legend-grade{font-family:JetBrains Mono,monospace}.legend-cond{font-size:10px;color:var(--muted)}.lg-10{color:var(--green)}.lg-9{color:var(--teal)}.lg-8{color:var(--yellow)}.lg-7{color:var(--orange)}.lg-low{color:var(--red)}.drag-hint{font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.3px;padding:8px 0 0;text-align:center}.cap-backdrop{display:none;position:fixed;inset:0;z-index:200;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.cap-backdrop.open{display:block}.cap-sheet{position:fixed;bottom:0;left:0;right:0;z-index:201;background:var(--panel);border-radius:16px 16px 0 0;border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom,0);display:none;transform:translateY(110%);transition:transform .3s cubic-bezier(.32,.72,0,1)}.cap-sheet.open{transform:translateY(0)}.cap-handle{width:36px;height:4px;background:var(--border);border-radius:2px;margin:12px auto 16px}.cap-sheet-title{font-family:Bebas Neue,sans-serif;font-size:16px;letter-spacing:2px;color:var(--muted);text-align:center;margin-bottom:16px}.cap-options{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px;padding:0 16px 14px}.cap-opt{position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px 10px;background:var(--card);border:1px solid var(--border);border-radius:12px;cursor:pointer;transition:all .15s;color:var(--text)}.cap-opt:hover{border-color:var(--purple);background:rgba(168,85,247,.08)}.cap-opt-icon{font-size:28px}.cap-opt-label{font-family:Rajdhani,sans-serif;font-size:14px;font-weight:700;letter-spacing:.5px}.cap-opt-sub{font-size:10px;color:var(--muted);font-weight:600}.cap-opt input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}.cap-cancel{display:block;width:calc(100% - 32px);margin:0 16px 16px;padding:12px;background:var(--card);border:1px solid var(--border);border-radius:10px;color:var(--muted);font-family:Rajdhani,sans-serif;font-size:13px;font-weight:700;letter-spacing:1px;cursor:pointer;transition:all .15s}.cap-cancel:hover{color:var(--accent);border-color:var(--accent)}.cam-overlay{display:none;position:fixed;inset:0;z-index:300;background:#000}.cam-overlay.open{display:block}#camVideo{object-fit:cover}#camGuideCanvas,#camVideo{position:absolute;inset:0;width:100%;height:100%}#camGuideCanvas{pointer-events:none}.cam-close{position:absolute;top:max(16px,env(safe-area-inset-top,16px));right:16px;width:38px;height:38px;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.25);border-radius:50%;color:#fff;font-size:16px;cursor:pointer;z-index:10;display:flex;align-items:center;justify-content:center;transition:background .15s}.cam-close:hover{background:rgba(0,0,0,.9)}.cam-capture{position:absolute;bottom:max(32px,calc(32px + env(safe-area-inset-bottom, 0)));left:50%;transform:translateX(-50%);width:70px;height:70px;border-radius:50%;background:transparent;border:none;cursor:pointer;z-index:10;display:flex;align-items:center;justify-content:center}.cam-capture-ring{position:absolute;inset:0;border-radius:50%;border:3px solid hsla(0,0%,100%,.9)}.cam-capture-dot{width:54px;height:54px;border-radius:50%;background:#fff;transition:transform .1s}.cam-capture:active .cam-capture-dot{transform:scale(.85)}.cam-flash{position:absolute;inset:0;z-index:20;background:#fff;pointer-events:none;opacity:0;transition:opacity .1s}.cam-flash.on{opacity:1}@media (max-width:700px){.main-layout{grid-template-columns:1fr}.side-panel{order:-1}.ctr-page{padding:16px 14px 60px}}