.app-shell{display:grid;grid-template-columns:var(--lnb-w) 1fr;grid-template-rows:var(--header-h) 1fr;height:100vh}.app-header{grid-column:1 / 3;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:var(--primary);color:#fff;box-shadow:var(--shadow-sm);z-index:10}.app-header .brand{font-size:17px;font-weight:700;letter-spacing:-.2px;display:flex;align-items:center;gap:8px}.app-header .brand .brand-mark{color:#8f7bff}.app-header .user{font-size:13px;display:flex;align-items:center;gap:12px;color:#cfd2e3}.app-header .user .logout{background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;border-radius:var(--radius);padding:5px 12px;font-size:13px;font-weight:600}.app-header .user .logout:hover{background:#fff3}.app-lnb{background:var(--surface);border-right:1px solid var(--line);padding:0;overflow-y:auto;display:flex;flex-direction:column}.lnb-logo{padding:18px 20px 12px;font-size:22px;font-weight:700;letter-spacing:-.5px;color:var(--black1);font-family:var(--font-brand)}.lnb-logo b{color:var(--info);font-weight:800}.lnb-user{margin:0 14px 8px;padding:12px;display:flex;align-items:center;gap:10px;background:var(--bg-gray5);border:1px solid var(--line);border-radius:var(--radius)}.lnb-user .avatar{width:36px;height:36px;border-radius:50%;flex:none;background:linear-gradient(135deg,var(--info),#8f7bff);color:#fff;display:grid;place-items:center;font-weight:700;font-size:15px}.lnb-user .who{line-height:1.3;overflow:hidden}.lnb-user .who .name{font-size:14px;font-weight:700;color:var(--black1)}.lnb-user .who .role{font-size:12px;color:var(--gray2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lnb-section{padding:12px 20px 6px;font-size:12px;font-weight:700;color:var(--gray2);letter-spacing:.3px}.app-lnb nav{padding:0 10px 16px}.app-lnb a{display:flex;align-items:center;gap:10px;padding:10px 12px;margin:1px 0;font-size:14px;color:var(--gray1);border-radius:var(--radius);transition:background .12s,color .12s}.app-lnb a:hover{background:var(--bg-gray5);color:var(--black2)}.app-lnb a.active{color:var(--info);background:var(--info-weak);font-weight:700}.app-lnb a.active .ico{color:var(--info)}.app-lnb .ico{width:18px;text-align:center;color:var(--gray3);font-size:15px}.app-main{padding:22px 26px;overflow:auto}.page-title{margin-bottom:18px;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.page-title h1{font-size:21px;letter-spacing:-.3px}.page-title p{margin:0;font-size:13px;color:var(--gray2)}.build-tag{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:11px;opacity:.55;letter-spacing:.02em;-webkit-user-select:text;user-select:text}.build-tag-dev{color:var(--signal-warning, #fea626);font-weight:700}.build-tag-date{opacity:.8}.no-menu{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center}.no-menu h2{font-size:18px;margin:0}.no-menu p{margin:0}.login-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:var(--bg-gray1)}.login-card{width:360px;background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:36px 32px 28px}.login-logo{text-align:center;font-size:24px;font-weight:700;letter-spacing:-.5px;color:var(--black1);font-family:var(--font-brand)}.login-logo b{color:var(--info)}.login-sub{text-align:center;color:var(--gray2);font-size:13px;margin:4px 0 26px}.login-field{display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--gray5);padding:10px 2px;margin-bottom:6px;transition:border-color .15s}.login-field:focus-within{border-color:var(--info)}.login-field .ic{font-size:15px;opacity:.6}.login-field input{flex:1;border:none;outline:none;background:transparent;color:var(--black1);font-size:15px;line-height:26px;padding:0}.login-field input:focus{box-shadow:none}.login-field .eye{border:none;background:transparent;opacity:.55;font-size:15px}.login-btn{width:100%;margin-top:24px;padding:12px;font-size:15px}.login-hint{text-align:center;color:var(--gray3);font-size:12px;margin:16px 0 0}.login-download{display:inline-block;color:var(--info);font-size:13px;font-weight:700;text-decoration:none;text-align:center;padding:8px 16px;border-radius:var(--radius-pill);background:var(--gray5);transition:background-color .15s}.login-download:hover{background:var(--gray4);text-decoration:underline}.login-copy{color:var(--gray3);font-size:12px}@font-face{font-family:Pretendard;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/pretendard/Pretendard-Regular.woff2) format("woff2")}@font-face{font-family:Pretendard;font-weight:600;font-style:normal;font-display:swap;src:url(/fonts/pretendard/Pretendard-SemiBold.woff2) format("woff2")}@font-face{font-family:Pretendard;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/pretendard/Pretendard-Bold.woff2) format("woff2")}@font-face{font-family:LINESeedKR;font-weight:400;font-style:normal;font-display:swap;src:url(/fonts/lineseed/LINESeedKR-Rg.woff2) format("woff2")}@font-face{font-family:LINESeedKR;font-weight:700;font-style:normal;font-display:swap;src:url(/fonts/lineseed/LINESeedKR-Bd.woff2) format("woff2")}:root{--info: #5629ee;--info-weak: #eae4ff;--info-weak2: #e1d7ff;--primary: #01042f;--success: #23cf3a;--warning: #fdc23e;--danger: #ff6a00;--black1: #101010;--black2: #303030;--gray1: #606060;--gray2: #909090;--gray3: #aaaaaa;--gray4: #bcbcbc;--gray5: #e8e8e8;--link: #505050;--red1: #ff3532;--blue1: #1e88e5;--bg-gray1: #f0f2f5;--bg-gray3: #f4f4f4;--bg-gray5: #fafafa;--line: #ebebeb;--surface: #ffffff;--color01: #f10f3a;--color02: #ff6a00;--color03: #fdc23e;--color04: #75d701;--color05: #3fc495;--color06: #32c4c0;--color07: #22d6dd;--color08: #a38af7;--color09: #8364e8;--color10: #4265d6;--color11: #33beff;--color12: #0061ff;--color13: #5f21c7;--color14: #103783;--color15: #fa167c;--color16: #ff8379;--color17: #77af9c;--color18: #02636c;--color19: #a3a1a1;--color20: #555555;--color21: #fea626;--color22: #1c8cc0;--color23: #dcdcdc;--color24: #e1d7ff;--color25: #eae4ff;--color26: #ffd594;--color27: #9ce992;--color28: #ff2a00;--radius: 8px;--radius-lg: 14px;--radius-pill: 999px;--shadow-sm: 0 1px 2px rgba(16, 16, 16, .05);--shadow: 0 4px 16px rgba(16, 16, 16, .08);--shadow-lg: 0 10px 34px rgba(16, 16, 16, .12);--lnb-w: 232px;--header-h: 52px;--font-base: "Pretendard", "Malgun Gothic", "맑은 고딕", "Apple SD Gothic Neo", "Segoe UI", sans-serif;--font-brand: "LINESeedKR", "Pretendard", "Malgun Gothic", sans-serif}:root[data-theme=dark]{--info: #7a63f0;--info-weak: #2b2450;--info-weak2: #3a2f66;--primary: #0b0e23;--black1: #eef0f7;--black2: #d3d7e6;--gray1: #aeb3c6;--gray2: #878da0;--gray3: #6b7089;--gray4: #565b70;--gray5: #333849;--link: #cdd1e0;--bg-gray1: #14161f;--bg-gray3: #232838;--bg-gray5: #1a1d29;--line: #2c3142;--surface: #1e2233;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow: 0 4px 16px rgba(0, 0, 0, .5);--shadow-lg: 0 10px 34px rgba(0, 0, 0, .6)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%}body{font-family:var(--font-base);font-size:15px;color:var(--link);background:var(--bg-gray1);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px;color:var(--black2)}h1,h2,h3,h4{color:var(--black1);margin:0;font-weight:700}.btn{display:inline-flex;align-items:center;gap:6px;justify-content:center;border:1px solid var(--info);background:var(--info);color:#fff;border-radius:var(--radius);padding:8px 16px;font-size:14px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;white-space:nowrap}.btn:hover{background:#4820cf;border-color:#4820cf}.btn:active{transform:translateY(.5px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.ghost{background:var(--surface);color:var(--gray1);border-color:var(--gray5)}.btn.ghost:hover{background:var(--bg-gray5);color:var(--black2);border-color:var(--gray4)}.btn.outline{background:var(--surface);color:var(--info);border-color:var(--info)}.btn.outline:hover{background:var(--info-weak)}.btn.danger{background:var(--surface);color:var(--red1);border-color:var(--red1)}.btn.danger:hover{background:var(--red1);color:#fff}.btn.danger-solid{background:var(--red1);border-color:var(--red1);color:#fff}.btn.danger-solid:hover{background:#d92e2b;border-color:#d92e2b}.btn.pill{border-radius:var(--radius-pill)}.btn.sm{padding:4px 10px;font-size:13px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-sm)}.input,input:where(:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file])),select,textarea{border:1px solid var(--gray5);border-radius:var(--radius);background:var(--surface);color:var(--black2);padding:8px 10px;outline:none;transition:border-color .15s,box-shadow .15s}.input::placeholder,input::placeholder,textarea::placeholder{color:var(--gray2);opacity:1}.input:-webkit-autofill,input:-webkit-autofill,textarea:-webkit-autofill{-webkit-text-fill-color:var(--black2);-webkit-box-shadow:0 0 0 1000px var(--surface) inset}.input:focus,input:focus,select:focus,textarea:focus{border-color:var(--info);box-shadow:0 0 0 3px var(--info-weak)}.muted{color:var(--gray2)}.error-text{color:var(--red1);font-size:13px}.hstack{display:flex;align-items:center;gap:8px}.signal{display:inline-flex;align-items:center;gap:5px;font-size:13px}.signal:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--gray3)}.signal.on:before{background:var(--color11)}.signal.off:before{background:var(--gray3)}.signal.del:before{background:var(--color01)}.data-grid-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:auto;box-shadow:var(--shadow-sm)}table.data-grid{width:100%;border-collapse:collapse;font-size:14px}table.data-grid thead th{text-align:left;padding:10px 12px;background:var(--bg-gray3);color:var(--black2);font-weight:700;white-space:nowrap;border-bottom:1px solid var(--line);position:sticky;top:0;-webkit-user-select:none;user-select:none}table.data-grid tbody td{padding:9px 12px;border-bottom:1px solid var(--line);color:var(--gray1)}table.data-grid tbody tr:hover{background:var(--bg-gray5)}table.data-grid tbody tr.clickable{cursor:pointer}table.data-grid tbody tr.selected{background:var(--bg-primary-weak, #eef0ff)}table.data-grid tbody tr.selected:hover{background:var(--bg-primary-weak, #e6e9ff)}table.data-grid tbody tr.selected td{border-bottom-color:var(--primary, #5629ee)}table.data-grid .empty{padding:28px;text-align:center;color:var(--gray2)}.badge{display:inline-block;padding:2px 9px;border-radius:var(--radius-pill);font-size:12px;color:#fff;white-space:nowrap;font-weight:600}.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.toolbar .spacer{flex:1}.filter-bar{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;margin-bottom:14px;box-shadow:var(--shadow-sm)}.filter-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px 20px}.filter-field{display:grid;grid-template-columns:88px 1fr;align-items:center;gap:10px}.filter-field>label{font-size:13px;color:var(--gray1);font-weight:600}.filter-field input,.filter-field select{width:100%;border:1px solid var(--gray5);border-radius:var(--radius);padding:7px 10px;background:var(--surface);color:var(--black2)}.filter-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--gray5);border-radius:6px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--gray4)}.drive-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(172px,1fr));gap:12px}.drive-tile{display:flex;flex-direction:column;align-items:center;gap:6px;min-height:196px;padding:12px 10px;background:var(--white, #fff);border:1px solid var(--line);border-radius:6px;cursor:pointer;text-align:center;font:inherit;color:inherit;outline:2px solid transparent;outline-offset:-2px}.drive-tile{position:relative}.drive-tile:hover{background:var(--bg-gray5)}.drive-tile.selected{background:var(--bg-primary-weak, #eef0ff);outline-color:var(--primary, #5629ee);box-shadow:var(--shadow-sm, 0 1px 4px rgba(0, 0, 0, .12))}.drive-tile.selected:after{content:"¹3";position:absolute;top:6px;left:6px;width:18px;height:18px;border-radius:4px;background:var(--primary, #5629ee);color:#fff;font-size:12px;line-height:18px;text-align:center}.drive-tile:focus-visible{outline-color:var(--primary, #5629ee)}.drive-tile-folder{justify-content:center}.drive-tile-icon{font-size:44px;line-height:1}.drive-tile-thumb{display:grid;place-items:center;height:96px}.drive-tile-name{font-size:13px;color:var(--gray1);word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.drive-tile-sub{font-size:11px;color:var(--gray2)}.drive-tile-badges{display:flex;gap:4px;flex-wrap:wrap;justify-content:center;margin-top:auto}.drive-tile.anchored{outline-style:dashed;outline-color:var(--warning, #fdc23e)}.drive-tile.anchored.selected{outline-style:solid;outline-color:var(--primary, #5629ee)}.drive-tile.anchored.selected:after{background:var(--warning, #fdc23e);color:#4a3a00}.drive-dropzone{position:relative}.drive-dropzone.dragover:after{content:"여기에 놓으면 이 폴더로 업로드합니다";position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;display:grid;place-items:center;background:#5629ee0f;border:2px dashed var(--primary, #5629ee);border-radius:6px;color:var(--primary, #5629ee);font-size:14px;font-weight:600;pointer-events:none}
