:root{--navy:#18263f;--blue:#285ee8;--bg:#f4f6fa;--line:#e3e8f0;--ink:#19263b;--muted:#607086;--green:#14775c;--amber:#8c5a00;--red:#b33643}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Pretendard,Noto Sans KR,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.6}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}a,button,input,select,textarea{outline-offset:3px}a:focus-visible,button:focus-visible{outline:3px solid #77a1ff}button{border:1px solid var(--line);border-radius:8px;padding:9px 13px;min-height:42px;background:#fff;color:var(--ink)}button:hover{background:#f1f5ff;border-color:#bbc9e6}.primary{background:var(--blue);border-color:var(--blue);color:#fff}.primary:hover{background:#174ed4;color:#fff}.danger{color:var(--red)}.ghost{background:transparent}.muted{color:var(--muted)}.small{font-size:12px}.demo-bar{background:#e9efff;color:#24437c;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 24px;border-bottom:1px solid #d9e3fc;position:relative;z-index:2}.demo-bar strong{font-size:12px;letter-spacing:.02em}.demo-bar button{font-size:12px;min-height:32px;padding:4px 10px}.demo-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.demo-bar select{padding:5px 8px;border:1px solid #c4d2f0;border-radius:7px;max-width:170px;background:#fff;font-size:12px}.shell{display:grid;grid-template-columns:218px minmax(0,1fr);min-height:calc(100vh - 54px)}aside{background:var(--navy);color:#fff;padding:30px 18px;display:flex;flex-direction:column;gap:28px}.brand{font-size:27px;font-weight:800;letter-spacing:3px;padding:0 14px}.brand span{display:block;font-size:12px;font-weight:400;letter-spacing:.07em;color:#b9c8e0;margin-top:3px}.nav-label{color:#a9bad3;font-size:11px;margin:4px 14px 8px;letter-spacing:.08em}nav{display:flex;flex-direction:column;gap:6px}nav button{display:flex;align-items:center;gap:12px;border:0;text-align:left;background:transparent;color:#c8d5e8;min-height:46px;padding:10px 14px}nav button:hover{background:#263957}nav button.active{background:#315cce;color:#fff}nav svg{width:18px;height:18px;flex:none}.nav-count{margin-left:auto;background:#4f70c5;color:#fff;padding:0 7px;border-radius:5px;font-size:12px}.aside-bottom{margin-top:auto;padding:18px 12px 0;border-top:1px solid #3b4860}.avatar{width:36px;height:36px;display:inline-flex;justify-content:center;border-radius:12px;background:#dce7ff;color:#2855aa;font-weight:700;margin-right:10px;flex:none}.avatar,.userline{align-items:center}.userline{display:flex}.userline small{display:block;color:#a9bad3}.aside-bottom button{background:transparent;border:0;color:#c8d5e8;padding-left:0;font-size:12px}main{min-width:0;padding:32px clamp(18px,3vw,44px) 48px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.eyebrow{color:#607086;letter-spacing:.1em;font-size:11px;font-weight:700}h1{font-size:28px;line-height:1.3;margin:6px 0 8px;letter-spacing:-1px}h2{font-size:18px}h2,h3{margin:0 0 10px}h3{font-size:15px}p{margin:0 0 10px}.head-sub{color:var(--muted);margin:0}.metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:0 0 26px}.metric{padding:16px 18px;text-align:left;border:1px solid var(--line);border-radius:12px;background:#fff}.metric strong{display:block;font-size:28px;line-height:1.4;letter-spacing:-1px;color:var(--ink)}.metric small{color:var(--muted)}.metric.selected{border-color:#92b1ff;box-shadow:0 0 0 1px #92b1ff}.metric.alert strong{color:var(--red)}.metric.accent strong{color:var(--blue)}.metric .metric-label{word-break:keep-all;display:flex;align-items:center;justify-content:space-between;color:#526078;font-size:13px}.dot{width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block;margin-right:5px}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}.toolbar h2{margin:0 auto 0 0}.search{min-width:190px;max-width:330px;flex:1 1}.toolbar select{max-width:170px}input,select,textarea{min-height:42px;border:1px solid #d6deea;background:#fff;border-radius:8px;padding:9px 11px;color:var(--ink);width:100%}input:focus,select:focus,textarea:focus{outline:2px solid #aac0f7;border-color:#6a91ef}textarea{resize:vertical;min-height:85px}.panel{background:#fff;border:1px solid var(--line);border-radius:13px;overflow:hidden}.panel-pad{padding:22px}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th{background:#f9fafc;text-align:left;color:#66758a;font-weight:500;padding:13px 16px;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:17px 16px;border-bottom:1px solid #edf0f5;vertical-align:middle}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfcff}.jobtitle{font-weight:650;text-align:left;border:0;padding:0;min-height:0;background:none;color:#1c2f50;font-size:14px;display:block}.jobtitle:hover{color:var(--blue);background:none}.jobsub{color:var(--muted);font-size:12px;margin-top:4px}.badge{font-size:11px;font-weight:500;display:inline-flex;align-items:center;white-space:nowrap;background:#edf2fa;color:#526887;padding:3px 8px;border-radius:5px}.badge.blue{background:#eaf0ff;color:#2455c9}.badge.green{background:#e8f5ef;color:var(--green)}.badge.amber{background:#fff3d9;color:var(--amber)}.badge.red{background:#fdebef;color:var(--red)}.due{white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.due.late{color:var(--red);font-weight:600}.owner-chip{gap:6px;white-space:nowrap}.owner-chip,.owner-dot{display:inline-flex;align-items:center}.owner-dot{width:23px;height:23px;border-radius:50%;justify-content:center;background:#eef2f9;color:#526580;font-size:11px}.progress{margin-top:8px;background:#eaf0f7;height:4px;border-radius:4px;overflow:hidden;max-width:110px}.progress i{display:block;height:100%;background:#5b84ee}.table-footer{padding:12px 16px;border-top:1px solid var(--line);color:var(--muted);font-size:12px;display:flex;justify-content:space-between;gap:10px}.callout{border-radius:10px;background:#edf3ff;color:#36557f;padding:14px 16px;font-size:13px;margin-bottom:20px}.callout.warm{background:#fff5e3;color:#7f6022}.empty{text-align:center;padding:46px 20px;color:var(--muted)}.filter-chip{border-radius:7px;font-size:12px;min-height:34px;padding:5px 10px}.filter-chip.active{background:#eaf0ff;color:#2455c9;border-color:#b6cbff}.section-gap{margin-top:24px}.split{display:grid;grid-template-columns:1fr 1fr;gap:20px}.account-card h2{margin-bottom:8px}.account-card .role-description{color:var(--muted);margin-bottom:18px;font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .full{grid-column:1/-1}label.field{display:flex;flex-direction:column;gap:6px;font-weight:500;font-size:13px}.field small{color:var(--muted);font-weight:400}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}.form-error{color:var(--red);margin:12px 0 0;font-size:13px}.approval-row{display:grid;grid-template-columns:1.4fr 1fr 1.1fr auto;gap:14px;align-items:center;border-top:1px solid var(--line);padding:18px 0}.approval-row:first-of-type{border-top:0}.approval-row button{min-width:60px}.inline-actions{display:flex;gap:8px;flex-wrap:wrap}.register-wrap{max-width:510px;margin:34px auto}.register-wrap .brand{color:var(--navy);text-align:center;padding-bottom:24px}.register-wrap .brand span{color:var(--muted)}.register-wrap h1{font-size:24px}.account-step{display:flex;gap:8px;align-items:center;justify-content:center;margin:20px 0;color:var(--muted);font-size:12px}.account-step span{border-radius:20px;background:#edf2fa;padding:6px 12px}.account-step .on{background:#e8efff;color:#285ee8}.waiting-icon{width:58px;height:58px;display:flex;align-items:center;justify-content:center;background:#eaf0ff;color:var(--blue);border-radius:50%;margin:0 auto 20px;font-size:28px}.drawer-backdrop{position:fixed;inset:0;background:#13213e66;z-index:20;display:flex;justify-content:flex-end}.drawer{background:#f8faff;width:min(760px,100%);height:100%;overflow:auto;padding:28px;box-shadow:-10px 0 40px #18263f22}.drawer-top{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}.drawer h2{font-size:23px;letter-spacing:-.5px}.drawer-meta{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 22px}.icon-button{min-height:38px;min-width:38px;padding:4px;flex:none;font-size:20px}.flow-line{display:flex;gap:6px;flex-wrap:wrap;padding-bottom:18px}.flow-stage{border-radius:5px;background:#eef1f6;color:#657389;padding:6px 10px;font-size:12px}.flow-stage.done{background:#e2f2ea;color:#186649}.flow-stage.open{background:#e5edff;color:#2a58bc}.task-group{margin:18px 0}.task-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.task-head h3{margin:0}.task-item{padding:12px 14px;border:1px solid var(--line);background:#fff;border-radius:9px;margin-top:7px}.task-line{display:flex;align-items:center;gap:10px}.task-label{flex:1 1;font-weight:500}.task-item.done .task-label{color:#6d7d89;text-decoration:line-through}.task-controls{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:10px}.task-controls input,.task-controls select{font-size:12px;min-height:35px;padding:5px 7px}.task-controls label{font-size:11px;color:var(--muted)}.check{width:23px;height:23px;min-height:23px;padding:0;border-radius:6px;flex:none;color:#fff}.check.is-done{background:#2b886c;border-color:#2b886c}.task-notes{color:#795a26;background:#fff5de;padding:6px 8px;border-radius:5px}.task-note-input,.task-notes{font-size:12px;margin-top:8px}.task-note-input{min-height:35px}.history-line{font-size:12px;padding:10px 0;border-bottom:1px solid var(--line);color:var(--muted)}.dialog-center{align-items:center;justify-content:center;padding:20px}.dialog-card{width:min(600px,100%);max-height:90vh;overflow:auto;border-radius:16px;padding:26px;background:#fff}.toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);padding:12px 20px;background:#18334f;color:#fff;border-radius:9px;z-index:50;max-width:90vw;font-size:13px;box-shadow:0 8px 30px #0002}.spec h2{margin-top:28px}.spec h2:first-child{margin-top:0}.spec li,.spec p{color:#4f6178;font-size:13px}.spec ul{padding-left:20px}.spec table{margin:12px 0}.spec code{background:#edf1f7;padding:2px 5px;border-radius:4px;font-size:12px}.mobile-jobs{display:none}.mobile-job{padding:18px;border-bottom:1px solid var(--line)}.mobile-job-top{gap:10px}.mobile-job-bottom,.mobile-job-top{display:flex;justify-content:space-between}.mobile-job-bottom{align-items:center;margin-top:12px;font-size:12px}.billing-list .inline-actions{margin-top:8px}.billing-status{gap:8px}.billing-status,.spec-header{display:flex;align-items:center}.spec-header{justify-content:space-between;gap:10px}.legend{display:flex;gap:12px;flex-wrap:wrap;color:var(--muted);font-size:12px;margin:12px 0}.hidden{display:none!important}@media(min-width:1500px){main{max-width:1570px;width:100%;margin:auto}}@media(max-width:1100px){.shell{grid-template-columns:185px minmax(0,1fr)}aside{padding:24px 12px}.brand{font-size:24px}.metrics{gap:8px}.metric{padding:12px}.metric .metric-label{font-size:12px}td,th{padding:14px 11px}.split{grid-template-columns:1fr}.approval-row{grid-template-columns:1.2fr 1fr 1fr}.approval-row .inline-actions{grid-column:1/-1;justify-content:flex-end}}@media(max-width:760px){.demo-bar{padding:9px 14px;align-items:flex-start;flex-direction:column;gap:6px}.demo-actions{gap:6px}.demo-actions select{max-width:130px}.shell{display:block}aside{padding:14px 16px;gap:13px;position:static}.brand{padding:0;font-size:23px}.brand span{display:inline;margin-left:12px;font-size:11px}.aside-bottom,.nav-label{display:none}nav{flex-direction:row;overflow:auto;gap:6px}nav button{min-width:max-content;min-height:39px;padding:8px 10px;font-size:12px;gap:6px}nav svg{width:15px;height:15px}main{padding:22px 15px 38px}.page-head{align-items:flex-start;margin-bottom:20px;gap:10px}h1{font-size:24px}.head-sub{font-size:12px}.page-head .primary{white-space:nowrap;font-size:12px;padding:8px 11px}.metrics{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:22px}.metric{padding:12px}.metric strong{font-size:25px}.metric small{font-size:11px}.metric-label>span:last-child{display:none}.toolbar .search{min-width:170px;max-width:none}.toolbar h2{flex-basis:100%}.toolbar select{max-width:140px;flex:1 1}.desktop-jobs{display:none}.mobile-jobs{display:block}.table-footer{flex-direction:column;gap:2px}.form-grid{grid-template-columns:1fr}.split{gap:16px}.panel-pad{padding:18px}.approval-row{grid-template-columns:1fr 1fr}.approval-row>div:first-child{grid-column:1/-1}.drawer{padding:20px 15px}.drawer h2{font-size:21px}.task-controls{grid-template-columns:1fr 1fr}.task-controls>label:last-child{grid-column:1/-1}.register-wrap{margin:20px auto}.register-wrap .brand span{display:block;margin:5px 0 0}.spec table{min-width:550px}.task-label{font-size:13px}.demo-bar>div:first-child small{display:none}.billing-list table{min-width:650px}.authenticated-only{display:none}.flow-stage{font-size:11px;padding:5px 7px}}@media print{body{background:#fff}.demo-bar,.form-actions,.metrics,.page-head button,.toolbar,aside{display:none}.shell{display:block}main{padding:0}.panel{border:0}.spec{font-size:12px}.spec h2{page-break-after:avoid;break-after:avoid}.spec table{page-break-inside:avoid;break-inside:avoid}.spec-header button{display:none}}.shell{min-height:100vh}.error-banner{border:1px solid #f0c5ca;background:#fff0f2;color:#a92e40;white-space:pre-wrap}.error-banner,.success-banner{padding:13px 16px;border-radius:9px;margin-bottom:18px}.success-banner{background:#e8f6ee;color:#1a6a4b}.loading{padding:80px 20px;text-align:center;color:#53647e}.task-save{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.task-title-input{font-weight:500}.task-line .task-label{font-size:14px}.detail-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0}.nav-toggle{display:none}.files-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.file-card{border:1px solid var(--line);border-radius:9px;padding:10px;min-width:0}.file-card img{width:100%;height:120px;object-fit:contain;background:#f6f8fa}.file-card a{overflow-wrap:anywhere;color:#285ee8;font-size:12px}.file-card .file-actions{display:flex;flex-wrap:wrap;gap:8px}.wide{grid-column:1/-1}.status-tag{margin-left:5px}.small-select{max-width:160px}.form-actions .secondary{background:#f7f9fd}.auth-links{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin-top:12px}.auth-links button{background:transparent;border:0;font-size:13px;color:var(--blue)}.auth-message{margin-bottom:18px}.check-label{display:flex;align-items:center;gap:9px}.check-label input{width:18px;min-height:18px}.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.detail-section{margin-top:22px}.task-add{margin-top:20px}.profile-readonly{background:#f3f5f9}.event-item{font-size:12px;border-bottom:1px solid var(--line);padding:10px 0}.form-title-row{display:flex;justify-content:space-between;align-items:center;gap:8px}button:disabled{cursor:wait}input,select,textarea{font-size:14px}.toolbar .views{display:flex;gap:5px;flex-wrap:wrap;flex:1 0 100%}.drawer .form-actions{margin-top:12px}.notice{background:#fff4de;border-radius:9px;padding:12px;color:#77561c;font-size:13px;margin-bottom:16px}.login-shell{max-width:490px;margin:auto;padding:44px 16px}.login-shell .brand{color:#19263b;text-align:center;padding:0 0 25px}.login-shell .brand span{color:#607086}.login-shell h1{font-size:24px}.logout{width:100%;margin-top:14px!important;border:1px solid #566780!important;padding:8px!important;border-radius:7px!important}.mobile-user{display:none}.role-note{font-size:12px;color:var(--muted)}.reset-code{padding:12px;background:#edf2fa;border-radius:8px;word-break:break-all;font-family:monospace}.search{min-width:180px}.filter-chip.current{background:#eaf0ff;color:#2455c9;border-color:#acc4ff}@media(max-width:760px){.mobile-user{display:block;color:#c3d1e8;font-size:12px}.mobile-user button{min-height:26px;padding:2px 8px;margin-left:8px;background:transparent;border:1px solid #65738c;color:#fff}.brand span{display:none}.files-grid{grid-template-columns:1fr 1fr}.action-grid{grid-template-columns:1fr}.page-head h1{font-size:23px}.drawer .task-controls{grid-template-columns:1fr 1fr}.login-shell .brand span{display:block;margin-top:6px}.mobile-job .jobtitle{max-width:100%}.approval-row{display:block}.approval-row label{margin-top:12px}.approval-row .inline-actions{margin-top:14px}.toolbar .views{gap:4px}.filter-chip{padding:5px 8px}.metric small{font-size:11px}.metric .metric-label{font-size:12px}.drawer{max-width:100vw}.form-grid .wide{grid-column:auto}}.delete-section{border:1px solid #efc8ce;background:#fff7f8;border-radius:12px;padding:14px 16px;margin:18px 0}.delete-section summary{color:#ad283f;font-weight:700;cursor:pointer}.danger-button{background:#b4233c;color:#fff;border-color:#b4233c}.danger-button:disabled{opacity:.45;cursor:not-allowed}.trash-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 0;border-top:1px solid #e7ecf4}.trash-row strong{overflow-wrap:anywhere}.trash-row button{flex-shrink:0}.contact-overview{font-size:13px;line-height:1.7;overflow-wrap:anywhere}.contact-overview p{margin:5px 0;color:#53647d}.quote-section .toolbar{gap:12px;flex-wrap:wrap}.quote-section h3,.settings-grid h2{margin-bottom:5px}.quote-item-list{display:grid;gap:12px;margin:18px 0}.quote-item{padding:15px;border:1px solid #dfe6f1;border-radius:9px;background:#f9fbff}.quote-line-amount{text-align:right;color:#2457a7;font-weight:700;margin:12px 0 0}.quote-totals{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:14px;padding:16px;background:#edf3ff;border-radius:8px;margin-top:16px;font-size:12px}.quote-totals strong{font-size:16px;color:#2355aa}.quote-attachments{border:1px solid #dde5f0;border-radius:8px;margin:18px 0;padding:13px;font-size:12px;min-width:0}.quote-attachments legend{font-weight:600}.quote-attachments label{display:flex;align-items:flex-start;gap:9px;padding:7px 0;overflow-wrap:anywhere}.quote-attachments input{width:16px!important;height:16px;flex:none;margin:2px 0 0}.quote-attachments span{min-width:0}.quote-attachments small{color:#718098}.quote-saved{background:#f4f7fd;padding:16px;border-radius:8px;font-size:13px}.quote-saved p{margin:8px 0}.quote-total{display:block;color:#2355aa;font-size:20px;margin-top:10px}.quote-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.button-link{display:inline-flex;align-items:center;justify-content:center;padding:9px 12px;border:1px solid #dfe6f1;border-radius:6px;text-decoration:none;color:#203756;font-size:12px;background:white}.button-link.primary{background:#2859e6;color:#fff;border-color:#2859e6}.quote-mail-form{margin-top:18px;padding:16px;border:1px solid #bdd0ed;border-radius:9px;background:#f9fbff}.quote-mail-form h4{margin:0 0 12px}.quote-mail-form p{line-height:1.7}.quote-mail-form p,.quote-section .event-item{overflow-wrap:anywhere}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.settings-grid form{min-width:0}@media(max-width:850px){.settings-grid{grid-template-columns:1fr}.quote-totals{justify-content:flex-start}.quote-actions>*{flex:1 1 42%}}.job-info-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.job-info-heading h3{margin:0}.job-info-section{margin-top:16px}.job-info-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;margin:18px 0}.job-info-grid div{min-width:0}.job-info-grid dt{font-size:11px;color:var(--muted);margin-bottom:5px}.job-info-grid dd{font-size:14px;font-weight:600;margin:0;overflow-wrap:anywhere}.job-brief{padding:13px 15px;background:#f4f7fd;border-radius:8px;font-size:13px}.job-brief p{white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0 0;line-height:1.7}.job-deadline-option{display:flex;align-items:flex-start;gap:10px;padding:13px;background:#edf3ff;border-radius:8px;margin-top:16px;font-size:13px}.job-deadline-option input{width:17px;height:17px;min-height:17px;flex:none;margin-top:2px}.job-deadline-option small{display:block;margin-top:5px;color:var(--muted)}.job-change-details{margin-top:8px;color:#53647d}.job-change-details summary{cursor:pointer;color:#2457a7}.job-change-details>div{padding:9px 0}.job-change-details p{white-space:pre-wrap;overflow-wrap:anywhere;margin:4px 0;line-height:1.6}.job-info-section .form-actions{flex-wrap:wrap}@media(max-width:420px){.job-info-grid{grid-template-columns:1fr}.job-info-heading .primary{width:100%}}