@import url("https://cdn.jsdelivr.net/gh/sunn-us/SUIT/fonts/variable/woff2/SUIT-Variable.css");@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css");:root{color-scheme:light;--bg-base:#f5f5f7;--surface:#ffffff;--surface-soft:#fbfbfd;--ink:#1d1d1f;--muted:#6e6e73;--faint:#86868b;--line:rgba(0,0,0,0.08);--blue:#0066cc;--green:#00a36c;--risk-s:#e30000;--label-width:38px;--track-row-height:42px;--structure-row-height:36px;--block-height:30px;--block-radius:8px;--c-earth:rgba(229,178,0,0.65);--c-bridge:rgba(0,85,255,0.65);--c-tunnel:rgba(72,210,120,0.72);--c-pave:rgba(230,51,34,0.65);--c-etc:rgba(100,116,139,0.65);--font-ui:"SUIT Variable","Pretendard Variable",Pretendard,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",system-ui,sans-serif;--font-display:"SF Pro Display","SUIT Variable","Pretendard Variable",Pretendard,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;--font-mono:"IBM Plex Mono","SF Mono","Cascadia Mono","Roboto Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--transition:0.32s cubic-bezier(0.2,0.8,0.2,1);font-family:var(--font-ui)}*{box-sizing:border-box}html{background:var(--bg-base)}body{min-width:320px;margin:0;color:var(--ink);background:radial-gradient(circle at 50% -8%,rgba(255,255,255,.96) 0 18%,transparent 46%),linear-gradient(180deg,#ffffff,#f5f5f7 42%,#f5f5f7);letter-spacing:-.012em;text-rendering:geometricPrecision;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,select{font:inherit}button{color:inherit}h1,h2,h3,h4,p{margin:0}.dashboard-shell{width:min(1480px,calc(100% - 24px));margin:0 auto;padding:28px 0 72px}.hero-panel{position:relative;min-height:300px;padding:54px clamp(26px,5vw,84px) 34px;border-radius:34px;overflow:hidden;background:radial-gradient(circle at 50% 12%,rgba(255,255,255,.98) 0 11%,rgba(255,255,255,.56) 23%,transparent 41%),linear-gradient(180deg,#fbfbfd,#ffffff 38%,#edf1f7);box-shadow:0 40px 90px rgba(0,0,0,.08),0 10px 28px rgba(0,0,0,.05),inset 0 1px 0 rgba(255,255,255,.9);text-align:center}.hero-panel:before{position:absolute;left:50%;bottom:-150px;width:min(760px,76vw);height:240px;border-radius:999px 999px 0 0;content:"";transform:translateX(-50%);background:linear-gradient(180deg,rgba(255,255,255,.85),rgba(245,245,247,.4)),radial-gradient(circle at 50% 0,rgba(0,102,204,.2),transparent 52%);box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 -18px 70px rgba(0,102,204,.11);pointer-events:none}.hero-panel>*{position:relative;z-index:2}h1{max-width:920px;margin:0 auto;font-size:clamp(44px,7.4vw,90px);font-weight:800;letter-spacing:-.06em;line-height:.96}h1,h2{color:#1d1d1f;font-family:var(--font-display)}h2{font-size:clamp(30px,4.4vw,56px);font-weight:760;letter-spacing:-.05em;line-height:1.03}.hero-subtitle{max-width:680px;margin:18px auto 0;color:#6e6e73;font-size:clamp(18px,2.3vw,26px);font-weight:600;letter-spacing:-.03em;line-height:1.22}.hero-subtitle .sta{display:block;margin-top:8px;color:#1d1d1f;font-family:var(--font-ui);font-size:.62em;font-weight:500}.hero-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:13px;margin-top:22px}.contract-pill,.hero-controls label{display:inline-flex;align-items:center;min-height:42px;border:0;border-radius:999px;background:rgba(255,255,255,.78);color:#1d1d1f;box-shadow:0 10px 24px rgba(0,0,0,.07),inset 0 0 0 1px rgba(0,0,0,.06),inset 0 1px 0 rgba(255,255,255,.9);-webkit-backdrop-filter:saturate(180%) blur(16px);backdrop-filter:saturate(180%) blur(16px);font-size:14px;font-weight:700}.hero-controls label{gap:10px;padding:5px 8px 5px 17px}.hero-controls input{height:30px;border:0;border-radius:999px;padding:0 11px;color:#1d1d1f;background:rgba(245,245,247,.9);font-family:var(--font-ui);font-size:12px;outline:none}.contract-pill{gap:9px;padding:0 17px;cursor:pointer}.upload-pill:hover{transform:translateY(-1px)}.live-dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px rgba(0,163,108,.12)}.contract-strip{display:flex;justify-content:flex-start;gap:10px;margin-top:36px;overflow-x:auto;padding-bottom:2px}.contract-tab{min-width:260px;min-height:56px;padding:11px 21px;border:0;border-radius:999px;background:rgba(255,255,255,.74);box-shadow:0 12px 28px rgba(0,0,0,.07),inset 0 0 0 1px rgba(0,0,0,.065);cursor:pointer;color:#1d1d1f;font-size:14px;font-weight:750;text-align:center;transition:transform var(--transition),box-shadow var(--transition),background var(--transition)}.contract-tab:hover{transform:translateY(-1px)}.contract-tab.is-active{background:#1d1d1f;color:#ffffff;box-shadow:0 18px 36px rgba(0,0,0,.16),inset 0 1px 0 rgba(255,255,255,.2)}.contract-tab.is-soon:not(.is-active){color:rgba(29,29,31,.54)}.contract-tab span{display:block;margin-top:4px;color:rgba(29,29,31,.48);font-family:var(--font-ui);font-size:10px;font-weight:500}.contract-tab.is-active span{color:rgba(255,255,255,.62)}.route-board-panel{margin-top:16px;padding:clamp(24px,3.4vw,48px) clamp(16px,2.2vw,32px);border-radius:34px;background:#ffffff;box-shadow:0 34px 78px rgba(0,0,0,.08),inset 0 0 0 1px rgba(0,0,0,.045)}.board-header{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;margin-bottom:28px}.board-header p{margin-top:8px;color:#86868b;font-family:var(--font-ui);font-size:14px}.status-message{max-width:360px;text-align:right}.route-board{display:grid;grid-gap:18px;gap:18px}.route-module{position:relative;overflow:hidden;padding:16px 10px;border-radius:28px;background:linear-gradient(180deg,#ffffff,#fbfbfd);box-shadow:0 22px 44px rgba(0,0,0,.075),0 6px 18px rgba(0,0,0,.045),inset 0 0 0 1px rgba(0,0,0,.055)}.module-board{overflow:visible;background:transparent}.ruler,.structure-group,.track-group{display:grid;grid-template-columns:var(--label-width) minmax(0,1fr)}.ruler{font-size:11px}.ruler-track{position:relative;height:64px;border-bottom:1px solid rgba(0,0,0,.14)}.tick{position:absolute;left:var(--left);bottom:0;z-index:3;width:1px;height:8px;background:rgba(0,0,0,.22);transform:translateX(-.5px)}.tick.major{width:2px;height:17px;background:#000000;transform:translateX(-1px)}.tick-label{position:absolute;left:var(--left);bottom:17px;color:#86868b;font-family:var(--font-ui);font-size:10px;font-weight:500;line-height:1;white-space:nowrap;transform:translate3d(-50%,0,0)}.tick.major .tick-label{bottom:24px;color:#000000;font-size:11px;font-weight:850}.tick.edge-start .tick-label{left:0;transform:translateZ(0)}.tick.edge-end .tick-label{left:0;transform:translate3d(-100%,0,0)}.tick.is-inactive{background:rgba(0,0,0,.08)}.tick.is-inactive .tick-label{color:rgba(134,134,139,.42)}.tick-label .lbl-short{display:none}.board-header p,.contract-tab span,.hero-controls input,.popup-id,.popup-meta .mono,.sta,.tick-label{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"kern" 1,"tnum"}.facility-marker{position:absolute;left:var(--left);bottom:-5px;z-index:6;display:grid;justify-items:center;min-width:104px;grid-gap:6px;gap:6px;color:#bf4800;font-size:13px;font-weight:800;line-height:1;white-space:nowrap;transform:translateX(-50%)}.facility-marker i{display:block;width:10px;height:10px;border-radius:3px;background:linear-gradient(145deg,#ff8a00,#bf4800);transform:rotate(45deg);box-shadow:0 4px 10px rgba(191,72,0,.22)}.structure-group,.track-group{border-bottom:1px solid rgba(0,0,0,.055)}.track-group:last-child{border-bottom:0}.track-label{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#6e6e73;font-size:10px;font-weight:800;line-height:1;text-align:center;white-space:nowrap}.dir-arrow{color:#0066cc;font-size:8px;letter-spacing:.22em}.track{position:relative;overflow:hidden;height:var(--track-row-height);background:#fbfbfd}.track:before{inset:6px 0;z-index:0;background:linear-gradient(180deg,rgba(245,245,247,.98),rgba(232,235,241,.8));box-shadow:inset 0 1px 2px rgba(0,0,0,.045)}.track:after,.track:before{position:absolute;content:""}.track:after{left:0;right:0;top:50%;z-index:1;height:1px;transform:translateY(-50%);background:repeating-linear-gradient(90deg,rgba(0,0,0,.14) 0 13px,transparent 13px 30px);pointer-events:none}.structure-track{position:relative;overflow:visible;height:var(--structure-row-height);background:#ffffff}.structure-track:before{position:absolute;left:0;right:0;top:50%;z-index:1;height:2px;border-radius:999px;content:"";background:linear-gradient(90deg,rgba(29,29,31,.52) 0 var(--active-percent),rgba(0,0,0,.08) var(--active-percent) 100%);transform:translateY(-50%)}.inactive-segment{position:absolute;top:0;bottom:0;left:var(--inactive-left);z-index:2;width:var(--inactive-width);background:rgba(255,255,255,.98);border-left:2px dotted rgba(29,29,31,.34);pointer-events:none}.structure-block{position:absolute;left:var(--left);top:calc((var(--structure-row-height) - 18px) / 2);z-index:4;display:flex;align-items:center;justify-content:center;overflow:visible;width:var(--width);min-width:18px;height:18px;padding:0 8px;border-radius:999px;color:#ffffff;background:linear-gradient(180deg,#424245,#1d1d1f);font-size:10px;font-weight:700;line-height:1;white-space:nowrap;box-shadow:0 6px 14px rgba(0,0,0,.16),inset 0 1px 0 rgba(255,255,255,.22)}.structure-block.tunnel-status{background:repeating-linear-gradient(45deg,rgba(255,255,255,.12) 0 6px,transparent 6px 12px),linear-gradient(180deg,#424245,#1d1d1f)}.structure-block.short{min-width:10px;padding:0}.structure-name{overflow:hidden;max-width:100%;text-overflow:ellipsis}.structure-block.short .structure-name{display:none}.type-earthDrain{--block-color:var(--c-earth);--label-color:#000000}.type-bridge{--block-color:var(--c-bridge);--label-color:#ffffff}.type-tunnel{--block-color:var(--c-tunnel);--label-color:#ffffff}.type-paving{--block-color:var(--c-pave);--label-color:#ffffff}.type-other{--block-color:var(--c-etc);--label-color:#ffffff}.work-block{position:absolute;left:var(--left);top:calc((var(--track-row-height) - var(--block-height)) / 2);z-index:5;display:flex;align-items:center;width:var(--width);min-width:2px;height:var(--block-height);padding:0;border:1px solid rgba(255,255,255,.4);border-radius:var(--block-radius);background-color:var(--block-color);box-shadow:0 4px 12px rgba(0,0,0,.03);cursor:pointer;transition:var(--transition)}.work-block:after{position:absolute;inset:0;border-radius:inherit;content:"";background:linear-gradient(180deg,rgba(255,255,255,.18),transparent 56%);pointer-events:none}.work-block:hover{z-index:12;transform:translateY(-2px);box-shadow:0 10px 22px rgba(0,0,0,.13)}.work-block.selected{z-index:14;border-color:rgba(0,0,0,.74);filter:brightness(1.04);box-shadow:0 16px 32px rgba(0,0,0,.18)}.work-block.risk-s{border-color:rgba(227,0,0,.82);box-shadow:0 0 0 1px rgba(227,0,0,.18),0 0 18px rgba(227,0,0,.14)}.overlap-mask{position:absolute;left:var(--left);top:calc((var(--track-row-height) - var(--block-height)) / 2);z-index:20;width:var(--width);min-width:3px;height:var(--block-height);padding:0;border:0;border-radius:var(--block-radius);background:repeating-linear-gradient(45deg,rgba(255,255,255,.72) 0 5px,rgba(255,255,255,.16) 5px 10px);cursor:pointer}.legend{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0 10px}.legend-item{display:inline-flex;align-items:center;gap:7px;color:#6e6e73;font-size:12px;font-weight:750}.color-box{width:24px;height:12px;border-radius:999px;background:var(--block-color)}.other-module-board{min-height:184px;display:grid;grid-gap:12px;gap:12px}.other-module-title{display:flex;align-items:center;justify-content:flex-start;gap:14px;min-height:36px;padding:0 2px 8px;border-bottom:1px solid rgba(0,0,0,.06)}.other-module-title strong{color:#1d1d1f;font-family:var(--font-display);font-size:18px;font-weight:780}.other-module-title span{color:#86868b;font-size:12px;font-weight:700;white-space:nowrap}.other-work-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:10px;gap:10px}.other-work-card{min-height:124px;padding:16px 15px;border-radius:18px;background:linear-gradient(180deg,rgba(255,255,255,.82),rgba(245,245,247,.72));box-shadow:inset 0 0 0 1px rgba(0,0,0,.045),0 8px 18px rgba(0,0,0,.04)}.other-work-card b{display:block;margin-bottom:8px;color:#1d1d1f;font-size:14px;font-weight:800;line-height:1.22}.empty-inline,.other-work-card p{color:#6e6e73;font-size:12px;font-weight:650;line-height:1.45}.empty-state{display:grid;grid-gap:5px;gap:5px;margin-bottom:18px;padding:18px 20px;border-radius:18px;background:#f5f5f7;box-shadow:inset 0 0 0 1px rgba(0,0,0,.045)}.empty-state b{font-size:15px}.empty-state span{color:#6e6e73;font-size:13px}.detail-backdrop{position:fixed;inset:0;z-index:90;background:rgba(245,245,247,.45);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.detail-popup,.upload-modal{position:fixed;left:50%;top:50%;z-index:100;width:min(520px,calc(100% - 30px));max-height:min(86vh,760px);overflow:auto;padding:28px;border-radius:28px;background:rgba(255,255,255,.84);box-shadow:0 34px 90px rgba(0,0,0,.2),inset 0 0 0 1px rgba(255,255,255,.72);-webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px);transform:translate(-50%,-50%)}.popup-id{color:#86868b;font-family:var(--font-ui);font-size:14px;font-weight:700}.detail-popup h3{font-size:32px}.detail-popup h3,.upload-modal h3{margin-top:8px;color:#1d1d1f;font-family:var(--font-display);font-weight:780;letter-spacing:-.04em;line-height:1.05}.upload-modal h3{font-size:30px}.popup-stack{display:grid;grid-gap:16px;gap:16px;margin-top:20px}.popup-meta{display:grid;grid-gap:9px;gap:9px;padding-top:16px;border-top:1px solid rgba(0,0,0,.08)}.popup-meta:first-child{padding-top:0;border-top:0}.popup-meta h4{color:#1d1d1f;font-size:17px;font-weight:850}.popup-meta p{display:flex;justify-content:space-between;gap:18px;color:#1d1d1f;font-size:15px;line-height:1.4}.popup-meta b{flex:0 0 auto;color:#86868b;font-size:14px}.popup-meta .mono{font-family:var(--font-ui)}.popup-note{display:block!important;padding-top:8px;color:#6e6e73!important}.close-btn,.ghost-btn{min-height:42px;border:0;border-radius:999px;padding:0 18px;cursor:pointer;font-size:13px;font-weight:800}.close-btn{margin-top:22px;background:#0071e3;color:#ffffff;box-shadow:0 12px 24px rgba(0,113,227,.22)}.close-btn:disabled{opacity:.55;cursor:wait}.ghost-btn{margin-top:22px;background:rgba(0,0,0,.06);color:#1d1d1f}.upload-modal form{display:grid;grid-gap:15px;gap:15px}.upload-header p{color:#bf4800;font-size:13px;font-weight:800}.upload-modal label{display:grid;grid-gap:7px;gap:7px;color:#6e6e73;font-size:12px;font-weight:800}.upload-modal input,.upload-modal select{min-height:42px;border:0;border-radius:14px;padding:0 13px;color:#1d1d1f;background:rgba(245,245,247,.9);box-shadow:inset 0 0 0 1px rgba(0,0,0,.07)}.upload-feedback{margin:0;padding:13px;border-radius:14px;overflow:auto;background:rgba(0,0,0,.055);color:#1d1d1f;font-family:var(--font-ui);font-size:12px;white-space:pre-wrap}.upload-actions{display:flex;justify-content:flex-end;gap:10px}.apple-footer{width:min(980px,calc(100% - 40px));margin:46px auto 0;padding:18px 0 0;border-top:1px solid rgba(0,0,0,.08);color:#86868b;font-size:12px;line-height:1.45}@media (max-width:1024px){.dashboard-shell{width:min(100% - 20px,1280px)}.tick.tablet-hide{display:none}.facility-marker{min-width:88px;font-size:12px}.hero-panel{min-height:280px}}@media (max-width:820px){.board-header{align-items:flex-start;flex-direction:column}.status-message{text-align:left}.other-work-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){:root{--block-height:30px;--track-row-height:34px;--label-width:28px}.dashboard-shell{width:min(100% - 20px,720px);padding-top:22px}.hero-panel{min-height:260px;padding:38px 20px 28px;border-radius:28px}.other-work-list{grid-template-columns:1fr}.other-module-title{align-items:flex-start;flex-direction:column;gap:4px}.tick:not(.major){display:none}.tick.major .tick-label{font-size:10px}.tick-label .lbl-full{display:none}.tick-label .lbl-short{display:inline}.facility-marker{bottom:-4px;min-width:76px;font-size:11px}.facility-marker i{width:8px;height:8px}.popup-meta p{align-items:flex-start;flex-direction:column;gap:3px}.contract-tab{min-width:0;width:100%}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation:none!important;transition:none!important}}