@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700;800&display=swap');
:root{font-family:Pretendard,'Noto Sans KR','Malgun Gothic',sans-serif;color:#272331;background:#f5f4f1;font-synthesis:none}*{box-sizing:border-box}html,body,#root{margin:0;min-width:0;min-height:100%;background:#f5f4f1}button,input{font:inherit}.shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:256px;padding:25px 18px;background:#211d35;color:#f7f4fb;display:flex;flex-direction:column;z-index:5}.logo{display:flex;align-items:center;gap:12px;padding:0 8px 24px;border-bottom:1px solid #3a344e}.logo>span{width:36px;height:36px;display:grid;place-items:center;border-radius:7px;background:#963951;color:#fff;font-weight:800}.logo b{display:block;font-size:14px;letter-spacing:.04em}.logo small{display:block;margin-top:3px;color:#aaa3b8;font-size:10px}.sidebar nav{display:grid;gap:3px;margin-top:22px}.sidebar nav label{margin:0 10px 7px;color:#898195;font-size:9px;font-weight:700;letter-spacing:.12em}.sidebar nav button{min-height:42px;padding:0 11px;border:0;border-radius:5px;background:transparent;color:#c1bacd;display:flex;align-items:center;gap:10px;text-align:left;font-size:12px;font-weight:600;cursor:pointer}.sidebar nav button:hover{background:#2b263e;color:#fff}.sidebar nav button.active{background:#fff;color:#2b263d}.sidebar nav button i{width:22px;color:#81798f;font-size:9px;font-style:normal}.sidebar nav button em{margin-left:auto;padding:2px 6px;border-radius:8px;background:#eeeaf2;color:#6d6578;font-size:9px;font-style:normal}.sidebar-foot{margin-top:auto;padding:14px;border:1px solid #3b354f;background:#27223a}.sidebar-foot span{font-size:10px;font-weight:700}.sidebar-foot span i{display:inline-block;width:6px;height:6px;margin-right:7px;border-radius:50%;background:#63b982}.sidebar-foot small{display:block;margin-top:9px;color:#9891a6;font-size:9px;line-height:1.6}.shell>main{min-height:100vh;margin-left:256px}.shell>main>header{height:64px;padding:0 32px;border-bottom:1px solid #e3e0e6;background:#fff;display:flex;align-items:center;justify-content:space-between}.shell>main>header b{display:block;font-size:13px}.shell>main>header div>span{display:block;margin-top:3px;color:#8a8490;font-size:10px}.content{max-width:1440px;margin:0 auto;padding:27px 32px 55px}.page-title{display:flex;justify-content:space-between;gap:30px;align-items:flex-end;margin-bottom:22px}.page-title>div>span{color:#963951;font-size:10px;font-weight:800}.page-title h1{margin:5px 0 6px;font-size:25px;letter-spacing:-.035em}.page-title p{margin:0;color:#77717e;font-size:12px}.title-actions{display:flex;gap:8px}.btn{min-height:38px;padding:0 14px;border-radius:4px;font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.btn input{display:none}.primary{border:1px solid #8f3249;background:#8f3249;color:#fff}.primary:hover{background:#75283c}.secondary{border:1px solid #d8d4dc;background:#fff;color:#514b57}.secondary:hover{border-color:#aaa4af}.link{padding:0;border:0;background:transparent;color:#8c3047;font-size:11px;font-weight:700;cursor:pointer}.status{width:max-content;display:inline-flex;padding:4px 7px;border-radius:3px;background:#efedf1;color:#665f6c;font-size:9px;font-weight:700}.status-good{background:#e5f1e9;color:#34704e}.status-warn{background:#faf0dc;color:#91601c}.status-danger{background:#f7e5e8;color:#a03945}.session-summary{display:flex;justify-content:space-between;gap:30px;padding:18px 21px;border:1px solid #e0dde4;background:#fff}.session-summary>div>span{display:block;color:#88818d;font-size:9px}.session-summary>div>b{display:block;margin:5px 0 3px;font-size:18px}.session-summary>div>small{color:#77717d;font-size:10px}.session-summary dl{display:flex;margin:0}.session-summary dl>div{min-width:104px;padding:2px 18px;border-left:1px solid #e6e2e8}.session-summary dt{color:#88828d;font-size:9px}.session-summary dd{margin:6px 0 0;font-size:11px;font-weight:700}.kpis{display:grid;grid-template-columns:repeat(5,1fr);margin:12px 0;border:1px solid #e0dde4;background:#fff}.kpis article{padding:17px 18px;border-right:1px solid #e6e2e8}.kpis article:last-child{border:0}.kpis span{display:block;color:#77717d;font-size:10px}.kpis strong{display:block;margin:7px 0 2px;font-size:25px;line-height:1;font-variant-numeric:tabular-nums}.kpis strong i{margin-left:3px;color:#8a8490;font-size:10px;font-style:normal}.kpis small{color:#96909a;font-size:9px}.two-col{display:grid;grid-template-columns:1.1fr .9fr;gap:12px;margin-bottom:12px}.panel{border:1px solid #e0dde4;background:#fff}.panel-head{min-height:62px;padding:17px 19px;border-bottom:1px solid #e8e5e9;display:flex;align-items:flex-start;justify-content:space-between}.panel-head h2{margin:0 0 4px;font-size:14px}.panel-head p{margin:0;color:#89838e;font-size:10px}.issue-list{display:grid}.issue-list>button{min-height:61px;padding:10px 18px;border:0;border-bottom:1px solid #ece9ed;background:#fff;display:grid;grid-template-columns:54px 1fr 65px;gap:10px;align-items:center;text-align:left;color:#39343f;cursor:pointer}.issue-list>button:hover{background:#faf9fa}.issue-list>button:last-child{border:0}.issue-list b{display:block;font-size:11px}.issue-list div>span{display:block;margin-top:4px;color:#7f7984;font-size:9px}.issue-list time{color:#827c87;font-size:9px;text-align:right}.issue-list.all>button{min-height:68px}.timeline{padding-bottom:12px}.legend{color:#89838e;font-size:9px}.legend i{display:inline-block;width:6px;height:6px;margin:0 4px;border-radius:50%;background:#63b982}.legend i+*{}.track-row{height:37px;padding:0 18px;display:grid;grid-template-columns:82px 1fr 30px;gap:10px;align-items:center}.track-row b{color:#625c68;font-size:9px}.track-row small{color:#8c8690;font-size:8px}.track{height:5px;background:#e3eee6;position:relative}.track span{position:absolute;top:-3px;width:11px;height:11px;border:3px solid #fff;border-radius:50%;background:#b54450;box-shadow:0 0 0 1px #b54450}.table-panel{margin-top:0}.count{color:#827c87;font-size:10px}.data-table{overflow-x:auto}.table-row{min-width:850px;min-height:54px;padding:7px 15px;border:0;border-bottom:1px solid #e9e6ea;background:#fff;display:grid;grid-template-columns:1.1fr 1.2fr 1.45fr .65fr .45fr .75fr;gap:12px;align-items:center;text-align:left;color:#4b4651;font-size:10px}.table-row:not(.table-head){cursor:pointer}.table-row:not(.table-head):hover,.table-row.selected{background:#fbf6f7;box-shadow:inset 3px 0 #963951}.table-head{min-height:30px;background:#f4f2f5;color:#817b86;font-size:8px;font-weight:700}.table-row b{color:#342f3a}.table-row small{display:block;margin-top:3px;color:#918b95;font-size:8px}.table-row strong{font-size:11px}.upload-panel{display:grid;grid-template-columns:1.35fr .65fr;min-height:390px}.dropzone{margin:24px;padding:55px 30px;border:1px dashed #cfc9d2;background:#faf9fa;display:flex;flex-direction:column;align-items:center;text-align:center}.upload-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:50%;background:#eee9ed;color:#91334a;font-size:22px}.dropzone h2{margin:15px 0 7px;font-size:18px}.dropzone p{margin:0 0 18px;color:#7c7681;font-size:11px}.dropzone .link{margin-top:13px}.schema{padding:30px;border-left:1px solid #e5e2e7}.schema h3{margin:0 0 16px;font-size:13px}.schema code{display:block;margin-bottom:6px;padding:7px 9px;background:#f3f1f4;color:#5d5662;font-size:9px}.schema .btn{margin-top:12px}.error{margin-top:12px;padding:13px 16px;border:1px solid #edc8ce;background:#fff3f4;color:#812e39;display:grid;grid-template-columns:auto 1fr auto;gap:12px;font-size:10px}.error button{border:0;background:none;color:#812e39;font-weight:700}.rules-panel{margin-bottom:12px}.rule-row{min-height:58px;padding:8px 18px;border-bottom:1px solid #e9e6ea;display:grid;grid-template-columns:1fr 2fr .5fr .65fr;gap:15px;align-items:center;font-size:10px}.rule-head{min-height:30px;background:#f4f2f5;color:#817b86;font-size:8px;font-weight:700}.rule-row b{font-size:11px}.rule-row>span{color:#736d78}.sensor-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.sensor-card{min-height:115px;padding:21px;display:grid;grid-template-columns:48px 1fr auto;gap:15px;align-items:center}.sensor-card>span{width:44px;height:38px;display:grid;place-items:center;background:#f0edf2;color:#615a66;font-size:10px;font-weight:800}.sensor-card h2{margin:0 0 5px;font-size:14px}.sensor-card p{margin:0;color:#817b86;font-size:10px}.calibration{margin:0}.calibration-view{padding:20px}.road{height:350px;position:relative;overflow:hidden;background:linear-gradient(#dbe4e7 0 47%,#a8afb2 47% 100%)}.horizon{position:absolute;left:0;right:0;top:47%;border-top:2px solid #8f999d}.lane{position:absolute;bottom:-30px;width:4px;height:230px;background:#f7f5e8;transform-origin:bottom}.l1{left:42%;transform:rotate(8deg)}.l2{right:42%;transform:rotate(-8deg)}.road i{position:absolute;width:4px;height:4px;border-radius:50%;background:#8d3048}.target{position:absolute;left:42%;top:45%;width:105px;height:62px;border:2px solid #8d3048;color:#8d3048;font-size:8px}.road>span{position:absolute;left:10px;top:10px;padding:5px 7px;background:#fff;color:#655e69;font-size:8px}.meta{padding:24px}.meta h2{margin:0 0 16px;font-size:15px}.meta dl{margin:0}.meta dl>div{padding:12px 0;border-top:1px solid #e8e5e9;display:flex;justify-content:space-between}.meta dt{color:#817b86;font-size:10px}.meta dd{margin:0;font-size:10px;font-weight:700}.notice{margin:17px 0 0;padding:12px;border-left:3px solid #c8993f;background:#faf5e9;color:#716958;font-size:9px;line-height:1.6}.report{max-width:900px;margin:0 auto;padding:28px}.report-hero{padding-bottom:23px;border-bottom:1px solid #e6e2e7;display:flex;justify-content:space-between;align-items:center}.report-hero span{color:#807a85;font-size:9px}.report-hero h2{margin:5px 0;font-size:22px;color:#8d3048}.report-hero p{margin:0;color:#77717c;font-size:11px}.report-hero>strong{font-size:46px}.report-hero>strong i{font-size:11px;color:#8d8791;font-style:normal}.report-cols{display:grid;grid-template-columns:1fr 1fr;gap:40px;padding-top:25px}.report-cols h3{font-size:13px}.report-cols ul{padding-left:18px;color:#625c67;font-size:10px;line-height:2}.empty{padding:35px;color:#89838e;text-align:center;font-size:11px}.modal-bg{position:fixed;inset:0;z-index:20;background:#241f32aa;display:flex;justify-content:flex-end}.drawer{width:min(440px,100%);height:100%;padding:30px;background:#fff;position:relative;overflow:auto}.close{position:absolute;right:20px;top:18px;border:0;background:none;color:#77717c;font-size:24px;cursor:pointer}.drawer h2{margin:15px 0 7px;font-size:22px}.drawer>p{color:#6f6974;font-size:11px;line-height:1.7}.drawer dl{margin:20px 0}.drawer dl>div{padding:12px 0;border-top:1px solid #e7e3e8;display:flex;justify-content:space-between}.drawer dt{color:#817b86;font-size:10px}.drawer dd{margin:0;font-size:10px;font-weight:700}.drawer h3{font-size:13px}.drawer-actions{display:grid;gap:7px}.drawer-actions button{min-height:41px;border:1px solid #d8d3db;background:#fff;color:#4e4854;font-size:11px;font-weight:700;cursor:pointer}.drawer-actions button:first-child{background:#8d3048;border-color:#8d3048;color:#fff}.reviewed{margin-top:12px;padding:12px;background:#edf4ef;color:#3c7150;font-size:10px;font-weight:700}.toast{position:fixed;right:22px;bottom:22px;z-index:30;padding:12px 16px;background:#282337;color:#fff;font-size:10px;box-shadow:0 10px 30px #211d3533}
@media(max-width:1100px){.kpis{grid-template-columns:repeat(3,1fr)}.kpis article:nth-child(3){border-right:0}.two-col{grid-template-columns:1fr}.session-summary{align-items:flex-start}.session-summary dl{display:grid;grid-template-columns:1fr 1fr}.sensor-grid{grid-template-columns:1fr}}
.menu-trigger,.sidebar-close,.sidebar-backdrop{display:none}@media(max-width:760px){.sidebar{position:fixed;width:272px;padding:22px 18px;transform:translateX(-105%);transition:transform .22s ease;box-shadow:14px 0 40px #17132133;z-index:30}.sidebar.open{transform:translateX(0)}.logo{padding-bottom:22px}.sidebar-close{display:block;margin-left:auto;border:0;background:transparent;color:#c8c1d2;font-size:25px;cursor:pointer}.sidebar nav{display:grid;margin-top:18px}.sidebar nav label,.sidebar-foot{display:block}.sidebar nav button{min-height:43px}.sidebar-backdrop{display:block;position:fixed;inset:0;z-index:25;border:0;background:#211d3570}.shell>main{margin:0}.shell>main>header{height:58px;padding:0 16px;justify-content:flex-start;gap:12px}.shell>main>header>.status{margin-left:auto}.menu-trigger{width:38px;height:38px;padding:9px;display:grid;align-content:center;gap:4px;border:1px solid #ddd9e1;border-radius:5px;background:#fff;cursor:pointer}.menu-trigger i{display:block;height:2px;background:#332d40}.content{padding:20px 15px 40px}.page-title{align-items:flex-start;flex-direction:column;gap:14px}.page-title h1{font-size:22px}.title-actions{width:100%}.title-actions .btn{flex:1}.session-summary{display:grid;gap:14px}.session-summary dl{width:100%}.session-summary dl>div{min-width:0;padding:7px 10px}.kpis{grid-template-columns:1fr 1fr}.kpis article,.kpis article:nth-child(3){border-right:1px solid #e6e2e8;border-bottom:1px solid #e6e2e8}.kpis article:nth-child(even){border-right:0}.kpis article:last-child{grid-column:1/-1;border:0}.upload-panel{grid-template-columns:1fr}.dropzone{margin:14px;padding:35px 16px}.schema{border:0;border-top:1px solid #e5e2e7}.sensor-card{grid-template-columns:46px 1fr}.sensor-card .status{grid-column:2}.report{padding:20px}.report-cols{grid-template-columns:1fr;gap:12px}.report-hero>strong{font-size:36px}.error{grid-template-columns:1fr auto}.error span{grid-column:1/-1}.rule-row{grid-template-columns:1fr 1.6fr .5fr}.rule-row>*:last-child{display:none}}
.logo>span,.logo>div{display:none}.logo::before{content:'MOBILTECH';color:#087bd5;font-family:Arial,sans-serif;font-size:22px;font-weight:700;letter-spacing:.025em;line-height:36px}.logo .sidebar-close{margin-left:auto}

/* Submission-grade visual system */
:root{color:#172033;background:#f4f7fb}html,body,#root{background:#f4f7fb}.sidebar{background:#151a22;color:#fff;padding:28px 20px;width:264px}.logo{padding:0 8px 27px;border-color:#2a313c}.logo::before{font-size:23px;letter-spacing:.035em}.sidebar nav{gap:5px;margin-top:24px}.sidebar nav label{color:#778292;font-size:10px}.sidebar nav button{min-height:44px;border-radius:8px;color:#aeb7c5;font-size:13px;transition:.18s ease}.sidebar nav button:hover{background:#202733}.sidebar nav button.active{background:#087bd5;color:#fff;box-shadow:0 8px 22px #087bd538}.sidebar nav button.active i{color:#b9e0ff}.sidebar nav button em{background:#ffffff25;color:#fff}.sidebar-foot{border-color:#2c3440;background:#1b212b;border-radius:9px}.shell>main{margin-left:264px}.shell>main>header{height:70px;padding:0 36px;border-color:#e3e9f1;box-shadow:0 1px 0 #e7ebf1;background:#ffffffeb;backdrop-filter:blur(12px)}.content{padding:34px 36px 70px}.page-title{margin-bottom:26px}.page-title>div>span{color:#087bd5;font-size:11px}.page-title h1{margin-top:7px;font-size:29px;color:#172033}.page-title p{font-size:13px;color:#6d7889}.btn{min-height:42px;padding:0 17px;border-radius:8px;font-size:12px}.primary{border-color:#087bd5;background:#087bd5}.primary:hover{background:#0068b8}.secondary{border-color:#d7dee8}.panel,.session-summary,.kpis{border-color:#e1e7ef;border-radius:12px;box-shadow:0 4px 18px #1a355008;overflow:hidden}.session-summary{padding:22px 24px}.session-summary>div>b{font-size:20px}.session-summary dl>div{border-color:#e6ebf2}.kpis{margin:14px 0;gap:0}.kpis article{padding:21px 20px;border-color:#e7ecf2}.kpis strong{font-size:28px;color:#172033}.kpis article:first-child strong{color:#087bd5}.two-col{gap:14px;margin-bottom:14px}.panel-head{min-height:69px;padding:19px 21px}.panel-head h2{font-size:15px;color:#202a3a}.panel-head p{font-size:11px}.issue-list>button{min-height:66px;padding:12px 20px;transition:.15s}.issue-list>button:hover{background:#f5f9ff}.status{border-radius:999px;padding:5px 9px}.status-danger{background:#fff0f1;color:#ba3545}.status-warn{background:#fff6df;color:#95651e}.status-good{background:#e9f7ef;color:#247247}.table-row{min-height:58px}.table-row:not(.table-head):hover,.table-row.selected{background:#f2f8ff;box-shadow:inset 3px 0 #087bd5}.table-head{background:#f5f7fa}.toast{border-radius:9px;background:#172033}.dropzone{border-radius:10px;background:#f8fbff}.upload-icon{background:#e5f3ff;color:#087bd5}.report-hero h2{color:#087bd5}.road i,.target{border-color:#087bd5;color:#087bd5}.road i{background:#087bd5}@media(max-width:760px){.sidebar{width:280px}.shell>main{margin:0}.content{padding:24px 16px 50px}.page-title h1{font-size:25px}.kpis strong{font-size:25px}}
