  @font-face{font-family:'Pretendard';src:url('/fonts/pretendard.woff2') format('woff2');font-weight:45 920;font-style:normal;font-display:swap}
  :root{--bg:#ffffff;--bg2:#f7f7f5;--card:#ffffff;--card2:#f3f3f1;--line:#e9e9e7;--txt:#37352f;--txt2:#5b5a56;--mut:#9b9a97;--accent:#2563eb;--accent2:rgba(37,99,235,.09);--ok:#0f9d58;--warn:#cf7811;--blk:#e0463e;
    /* 📱 모바일 디자인 토큰 — @media(max-width:820px)에서만 참조(데스크탑 무영향). 상용앱 문법: 터치타깃≥44·하단탭바·세이프에어리어 */
    --sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);--sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px);
    --m-tabh:56px;--m-tap:44px;--m-gutter:16px}
  *{box-sizing:border-box}
  [hidden]{display:none!important}  /* ⚠️ display:grid/flex 규칙이 [hidden]를 덮어쓰지 못하게 전역 방어(예: .attwrap) */
  html,body{height:100%}
  body{margin:0;background:var(--bg);color:var(--txt);font-family:'Pretendard',-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}
  /* 📱 전역 모바일 하드닝(2026-07-06 시니어 QA): iOS 가로모드 텍스트 자동확대 방지·탭 하이라이트 제거·당겨서새로고침 바운스 억제 */
  html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
  *{-webkit-tap-highlight-color:transparent}
  html,body{overscroll-behavior-y:none}
  button,a,.nav,.mtab{touch-action:manipulation}   /* 더블탭 확대 지연(300ms) 제거 */
  h1{font-size:17px;margin:0;font-weight:800;letter-spacing:-.01em}
  /* ---- 앱 셸 (사이드바 + 메인) ---- */
  .app{display:flex;height:100vh;overflow:hidden}
  .sidebar{width:248px;flex-shrink:0;background:var(--bg2);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 10px;position:relative}
  .brand{display:flex;align-items:center;gap:9px;font-weight:800;font-size:16px;letter-spacing:-.03em;padding:8px 8px 14px;color:var(--txt);flex-shrink:0}
  .brand .bmark{width:26px;height:26px;border-radius:7px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:900;flex-shrink:0;box-shadow:0 2px 6px rgba(37,99,235,.35)}
  .brand .bsub{margin-left:auto;font-size:10px;font-weight:800;color:var(--accent);letter-spacing:.04em;background:var(--accent2);border-radius:5px;padding:2px 7px}
  /* 사이드바 직원 프로필 (로그인 시 사진·이름·직책) */
  .userbox{margin-top:8px;flex-shrink:0;display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:background .12s,border-color .12s}
  .userbox:hover{background:var(--card);border-color:var(--line)}
  .uava{width:32px;height:32px;border-radius:50%;flex-shrink:0;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;overflow:hidden}
  .uava img{width:100%;height:100%;object-fit:cover;display:block}
  .uinfo{min-width:0;flex:1}
  .uname{font-size:13px;font-weight:700;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
  .urole{font-size:11px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
  .uchev{color:var(--mut);flex-shrink:0;display:flex}
  .uchev svg{width:15px;height:15px}
  .userbox:hover .uchev{color:var(--txt2)}
  /* 계정 팝오버 */
  .acc{position:absolute;left:10px;right:10px;bottom:80px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 44px rgba(15,22,38,.18);padding:6px;z-index:70}
  .acc-head{display:flex;align-items:center;gap:12px;padding:11px 11px 12px}
  .acc-ava{position:relative;width:48px;height:48px;flex-shrink:0;cursor:pointer}
  .acc-ava .av{width:48px;height:48px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:18px;overflow:hidden;transition:filter .12s}
  .acc-ava .av img{width:100%;height:100%;object-fit:cover;display:block}
  .acc-ava .cam{position:absolute;right:-2px;bottom:-2px;width:20px;height:20px;border-radius:50%;background:var(--accent);border:2px solid var(--card);color:#fff;display:flex;align-items:center;justify-content:center}
  .acc-ava .cam svg{width:10px;height:10px}
  .acc-ava:hover .av{filter:brightness(.92)}
  .acc-id{min-width:0}
  .acc-name{font-size:14px;font-weight:700;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .acc-role{font-size:12px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
  .acc-div{height:1px;background:var(--line);margin:2px 6px}
  .acc-item{display:flex;align-items:center;gap:11px;width:100%;text-align:left;font:inherit;font-size:13px;font-weight:500;color:var(--txt);background:none;border:0;border-radius:7px;padding:10px 11px;cursor:pointer;transition:background .1s}
  .acc-item:hover{background:var(--bg2)}
  .acc-item svg{width:16px;height:16px;color:var(--mut);flex-shrink:0}
  .acc-item.off{color:var(--mut);cursor:default}
  .acc-item.off:hover{background:none}
  .acc-item .tagr{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--mut);background:var(--bg2);border-radius:6px;padding:2px 7px}
  /* 카카오 연결 */
  .acc-kk{padding:8px 11px 10px}
  .acc-kkhd{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  .acc-kkt{font-size:12.5px;font-weight:600;color:var(--txt)}
  .acc-kkst{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--mut);background:var(--bg2);border-radius:6px;padding:2px 8px}
  .acc-kkst.on{color:#15803d;background:#dcfce7}
  .acc-kkinput{width:100%;box-sizing:border-box;font:inherit;font-size:12.5px;color:var(--txt);background:var(--bg2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;outline:none}
  .acc-kkinput:focus{border-color:var(--accent)}
  .acc-kkrow{display:flex;gap:6px;margin-top:7px}
  .acc-kkbtn{flex:1;font:inherit;font-size:12px;font-weight:600;color:var(--txt);background:var(--card);border:1px solid var(--line);border-radius:6px;padding:8px 6px;cursor:pointer;transition:.1s}
  .acc-kkbtn:hover{background:var(--bg2)}
  .acc-kkbtn.prim{background:var(--accent);border-color:var(--accent);color:#fff}
  .acc-kkbtn.prim:hover{filter:brightness(.94)}
  .acc-kkbtn.prim:disabled{background:var(--bg2);border-color:var(--line);color:var(--mut);cursor:default;filter:none}
  .acc-kkbtn.full{width:100%;margin-top:7px}
  .acc-kkbtn.off{color:#b91c1c;border-color:#fecaca}
  .acc-kkbtn.off:hover{background:#fef2f2}
  /* ⚙️ 설정 탭 */
  .setwrap{max-width:720px}
  /* 설정 서브탭 */
  .setsubnav{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:24px;flex-wrap:nowrap;overflow-x:auto}
  .setsubnav::-webkit-scrollbar{height:0}
  .setsubtab{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;font:inherit;font-size:13.5px;font-weight:600;color:var(--mut);background:none;border:0;border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px;transition:color .14s,border-color .14s;white-space:nowrap;flex-shrink:0}
  .setsubtab svg{width:16px;height:16px}
  .setsubtab:hover{color:var(--txt)}
  .setsubtab.active{color:var(--accent);border-bottom-color:var(--accent)}
  .setpanel[hidden]{display:none}
  .setsec{margin-bottom:30px}
  /* 🔐 계정 보관함 (표 형태) */
  .vsearch{flex:1;min-width:180px;max-width:340px;padding:7px 11px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:var(--card);color:var(--txt)}
  .vtwrap{overflow-x:auto}
  .vtable{width:100%;border-collapse:collapse;font-size:13px}
  .vtable th{text-align:left;font-weight:600;color:var(--mut);font-size:11px;padding:6px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
  .vtable td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
  .vtable tbody tr:last-child td{border-bottom:none}
  .vtable tbody tr:hover{background:var(--bg2,#f6f8fb)}
  .vtsvcn{font-weight:700;font-size:13.5px;color:var(--txt);display:flex;align-items:center;gap:6px}
  .vturl{color:var(--accent);text-decoration:none;font-size:12px}
  .vturl:hover{text-decoration:underline}
  .vtnote{color:var(--mut);font-size:11.5px;margin-top:3px;max-width:260px;white-space:pre-wrap;word-break:break-word}
  .vtcell{display:flex;align-items:center;gap:6px}
  .vtmono{font-family:inherit;font-size:13px;color:var(--txt);word-break:break-all}
  .vtmono.vpw{letter-spacing:1px}
  .vtact{white-space:nowrap;text-align:right}
  .vbtn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:none;border-radius:6px;padding:4px 6px;cursor:pointer;color:var(--mut)}
  .vbtn:hover{background:var(--bg2,#f3f4f6);color:var(--txt)}
  .vbtn.copied{color:var(--accent);border-color:var(--accent)}
  .setwrap.set-wide{max-width:1080px}
  .setsec .sethead{font-size:13px;font-weight:700;color:var(--mut);margin:0 0 12px}
  .setsec .sethead .hsub2{font-weight:600;color:var(--mut);opacity:.7;font-size:11.5px;margin-left:4px}
  .setcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin-bottom:12px}
  .setcard .acc-kk{padding:0}
  .setcardhd{display:flex;align-items:center;gap:10px}
  .setcardt{font-size:14.5px;font-weight:700;color:var(--txt)}
  .setcarddesc{font-size:12.5px;color:var(--mut);margin-top:6px;line-height:1.55}
  .setrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}
  .setrow label{font-size:13px;color:var(--txt2);font-weight:600}
  .setrow input[type=time]{font:inherit;font-size:14px;color:var(--txt);background:var(--bg2);border:1px solid var(--line);border-radius:7px;padding:7px 10px;outline:none}
  .setrow input[type=time]:focus{border-color:var(--accent)}
  .sethint{font-size:12px;color:var(--mut);margin-top:11px;line-height:1.5}
  .sethint.ok{color:#15803d}
  .sethint.err{color:#b91c1c}
  /* 🔐 로그인 게이트 오버레이 (작업#37) */
  .logingate{position:fixed;inset:0;z-index:9999;background:linear-gradient(160deg,#eef2fb,#f5f6f8);display:flex;align-items:center;justify-content:center;padding:20px}
  .loginbox{width:100%;max-width:340px;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 60px rgba(15,22,38,.14);padding:30px 28px;display:flex;flex-direction:column;gap:12px}
  .lg-brand{display:flex;align-items:center;gap:8px;font-weight:800;font-size:18px;color:var(--txt);justify-content:center}
  .lg-brand .bmark{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:6px;background:var(--accent);color:#fff;font-weight:800}
  .lg-brand .bsub{font-size:11px;font-weight:700;color:var(--accent);background:#e8eefc;padding:2px 7px;border-radius:6px}
  .lg-title{text-align:center;font-size:13.5px;color:var(--mut);margin-bottom:4px}
  .loginbox input{font:inherit;font-size:14.5px;color:var(--txt);background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:11px 13px;outline:none}
  .loginbox input:focus{border-color:var(--accent);background:#fff}
  .lg-opts{display:flex;justify-content:space-between;gap:10px;margin:-2px 2px 0}
  .lg-ck{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--mut);cursor:pointer;user-select:none}
  .lg-ck input{width:auto;padding:0;margin:0;accent-color:var(--accent)}
  .lg-err{font-size:12.5px;color:#b91c1c;min-height:16px;text-align:center}
  .lg-btn{font:inherit;font-size:14.5px;font-weight:700;color:#fff;background:var(--accent);border:0;border-radius:8px;padding:11px;cursor:pointer;transition:filter .14s}
  .lg-btn:hover{filter:brightness(1.06)}
  /* 역할 기반 UI 숨김 — role-staff 클래스(게이트 ON·staff 로그인)일 때만 적용. 게이트 OFF(라이브)는 클래스 미부여 → 전부 표시 */
  body.role-staff .admin-only{display:none!important}
  /* staff-only: 직원에게만 보임(관리자·토큰=숨김). role-staff 일 때만 노출 */
  body:not(.role-staff) .staff-only{display:none!important}
  .pcsteps{margin:14px 0 0;padding-left:20px;color:var(--mut);font-size:13px;line-height:1.95}
  .pcsteps code{background:var(--chip,#eef2f7);padding:1px 6px;border-radius:5px;font-size:12.5px}
  .mypcstat{font-size:14px;font-weight:700}
  /* 👥 직원 계정 관리 */
  .userslist{display:flex;flex-direction:column;gap:8px}
  .urow{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:var(--bg2)}
  .urow .un{font-weight:700;font-size:13.5px;color:var(--txt)}
  .urow .unm{font-size:12.5px;color:var(--mut)}
  .urow .ubadge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px;background:#eef2f7;color:var(--txt2)}
  .urow .ubadge.admin{background:#e8eefc;color:var(--accent)}
  .urow .ubadge.grade{background:#eef2f7;color:var(--txt2)}
  .urow .uacts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
  .urow .uacts button{font:inherit;font-size:12px;font-weight:600;color:var(--txt2);background:#fff;border:1px solid var(--line);border-radius:6px;padding:5px 9px;cursor:pointer}
  .urow .uacts button:hover{border-color:var(--accent);color:var(--accent)}
  .urow .uacts button.del:hover{border-color:#b91c1c;color:#b91c1c}
  .urow .uacts select{font:inherit;font-size:12px;font-weight:600;color:var(--txt2);background:#fff;border:1px solid var(--line);border-radius:6px;padding:5px 7px;outline:none;cursor:pointer}
  .urow .uacts select:focus{border-color:var(--accent)}
  /* 인라인 관리자 권한 토글(목록·추가폼 공용) */
  .utog{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--txt2);white-space:nowrap;cursor:pointer}
  .utog .utoglb{color:var(--mut)}
  .swt.utgsw{margin-left:0;width:38px;height:22px}
  .swt.utgsw .swtk:before{width:16px;height:16px}
  .swt.utgsw input:checked+.swtk:before{transform:translateX(16px)}
  .userform{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;align-items:center}
  .userform input,.userform select{font:inherit;font-size:13px;color:var(--txt);background:var(--bg2);border:1px solid var(--line);border-radius:7px;padding:8px 10px;outline:none}
  .userform input:focus,.userform select:focus{border-color:var(--accent)}
  .wklink{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:6px}
  .wklink a{text-decoration:none}
  .wktog{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--muted);white-space:nowrap}
  .wktog .swt{margin:0}
  .wkspin{display:inline-block;width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;vertical-align:-2px;margin-right:4px;animation:wkspin .7s linear infinite}
  @keyframes wkspin{to{transform:rotate(360deg)}}
  button:disabled{opacity:.55;cursor:default}
  /* 토글 스위치 */
  .swt{margin-left:auto;position:relative;display:inline-block;width:42px;height:24px;flex-shrink:0;cursor:pointer}
  .swt input{opacity:0;width:0;height:0;position:absolute}
  .swtk{position:absolute;inset:0;background:var(--line);border-radius:99px;transition:.18s}
  .swtk:before{content:'';position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.18s;box-shadow:0 1px 3px rgba(0,0,0,.25)}
  .swt input:checked+.swtk{background:var(--accent)}
  .swt input:checked+.swtk:before{transform:translateX(18px)}
  .swt input:disabled+.swtk{opacity:.5;cursor:default}
  /* 시스템 상태 */
  .sysstat{display:flex;flex-direction:column}
  .sysrow{display:flex;align-items:center;gap:10px;padding:10px 2px;border-bottom:1px solid var(--line)}
  .sysrow:last-child{border-bottom:0}
  .sysrow .sysname{font-size:13.5px;color:var(--txt);font-weight:600}
  .sysrow .sysdesc{font-size:11.5px;color:var(--mut);margin-left:2px}
  .sysbadge{margin-left:auto;font-size:11px;font-weight:700;border-radius:99px;padding:2px 11px}
  .sysbadge.on{color:#15803d;background:#dcfce7}
  .sysbadge.off{color:#b91c1c;background:#fee2e2}
  .sysbadge.loaded{color:#92740b;background:#fef3c7}
  .setinfo{display:flex;flex-direction:column}
  .setinforow{display:flex;align-items:center;gap:12px;padding:10px 2px;border-bottom:1px solid var(--line);font-size:13.5px}
  .setinforow:last-child{border-bottom:0}
  .setinforow span{color:var(--mut);width:88px;flex-shrink:0}
  .setinforow b{color:var(--txt);font-weight:600}
  .sidesearch{display:flex;align-items:center;gap:9px;font:inherit;font-size:13px;color:var(--mut);background:var(--card);border:1px solid var(--line);border-radius:7px;padding:8px 11px;margin:0 4px 12px;cursor:pointer;font-weight:600;flex-shrink:0}
  .sidesearch svg{width:15px;height:15px;flex-shrink:0}
  .sidesearch:hover{border-color:var(--accent);color:var(--accent)}
  .sidesearch .kbd{margin-left:auto;font-size:11px;color:var(--mut);background:var(--card2);border-radius:5px;padding:1px 6px;font-weight:700}
  /* 전역 검색 오버레이 */
  .modal.search{align-items:flex-start;padding-top:9vh}
  .sbox{background:var(--card);border:1px solid var(--line);border-radius:10px;width:min(640px,100%);max-height:74vh;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(15,22,38,.34);overflow:hidden}
  .shead{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}
  .shead .sic{font-size:16px;color:var(--mut)}
  .shead input{flex:1;min-width:0;font:inherit;font-size:15px;border:0;outline:none;background:none;color:var(--txt)}
  .shead .x{border:0;background:var(--card2);color:var(--mut);width:28px;height:28px;border-radius:7px;cursor:pointer;font-size:14px;flex-shrink:0}
  .sresults{overflow-y:auto;padding:6px}
  .sgroup{font-size:11px;font-weight:700;color:var(--mut);padding:9px 10px 4px}
  .sitem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;cursor:pointer}
  .sitem.sel,.sitem:hover{background:var(--accent2)}
  .sitem .sii{font-size:15px;width:20px;text-align:center;flex-shrink:0}
  .sitem .sit{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;font-weight:600}
  .sitem .sis{font-size:11px;color:var(--mut);white-space:nowrap;flex-shrink:0}
  .sempty{padding:26px;text-align:center;color:var(--mut);font-size:13px}
  .sfoot{border-top:1px solid var(--line);padding:8px 14px;font-size:11px;color:var(--mut);text-align:center}
  /* 🙋 Q&A 플로팅 챗봇 */
  .qafab{position:fixed;right:22px;bottom:22px;width:56px;height:56px;border-radius:50%;border:0;background:var(--accent);color:#fff;font-size:25px;line-height:1;cursor:pointer;box-shadow:0 6px 20px rgba(37,99,235,.4);z-index:60;display:flex;align-items:center;justify-content:center;transition:transform .15s,box-shadow .15s}
  .qafab:hover{transform:translateY(-2px) scale(1.04);box-shadow:0 10px 26px rgba(37,99,235,.5)}
  .qafab.open{background:var(--txt2)}
  /* 💬 건의·개선 플로팅 버튼 — QA FAB 위에 살짝 작게 스택(겹침 방지) */
  .fbfab{position:fixed;right:22px;bottom:88px;width:56px;height:56px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--accent);cursor:pointer;box-shadow:0 6px 18px rgba(15,22,38,.16);z-index:60;display:flex;align-items:center;justify-content:center;transition:transform .15s,box-shadow .15s}
  .fbfab:hover{transform:translateY(-2px) scale(1.04);box-shadow:0 10px 26px rgba(15,22,38,.24)}
  .fbfab svg{display:block}
  #fbModal .mbox{width:min(440px,100%)}
  .fbcat{display:flex;gap:7px;flex-wrap:wrap}
  .fbcat button{font:inherit;font-size:12.5px;font-weight:600;color:var(--mut);background:var(--card);border:1px solid var(--line);border-radius:18px;padding:6px 13px;cursor:pointer;transition:.1s}
  .fbcat button.on{background:var(--accent);border-color:var(--accent);color:#fff}
  .fbinbox{display:flex;flex-direction:column;gap:9px}
  .fbinotetxt{font-size:12px;color:#0f7a44;background:rgba(15,157,88,.09);border:1px solid rgba(15,157,88,.18);border-radius:6px;padding:5px 9px;margin-top:7px}
  .fbinoteat{color:var(--mut);font-size:11px;font-weight:600}
  .fbinoteedit{display:flex;gap:6px;margin-top:7px}
  .fbinoteinp{flex:1;font:inherit;font-size:12.5px;padding:5px 9px;border:1px solid var(--line);border-radius:6px;background:var(--bg2,#f7f7f5);color:var(--txt);outline:none}
  .fbinoteinp:focus{border-color:var(--accent)}
  .fbinotebtn{white-space:nowrap;flex:0 0 auto}
  .fbitem{border:1px solid var(--line);border-radius:9px;padding:11px 13px;background:var(--card)}
  .fbitem.unread{background:var(--accent2)}
  .fbimeta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--mut);margin-bottom:6px}
  .fbibadge{font-size:11px;font-weight:700;color:var(--accent);background:rgba(29,78,216,.08);border-radius:5px;padding:2px 7px}
  .fbiwho{font-weight:700;color:var(--txt)}
  .fbiview{color:var(--mut)}
  .fbitext{font-size:13.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
  .fbiact{margin-top:8px;display:flex;gap:7px}
  .fbtoast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(20px);background:var(--txt);color:#fff;font-size:13.5px;font-weight:600;padding:12px 18px;border-radius:10px;box-shadow:0 10px 30px rgba(15,22,38,.3);z-index:120;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:calc(100vw - 32px)}
  .fbtoast.show{opacity:1;transform:translateX(-50%) translateY(0)}
  @media(max-width:820px){
    .fbfab{right:16px;bottom:80px}
  }
  .qapanel{position:fixed;right:22px;bottom:88px;width:min(380px,calc(100vw - 32px));height:min(560px,calc(100vh - 130px));background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 18px 50px rgba(15,22,38,.28);z-index:60;display:flex;flex-direction:column;overflow:hidden;transform-origin:bottom right;animation:qaup .18s ease}
  .qapanel[hidden]{display:none}
  @keyframes qaup{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
  .qaphead{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);flex-shrink:0}
  .qaphead .qaptitle{display:inline-flex;align-items:center;gap:5px;font-weight:800;font-size:14px}
  .qaphead .qapsub{font-size:11px;color:var(--mut)}
  .qaphead .qapx{margin-left:auto;border:0;background:var(--card2);color:var(--mut);width:28px;height:28px;border-radius:6px;cursor:pointer;font-size:13px}
  .qaphead .qapx:hover{color:var(--txt)}
  .qaThread{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:14px}
  .qaHint{color:var(--mut);font-size:12.5px;background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:12px 14px;line-height:1.6}
  .qmsg{display:flex;gap:9px;max-width:100%}
  .qmsg .av{width:28px;height:28px;border-radius:6px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:15px}
  .qmsg.u{align-self:flex-end;flex-direction:row-reverse}
  .qmsg.u .av{background:var(--accent);color:#fff}
  .qmsg.a .av{background:var(--card2)}
  .qbub{border-radius:8px;padding:10px 14px;font-size:14px;line-height:1.6;min-width:0;overflow-wrap:anywhere}
  .qmsg.u .qbub{background:var(--accent);color:#fff;white-space:pre-wrap}
  .qmsg.a .qbub{background:var(--card);border:1px solid var(--line)}
  .qmsg.a .qbub.md{padding:4px 16px}
  .qspin{display:inline-flex;gap:4px;align-items:center;color:var(--mut)}
  .qspin i{width:6px;height:6px;border-radius:99px;background:var(--mut);animation:qdot 1s infinite}
  .qspin i:nth-child(2){animation-delay:.15s}.qspin i:nth-child(3){animation-delay:.3s}
  @keyframes qdot{0%,60%,100%{opacity:.25}30%{opacity:1}}
  .qaInputBar{display:flex;gap:8px;align-items:flex-end;border-top:1px solid var(--line);padding:10px 12px;flex-shrink:0}
  .qaInputBar textarea{flex:1;font:inherit;font-size:13.5px;border:1px solid var(--line);border-radius:8px;padding:9px 12px;background:var(--card2);resize:none;max-height:120px;line-height:1.5}
  .qaInputBar textarea:focus{outline:none;border-color:var(--accent)}
  .qaInputBar .btn{height:40px;flex-shrink:0}
  @media (max-width:820px){
    .qafab{right:16px;bottom:16px}
    .qapanel{right:12px;left:12px;width:auto;bottom:80px;height:min(70vh,calc(100vh - 110px))}
  }
  /* 브랜드·검색(위)·계정(아래) 고정, 가운데 nav만 세로 스크롤 */
  .snav{display:flex;flex-direction:column;gap:1px;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  .snav::-webkit-scrollbar{width:0}
  .navdiv{height:1px;background:var(--line);margin:9px 8px}
  .nav{display:flex;align-items:center;gap:11px;width:100%;text-align:left;font:inherit;font-size:13.5px;font-weight:500;color:var(--txt2);background:none;border:0;border-radius:6px;padding:8px 10px;cursor:pointer;transition:background .1s,color .1s}
  .nav .ic{display:flex;align-items:center;justify-content:center;width:18px;flex-shrink:0;color:var(--mut)}
  .nav .ic svg{width:17px;height:17px}
  .nav:hover{background:rgba(55,53,47,.055)}
  .nav:hover .ic{color:var(--txt2)}
  .nav.active{background:rgba(55,53,47,.075);color:var(--txt);font-weight:700}
  .nav.active .ic{color:var(--accent)}
  .nav .navbadge{margin-left:auto;font-size:11px;font-weight:700;background:rgba(207,120,17,.14);color:var(--warn);border-radius:99px;padding:1px 7px}
  /* ★ 바로가기(회사 사이트 새 탭 링크) */
  .navcap{font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--mut);padding:2px 12px 4px;margin-top:13px;text-transform:uppercase}
  .navcap.navcap-first{margin-top:2px}
  a.navlink{text-decoration:none}
  a.navlink .navext{margin-left:auto;display:flex;align-items:center;color:var(--mut);opacity:0;transition:opacity .1s}
  a.navlink .navext svg{width:13px;height:13px}
  a.navlink:hover .navext{opacity:.7}
  /* 폴더 아코디언(좌측바 트리: 회사 공용 / 작업물 / 외부저장소) */
  .navfold{display:flex;flex-direction:column}
  .navchev{margin-left:auto;display:flex;align-items:center;color:var(--mut);transition:transform .15s}
  .navchev svg{width:14px;height:14px}
  .navchev.open{transform:rotate(90deg)}
  .navsub{display:flex;flex-direction:column;gap:1px;margin:1px 0 3px 0}
  .navsubitem{display:flex;align-items:center;gap:9px;width:100%;text-align:left;font:inherit;font-size:12.5px;font-weight:500;color:var(--txt2);background:none;border:0;border-radius:6px;padding:6px 10px 6px 28px;cursor:pointer;transition:background .1s,color .1s}
  .navsubitem .ic{display:flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;color:var(--mut)}
  .navsubitem .ic svg{width:15px;height:15px}
  .navsubitem:hover{background:rgba(55,53,47,.055)}
  .navsubitem:hover .ic{color:var(--txt2)}
  .navsubitem.active{background:rgba(55,53,47,.075);color:var(--txt);font-weight:700}
  .navsubitem.active .ic{color:var(--accent)}
  /* 🖥️ 데스크톱 전용: 사이드바 행 촘촘화(Slack/Notion 톤). 모바일(≤820px 드로어·44px 터치타깃)엔 무영향 — 앱 데스크톱 분기 min-width:821px 재사용 */
  @media(min-width:821px){
    .nav{min-height:34px;padding:6px 10px;font-size:13px;gap:10px}
    .nav .ic{width:16px}
    .nav .ic svg{width:16px;height:16px}
    .acc-item{min-height:34px;padding:6px 10px;font-size:13px;gap:10px}
    .navsubitem{min-height:30px;padding:5px 10px 5px 28px;font-size:12px}
    .navsubitem .ic{width:14px}
    .navsubitem .ic svg{width:14px;height:14px}
  }
  .sidefoot{margin-top:10px;padding-top:12px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .sidefoot .clock{font-size:12px;color:var(--mut)}
  .main{flex:1;min-width:0;overflow-y:auto;display:flex;flex-direction:column}
  .view[hidden]{display:none}
  .topbar{display:flex;align-items:center;gap:14px;padding:26px 30px 0}
  .topbar h2{font-size:21px;font-weight:800;letter-spacing:-.02em;margin:0}
  .topbar .sub{font-size:13px;color:var(--mut);margin-top:3px}
  .topbar .actions{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .vbody{padding:20px 30px 44px}
  .pill{font-size:12px;font-weight:600;padding:4px 10px;border-radius:7px;background:var(--card2);color:var(--mut);display:inline-flex;align-items:center;gap:6px}
  .pill.live{background:rgba(15,157,88,.13);color:var(--ok)}
  .banner{margin-bottom:16px}
  .job{background:var(--accent2);border:1px solid rgba(37,99,235,.18);border-radius:8px;padding:11px 14px;font-size:13px;margin-bottom:8px}
  .job .o{color:var(--accent);font-weight:700}
  .idleNote{color:var(--mut);font-size:12.5px}
  /* ---- 홈 요약 위젯 ---- */
  .hwgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:26px}
  .hwcard{text-align:left;font:inherit;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:14px 16px;cursor:pointer;transition:.12s;display:flex;flex-direction:column;gap:2px}
  .hwcard:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(37,99,235,.1)}
  .hwcard.warn{border-color:var(--warn)}
  .hwic{font-size:17px}
  .hwn{font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.1}
  .hwl{font-size:12px;color:var(--mut);font-weight:600}
  .hwcard.warn .hwl{color:var(--warn)}
  .hsec{margin-bottom:26px}
  .hsech{font-size:13px;font-weight:700;color:var(--mut);margin:0 0 10px}
  /* ★ 개인 업무 대시보드 — 홈 메인 */
  .hscope{font:inherit;font-size:12.5px;font-weight:700;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 14px;cursor:pointer;transition:.12s}
  .hscope:hover{border-color:var(--accent);color:var(--accent)}
  .hscope.on{background:var(--accent);border-color:var(--accent);color:#fff}
  /* ── ★ 노션식 홈 — 작고 촘촘한 타이포·절제된 회색 ── */
  .dashhead{margin-bottom:14px;padding-left:4px}  /* 시각보정: 인사말을 살짝 우측으로(공지 카드 텍스트와 광학 정렬) */
  .dh-hi{font-size:16px;font-weight:700;color:var(--txt);letter-spacing:-.01em}
  .dh-meta{margin-top:3px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--mut)}
  .dh-date{font-weight:600}
  .dh-sum b{font-weight:700;color:var(--txt2)}
  .dh-sum b.sumlate{color:var(--blk)}
  /* ── 노션식 뷰 전환 탭 ── */
  /* 탭 줄 = [스크롤되는 탭 스트립][고정 새업무 버튼] */
  .hvtabs{display:flex;align-items:stretch;gap:10px;margin-bottom:16px}
  .hvtabscroll{flex:1 1 auto;min-width:0;display:flex;flex-wrap:nowrap;align-items:center;gap:2px;border-bottom:1px solid var(--line);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;touch-action:pan-x;overscroll-behavior:contain}
  .hvtabscroll::-webkit-scrollbar{height:0}
  .hvtab{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;font:inherit;font-size:13px;font-weight:600;color:var(--mut);background:none;border:0;border-bottom:2px solid transparent;cursor:pointer;margin-bottom:-1px;white-space:nowrap;flex-shrink:0;transition:color .14s,border-color .14s}
  .hvtab .hvti{display:inline-flex;color:currentColor}
  .hvtab .hvti svg{width:15px;height:15px}
  .hvtab:hover{color:var(--txt2)}
  .hvtab.on{color:var(--accent);border-bottom-color:var(--accent)}
  .hvtc{font-size:11px;font-weight:700;color:var(--mut);background:var(--bg2);border-radius:20px;padding:1px 7px;min-width:8px;text-align:center}
  .hvtc:empty{display:none}
  .hvtab.on .hvtc{color:var(--accent);background:var(--accent2)}
  /* 메타 광고 서브탭 패널: 선택된 서브탭만 노출 */
  .metasubpanel[hidden]{display:none}
  .hvbody{margin-bottom:18px}
  .hvpane[hidden]{display:none}
  .hvnote{display:inline-flex;vertical-align:-1px;margin-left:4px;color:var(--mut);opacity:.8}
  .hvnote svg{width:11px;height:11px}
  /* 칸반(일정 보드 .bcol/.bcard 재사용 + 가로스크롤) */
  .hvboard{display:flex;gap:12px;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px;align-items:flex-start}
  .hvboard::-webkit-scrollbar{height:8px}
  .hvboard .bcol{flex:1 1 0;min-width:225px}   /* 내 작업 보드(.hbdcol)와 동일 — 컬럼이 폭 채우고, 많으면 225px에서 가로스크롤 */
  .hvbar{margin-top:7px;height:4px;border-radius:3px;background:var(--line);overflow:hidden}
  .hvbar i{display:block;height:100%;background:var(--accent);border-radius:3px}
  .hvgantt{min-width:0}
  .gtgrph.nohover{cursor:default}
  @media(max-width:820px){.hvboard .bcol{flex:0 0 80vw;min-width:80vw}}   /* 홈 보드(.hbdcol) 모바일과 동일 폭 */
  .dashgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:18px;align-items:start}
  @media(max-width:880px){.dashgrid{grid-template-columns:1fr}}
  .dcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:15px 17px;box-shadow:0 1px 3px rgba(20,30,50,.05);display:flex;flex-direction:column;min-width:0}
  .dcard-h{display:flex;align-items:center;gap:7px;margin-bottom:11px}
  .dch-ic{display:inline-flex;color:var(--mut);flex-shrink:0}
  .dch-ic svg{display:block}
  .dch-t{font-size:14px;font-weight:600;color:var(--txt)}
  .dch-sub{margin-left:auto;font-size:11.5px;font-weight:600;color:var(--mut);background:var(--bg2);border-radius:20px;padding:1px 8px}
  .dch-sub:empty{display:none}
  .dempty{color:var(--mut);font-size:12.5px;padding:16px 4px;text-align:center}
  .dempty.sm{padding:11px 4px;font-size:12px}
  /* 내 작업 — 오늘 할 일 */
  .todolist{display:flex;flex-direction:column;gap:1px;flex:1;min-height:54px}
  .todoitem{display:flex;align-items:flex-start;gap:10px;padding:7px 6px;border-radius:8px;transition:background .1s}
  .todoitem:hover{background:var(--bg2)}
  .todock{flex-shrink:0;width:18px;height:18px;margin-top:1px;border:2px solid var(--mut);border-radius:5px;background:var(--card);cursor:pointer;transition:.12s;position:relative;padding:0}
  .todock:hover{border-color:var(--accent);background:var(--accent)}
  .todock::after{content:"";position:absolute;left:4px;top:0;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);opacity:0;transition:opacity .1s}
  .todock:hover::after{opacity:1}
  .todoitem.late .todock{border-color:var(--blk)}
  .todomain{flex:1;min-width:0;cursor:pointer}
  .todott{font-size:13px;font-weight:500;color:var(--txt);word-break:keep-all;line-height:1.4}
  .todosub{font-size:11.5px;color:var(--mut);margin-top:1px}
  .todoitem.late .todott{color:var(--txt)}
  .lateflag{color:var(--blk);font-weight:700}
  .todoitem .todomain:active{opacity:.7}
  .quickadd{display:flex;align-items:center;gap:7px;margin-top:10px;padding:8px 11px;background:var(--bg2);border:1px solid var(--line);border-radius:8px}
  .quickadd:focus-within{border-color:var(--accent);background:var(--card)}
  .qa-plus{display:inline-flex;color:var(--accent);line-height:1}
  .qa-plus svg{display:block}
  .quickadd input{flex:1;min-width:0;font:inherit;font-size:12.5px;color:var(--txt);background:transparent;border:0;outline:none}
  /* 공통 항목 행(회사작업·스프린트·타임라인) */
  .drow{display:flex;align-items:center;gap:9px;padding:7px 6px;border-radius:8px;min-width:0;transition:background .1s}
  .drow.clk{cursor:pointer}
  .drow.clk:hover{background:var(--bg2)}
  .drowmain{flex:1;min-width:0}
  .drowtt{font-size:13px;font-weight:500;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
  .drowsub{font-size:11.5px;color:var(--mut);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* 회사 작업 — 프로젝트별 묶음 */
  .complist{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
  .comprow .compdot{flex-shrink:0;width:6px;height:6px;border-radius:50%;background:var(--accent)}
  .comprow .compdot.late{background:var(--blk)}
  .comprow .compdot.done{background:var(--ok)}
  .compmeta{flex-shrink:0;display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--mut)}
  .compmeta .clate{color:var(--blk);font-weight:700}
  .compbar{flex-shrink:0;width:46px;height:4px;border-radius:3px;background:var(--bg2);overflow:hidden}
  .compbar>i{display:block;height:100%;background:var(--accent);border-radius:3px}
  /* 현재 스프린트 — 진행 중 + 진척 바 */
  .sprintlist{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0;min-height:54px}
  .sprow{display:flex;flex-direction:column;gap:4px;padding:7px 6px;border-radius:8px;cursor:pointer;transition:background .1s}
  .sprow:hover{background:var(--bg2)}
  .sprow .sptop{display:flex;align-items:center;gap:8px;min-width:0}
  .sptt{flex:1;min-width:0;font-size:13px;font-weight:500;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
  .sppct{flex-shrink:0;font-size:11.5px;font-weight:700;color:var(--accent)}
  .spbar{height:4px;border-radius:3px;background:var(--bg2);overflow:hidden}
  .spbar>i{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .3s}
  .spown{font-size:11.5px;color:var(--mut)}
  /* 타임라인 — 시간순 컴팩트 리스트 */
  .tllist{display:flex;flex-direction:column;flex:1;min-width:0;min-height:54px}
  .tlrow{display:flex;align-items:center;gap:11px;padding:7px 6px;border-radius:8px;cursor:pointer;min-width:0;transition:background .1s}
  .tlrow:hover{background:var(--bg2)}
  .tldate{flex-shrink:0;width:54px;text-align:right;font-size:11.5px;font-weight:600;color:var(--mut);line-height:1.3}
  .tldate.late{color:var(--blk)}
  .tldate.soon{color:var(--accent)}
  .tlaxis{flex-shrink:0;position:relative;width:9px;align-self:stretch;display:flex;justify-content:center}
  .tlaxis::before{content:"";position:absolute;top:0;bottom:0;width:1.5px;background:var(--line)}
  .tlrow:first-child .tlaxis::before{top:50%}
  .tlrow:last-child .tlaxis::before{bottom:50%}
  .tldot{position:relative;z-index:1;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-top:5px;box-shadow:0 0 0 2px var(--card)}
  .tldot.late{background:var(--blk)}
  .tldot.sys{background:var(--mut)}
  .tlbody{flex:1;min-width:0}
  .tltt{font-size:13px;font-weight:500;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
  .tlsub{font-size:11.5px;color:var(--mut);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .tlrow.ro{cursor:default}
  .tlrow.ro:hover{background:transparent}
  /* ★ 이니셜 아바타(공용) — 담당자·참여자·그룹 */
  .iav{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;font-weight:700;letter-spacing:-.02em;line-height:1;box-sizing:border-box;flex-shrink:0;overflow:hidden;box-shadow:0 0 0 1.5px var(--card)}
  .iavstack{display:inline-flex;align-items:center;vertical-align:middle}
  .iavstack .iav,.iavstack .iavmore{margin-left:-7px}
  .iavstack .iav:first-child{margin-left:0}
  .iavmore{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--card2);color:var(--txt2);font-weight:700;box-sizing:border-box;flex-shrink:0;box-shadow:0 0 0 1.5px var(--card)}
  .tb-run{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ok);margin-left:6px;vertical-align:middle;animation:pulse 1.3s infinite}
  .tb-mut{color:var(--mut)}
  .tbbadge{display:inline-block;font-size:11px;font-weight:700;border-radius:6px;padding:2px 8px;white-space:nowrap}
  /* 업무 보드 모달 — 다중담당 픽커·진척 슬라이더 */
  .flabhint{font-weight:500;color:var(--mut);font-size:11px;margin-left:4px}
  .tbownpick{display:flex;gap:7px;flex-wrap:wrap;max-height:140px;overflow:auto;padding:2px}
  .tbownchip{font:inherit;font-size:12.5px;font-weight:600;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 13px;cursor:pointer;transition:.1s;user-select:none}
  .tbownchip:hover{background:var(--bg2)}
  .tbownchip.on{background:var(--accent);border-color:var(--accent);color:#fff}
  .tbrange{width:100%;accent-color:var(--accent);cursor:pointer}
  .tbprogval{font-weight:700;color:var(--accent);margin-left:6px}
  /* 오늘 출결 — 전체 합계 + 현장별 한 줄 + 자세히(카드) */
  .attline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:12px 15px}
  .attsum{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:14px;flex:1;min-width:0}
  .attsum b{font-weight:800}
  .attsum .sep{color:var(--line)}
  .attsum .l{color:var(--txt2);font-weight:700}
  .attsum .a{color:var(--blk);font-weight:700}
  .attsum .clr{color:var(--mut);font-weight:700;display:inline-flex;align-items:center;gap:3px}
  .attsum .clr svg{display:block}
  .attmore{font:inherit;font-size:12px;font-weight:700;color:var(--accent);background:none;border:0;cursor:pointer;padding:4px 6px;white-space:nowrap}
  .attmore:hover{text-decoration:underline}
  /* 현장별 한 줄 요약(접힌 기본 상태) */
  .attrows{margin-top:10px;border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .attrows:empty{display:none}
  /* 📋 출결 탭 — 핵심 지표 카드(토스/노션 톤: 여백 넉넉·숫자만 강조·라벨은 절제) */
  .attstats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:20px}
  .attstat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:78px}
  .attstat .asv{font-size:23px;font-weight:700;color:var(--txt);line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
  .attstat .ask{font-size:12px;color:var(--mut);font-weight:500;letter-spacing:-.01em}
  .attstat.warn{border-color:rgba(199,119,0,.28);background:rgba(199,119,0,.045)}
  .attstat.warn .asv{color:var(--warn,#c77700)}
  .attstat.bad{border-color:rgba(224,70,62,.28);background:rgba(224,70,62,.045)}
  .attstat.bad .asv{color:var(--blk)}
  .attsechd{font-size:12.5px;font-weight:700;color:var(--mut);letter-spacing:-.01em;margin:6px 2px 8px}
  .attempty{color:var(--mut);font-size:13.5px;line-height:1.6;padding:20px 2px}
  /* 모바일: 5칸 → 첫 줄 출근률·출근(2칸 넓게), 둘째 줄 지각·결근·장기결근(3칸) */
  @media(max-width:640px){
    .attstats{grid-template-columns:repeat(6,1fr);gap:8px}
    .attstat{padding:13px 8px;min-height:70px;border-radius:11px}
    .attstat:nth-child(1),.attstat:nth-child(2){grid-column:span 3}
    .attstat:nth-child(3),.attstat:nth-child(4),.attstat:nth-child(5){grid-column:span 2}
    .attstat .asv{font-size:20px}
    .attstat .ask{font-size:11.5px}
  }
  .attrow{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--card);border-top:1px solid var(--line);font-size:13px}
  .attrow:first-child{border-top:0}
  .attdot{width:8px;height:8px;border-radius:99px;flex-shrink:0}
  /* 출결 점: 정상·지각=뉴트럴, 결근(경고)만 빨강 */
  .attdot.ok{background:var(--mut)}.attdot.late{background:var(--mut)}.attdot.abs{background:var(--blk)}
  .attrow .nm{font-weight:700;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .attrow .pt{color:var(--mut);font-weight:600;font-size:12.5px}
  .attrow .sp{flex:1}
  .attrow .bdg{font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;white-space:nowrap}
  .attrow .bdg.late{color:var(--txt2);background:rgba(155,154,151,.16)}
  .attrow .bdg.abs{color:var(--blk);background:rgba(224,70,62,.1)}
  .attrow .clr{font-size:11.5px;font-weight:700;color:var(--mut);display:inline-flex;align-items:center;gap:3px;white-space:nowrap}
  .attrow .clr svg{display:block}
  .hsec.hattsec .attwrap{margin-top:12px}
  .hwup{border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .upitem{display:flex;align-items:center;gap:12px;padding:10px 14px;border-top:1px solid var(--line);font-size:13.5px;cursor:pointer;transition:background .1s}
  .upitem:first-child{border-top:0}
  .upitem:hover{background:var(--card2)}
  .updue{font-size:12px;font-weight:700;color:var(--mut);min-width:42px}
  .updue.late{color:var(--blk)}
  .uptitle{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .upowner{font-size:12px;color:var(--mut)}
  /* 오늘 출결 패널 */
  .hsub2{font-size:11px;font-weight:600;color:var(--mut)}
  .attnew{font-size:10.5px;font-weight:700;color:var(--accent);background:rgba(37,99,235,.1);border-radius:99px;padding:2px 8px;margin-left:4px;animation:pulse 1.2s infinite}
  .attwrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
  .attcard{border:1px solid var(--line);border-radius:8px;background:var(--card);padding:13px 15px}
  .attcard.s-late{}
  .attcard.s-abs{}
  .atth{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
  .attname{font-size:14px;font-weight:800}
  .attrate{margin-left:auto;font-size:12px;font-weight:800;color:var(--mut)}
  .attbar{display:flex;height:8px;border-radius:99px;background:var(--card2);overflow:hidden;margin:2px 0 10px}
  .attbar.hasabs{background:rgba(224,70,62,.14)}
  .attbar i{display:block;height:100%}
  .attbar i.n{background:var(--ok)}
  .attbar i.l{background:var(--warn)}
  .attstat{font-size:12px;color:var(--mut)}
  .attstat b{font-weight:800}
  .attstat b.ok{color:var(--ok)}.attstat b.late{color:var(--warn)}.attstat b.abs{color:var(--blk)}
  .atttot{color:var(--mut)}
  .attlists{display:flex;flex-direction:column;gap:5px}
  .attln{font-size:12.5px;color:var(--txt2);line-height:1.5}
  .attln.allok{color:var(--mut);display:flex;align-items:center;gap:5px}
  .attln.allok svg{display:block}
  .attlk{font-size:10.5px;font-weight:700;border-radius:5px;padding:1px 6px;margin-right:4px}
  .attlk.late{color:var(--txt2);background:rgba(155,154,151,.16)}
  .attlk.abs{color:var(--blk);background:rgba(224,70,62,.1)}
  .attlk.ok{color:var(--txt2);background:rgba(155,154,151,.16)}
  /* ⭐ 결근 알림 (영업인력 관리 핵심 — 상단 강조) — danger=장기결근, info=신규 미출근 */
  .attwarn{margin-bottom:10px;display:flex;flex-direction:column;gap:8px}
  .attwarn:empty,.attwarn[hidden]{display:none}
  .awbox{border-radius:8px;padding:11px 14px}
  .awbox.danger{border:1px solid rgba(224,70,62,.35);background:rgba(224,70,62,.07)}
  .awbox.info{border:1px solid rgba(37,99,235,.3);background:rgba(37,99,235,.06)}
  .attwarn .awh{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:800}
  .awbox.danger .awh{color:var(--blk)}
  .awbox.info .awh{color:var(--accent)}
  .attwarn .awh svg{display:block;flex-shrink:0}
  .attwarn .awl{margin-top:7px;display:flex;flex-wrap:wrap;gap:6px}
  .attwarn .awc{display:inline-flex;align-items:center;gap:5px;font-size:12px;background:var(--card);border-radius:99px;padding:3px 10px}
  .awbox.danger .awc{border:1px solid rgba(224,70,62,.25)}
  .awbox.info .awc{border:1px solid rgba(37,99,235,.22)}
  .attwarn .awc b{font-weight:800}
  .attwarn .awc .awd{font-weight:800}
  .awbox.danger .awc b,.awbox.danger .awc .awd{color:var(--blk)}
  .awbox.info .awc b,.awbox.info .awc .awd{color:var(--accent)}
  .attwarn .awc .aws{color:var(--mut);font-size:11.5px}
  /* 현장별 아코디언 — 행 클릭 시 인원 세부현황 펼침 */
  .attrow.attclk{cursor:pointer;user-select:none}
  .attrow.attclk:hover{background:var(--card2)}
  .attrow.attclk:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
  .attchev{margin-left:8px;color:var(--mut);display:inline-flex;transition:transform .15s;flex-shrink:0}
  .attchev svg{display:block}
  .attrow.open .attchev{transform:rotate(180deg)}
  .attdetail{background:var(--card2);border-top:1px solid var(--line);padding:11px 14px;display:flex;flex-direction:column;gap:6px}
  .attdetail[hidden]{display:none}
  .attdetail .attln{font-size:12.5px;color:var(--txt2);line-height:1.6}
  .attdetail .attln i{font-style:normal;color:var(--mut);font-size:11.5px;margin-left:1px}
  /* 사업부 진행바 */
  .hwprog{border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .hpitem{display:flex;align-items:center;gap:12px;padding:11px 14px;border-top:1px solid var(--line)}
  .hpitem:first-child{border-top:0}
  .hpname{font-size:13.5px;font-weight:600;width:160px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .hpbar{flex:1;height:7px;border-radius:99px;background:var(--card2);overflow:hidden}
  .hpbar i{display:block;height:100%;background:var(--accent);border-radius:99px}
  .hppct{font-size:12px;font-weight:700;color:var(--mut);min-width:42px;text-align:right}

  /* (구 조직도 트리 CSS .tree/.node/.dot/.dot2 제거 — 부서 카드 그리드(.deptgrid/.deptcard/.ochip/.sdot)로 대체됨. pulse는 다른 곳에서 사용하므로 보존) */
  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(58,210,159,.6)}70%{box-shadow:0 0 0 8px rgba(58,210,159,0)}100%{box-shadow:0 0 0 0 rgba(58,210,159,0)}}
  footer{color:var(--mut);font-size:11px;text-align:center;padding:8px 0 22px}
  .legend{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;font-size:11px;color:var(--mut);padding:0 16px 6px}
  .legend span{display:inline-flex;align-items:center;gap:5px}
  .ld{width:9px;height:9px;border-radius:99px;display:inline-block}

  /* ---- 컨트롤룸 (업무 세션) ---- */
  .cr{max-width:980px;margin:14px auto 0;padding:0 16px}
  .crhead{display:flex;align-items:center;gap:10px;margin-bottom:10px}
  .crtitle{font-size:15px;font-weight:800;letter-spacing:-.01em}
  .needbadge{font-size:12px;font-weight:700;padding:4px 10px;border-radius:99px;background:rgba(201,138,0,.16);color:var(--warn);animation:pulse2 1.4s infinite}
  @keyframes pulse2{0%{opacity:1}50%{opacity:.55}100%{opacity:1}}
  .btn{font:inherit;font-size:13px;font-weight:700;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:7px;padding:7px 13px;cursor:pointer;transition:.15s}
  .btn:hover{filter:brightness(1.06)}
  .btn.ghost{background:var(--card);color:var(--accent)}
  .btn.ghost.off{opacity:.5}
  .btn.ghost.alerton{background:rgba(47,111,237,.12)}
  /* 부동산 데이터 필터바 — 은은한 테두리·통일 높이/라운드·미니멀(과한 파랑 지양) */
  .rltf{font:inherit;font-size:var(--fs-sm,12.5px);height:34px;line-height:1;border:1px solid var(--line);background:var(--card);color:var(--txt);border-radius:8px;padding:0 10px;box-sizing:border-box;transition:border-color .12s,box-shadow .12s;-webkit-appearance:none;appearance:none}
  .rltf:hover{border-color:var(--mut)}
  .rltf:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent2)}
  select.rltf{cursor:pointer;padding-right:26px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239b9a97' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}
  select.rltf:disabled{opacity:.55;cursor:default;color:var(--mut)}
  input.rltf[type=date]{color:var(--txt2);min-width:0}
  button.rltf{cursor:pointer;color:var(--txt2);font-weight:600}
  button.rltf:hover{background:var(--bg2);border-color:var(--mut)}
  .rltfilters .hsub2{color:var(--mut);font-size:var(--fs-sm,12.5px)}
  /* 부동산 데이터 — 화면 내 2차 서브내비(좌측 접기식 그룹) + 우측 내용 (AI대화탭 유사 섹션 레이아웃) */
  #view-realty{padding:0!important}
  #view-realty:not([hidden]){display:flex;height:calc(100vh - 24px)}
  .rlt-side{width:214px;flex:0 0 214px;border-right:1px solid var(--line);background:var(--bg2);padding:18px 10px 24px;overflow-y:auto}
  .rlt-sidehd{font-size:15px;font-weight:800;letter-spacing:-.01em;padding:0 8px 12px;color:var(--txt)}
  .rlt-grp{margin-bottom:2px}
  .rlt-grph{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;text-align:left;font:inherit;font-size:12.5px;font-weight:700;color:var(--txt2);background:none;border:0;border-radius:8px;padding:8px 10px;cursor:pointer}
  .rlt-grph:hover{background:rgba(55,53,47,.055)}
  .rlt-grph .cr{display:inline-block;width:11px;color:var(--mut);transition:transform .15s;font-size:11px}
  .rlt-grp.collapsed .rlt-grpb{display:none}
  .rlt-grp.collapsed .rlt-grph .cr{transform:rotate(-90deg)}
  .rlt-grpb{padding:2px 0 6px}
  .rlt-navi{display:block;width:100%;text-align:left;font:inherit;font-size:12.5px;color:var(--txt2);background:none;border:0;border-radius:8px;padding:7px 10px 7px 27px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .rlt-navi:hover{background:rgba(55,53,47,.055)}
  .rlt-navi.active{background:var(--accent2);color:var(--accent);font-weight:700}
  .rlt-content{flex:1;min-width:0;overflow-y:auto;display:flex;flex-direction:column}
  .rlt-ph{max-width:520px;margin:60px auto;text-align:center;color:var(--muted)}
  .rlt-ph .phic{width:52px;height:52px;border-radius:15px;background:var(--accent2);color:var(--accent);display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
  .rlt-ph h3{font-size:16px;font-weight:800;color:var(--txt);margin:0 0 8px}
  .rlt-ph p{font-size:13px;line-height:1.6;margin:0}
  .rltf-toggle{display:none}
  @media(max-width:820px){
    #view-realty:not([hidden]){flex-direction:column;height:auto}
    /* 카테고리 서브내비: 화면 하나를 통째로 먹던 것(≈861px) → 높이 제한+스크롤, 항목 촘촘하게 */
    .rlt-side{width:auto;flex:none;border-right:0;border-bottom:1px solid var(--line);padding:8px 10px;max-height:34vh;overflow-y:auto}
    .rlt-sidehd{padding:0 8px 8px;font-size:14px}
    .rlt-grph{padding:6px 10px}
    .rlt-navi{padding:6px 10px 6px 24px}
    .rlt-content{overflow:visible}
    /* 접이식 필터(콘텐츠 우선): 기본 접힘 → '필터' 칩 탭 시 펼침. display 토글은 JS(style.display)가
       관리하므로 여기서 display 는 안 건드리고 max-height 로만 접는다(회귀 방지). */
    .rltf-toggle{display:inline-flex;align-items:center;gap:6px;height:40px;padding:0 14px;margin-bottom:12px;border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--txt2);font:inherit;font-size:var(--fs-sm,12.5px);font-weight:700;cursor:pointer}
    .rltf-toggle .cr{transition:transform .15s;font-size:11px;color:var(--mut)}
    .rlt-content.filt-open .rltf-toggle .cr{transform:rotate(180deg)}
    .rltfilters{max-height:0;overflow:hidden;opacity:0;margin:0!important;transition:max-height .22s ease,opacity .18s ease;gap:8px}
    .rlt-content.filt-open .rltfilters{max-height:560px;opacity:1;margin-bottom:14px!important}
    /* 펼쳤을 때 2열 컴팩트 — 인라인 고정폭(118·148·150px 등) 제거·라벨 숨김·터치높이 42px */
    .rltfilters>.rltf,.rltfilters>.btn{flex:1 1 calc(50% - 4px);width:auto!important;min-width:0;height:42px}
    .rltfilters .hsub2{display:none}
    #rltReset,#rltDealBtn{flex:1 1 100%}
  }
  .cr .new{margin-left:8px}
  .cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
  .scard{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:12px 13px;cursor:pointer;transition:.15s;box-shadow:0 1px 3px rgba(20,30,50,.07)}
  .scard:hover{border-color:var(--accent);box-shadow:0 2px 12px rgba(47,111,237,.14)}
  .scard.need{border-color:var(--warn);box-shadow:0 0 0 1px var(--warn),0 0 18px rgba(201,138,0,.18);animation:pulse3 1.6s infinite}
  @keyframes pulse3{0%{box-shadow:0 0 0 1px var(--warn),0 0 0 0 rgba(201,138,0,.4)}70%{box-shadow:0 0 0 1px var(--warn),0 0 0 7px rgba(201,138,0,0)}100%{box-shadow:0 0 0 1px var(--warn),0 0 0 0 rgba(201,138,0,0)}}
  .scard .sh{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  .scard .snm{font-weight:800;font-size:14px}
  .badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:99px;white-space:nowrap}
  .badge.working{background:rgba(19,163,106,.14);color:var(--ok)}
  .badge.need{background:rgba(201,138,0,.18);color:var(--warn)}
  .badge.authfail{background:rgba(224,70,62,.14);color:var(--blk)}
  .scard.authfail{border-color:var(--blk);box-shadow:0 0 0 1px var(--blk)}
  .badge.idle{background:var(--card2);color:var(--mut)}
  .scard .satt{font-size:10.5px;color:var(--mut);margin-left:auto}
  .scard .smeta{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap;font-size:11px;color:var(--mut)}
  .scard .tag{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;background:rgba(47,111,237,.1);color:var(--accent);white-space:nowrap}
  .scard .tasktag{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;background:rgba(15,157,88,.12);color:var(--ok);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis}
  .scard .smeta .mi{display:inline-flex;align-items:center;gap:3px;white-space:nowrap}
  .scard .smeta .mi b{font-weight:700;color:#475063}
  .scard .supowner{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--bg);border:1px solid var(--line);color:#475063;white-space:nowrap}
  .supcount{font-size:12px;color:var(--mut);font-weight:600}
  .sortbar{display:flex;align-items:center;gap:6px;margin-left:auto;font-size:12px}
  .sortbar label{color:var(--mut);font-weight:700}
  .sortbar select{font:inherit;font-size:12px;border:1px solid var(--line);border-radius:6px;padding:4px 8px;background:var(--card);color:var(--txt);cursor:pointer}
  .prev{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;color:#475063;background:#0d111a08;border:1px solid var(--line);border-radius:6px;padding:8px 9px;white-space:pre-wrap;word-break:break-all;max-height:140px;overflow:hidden}
  .crempty{color:var(--mut);font-size:13px;padding:10px 2px}
  /* ⭐ 에이전트 보고 피드(작업#14) — 피드백 대기 톤 재사용 */
  .repsec{margin-bottom:14px;border:1px solid var(--line);border-radius:8px;background:var(--accent2);padding:11px 13px}
  .repsec .rephead{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:800;color:var(--accent);margin-bottom:9px;cursor:pointer;user-select:none}
  .repsec .rephead svg{width:15px;height:15px}
  .repcount{font-size:11px;font-weight:700;color:var(--mut)}
  .repcaret{margin-left:auto;display:inline-flex;color:var(--mut);transition:transform .15s}
  .repsec.collapsed .repcaret{transform:rotate(-90deg)}
  .repsec.collapsed .rephead{margin-bottom:0}
  .repmini{display:none;font-size:12px;color:var(--txt2);line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:8px}
  .repmini .rfrom{font-weight:800;color:var(--txt)}
  .repmini .rstat{color:var(--ok);font-weight:700}
  .repmini .rstat.blocked{color:var(--blk)}
  .repsec.collapsed .repmini{display:block}
  .repsec.collapsed .repfeed{display:none}
  .repfeed{display:flex;flex-direction:column;gap:7px}
  .repitem{background:var(--card);border:1px solid var(--line);border-radius:7px;padding:8px 10px;font-size:12.5px;line-height:1.5}
  .repitem .rtop{display:flex;align-items:center;gap:7px;margin-bottom:3px;flex-wrap:wrap}
  .repitem .rfrom{font-weight:800;color:var(--txt)}
  .repitem .rtask{font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:99px;background:rgba(37,99,235,.1);color:var(--accent)}
  .repitem .rstat{font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:99px;background:rgba(15,157,88,.13);color:var(--ok)}
  .repitem .rstat.blocked{background:rgba(224,70,62,.13);color:var(--blk)}
  .repitem .rago{font-size:10.5px;color:var(--mut);margin-left:auto}
  .repitem .rsum{color:var(--txt2);white-space:pre-wrap;word-break:break-word}

  /* ---- 모달 ---- */
  .modal{position:fixed;inset:0;background:rgba(15,22,38,.46);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;padding:18px;z-index:50}
  .modal[hidden]{display:none}
  .mbox{background:var(--card);border:1px solid var(--line);border-radius:10px;width:min(860px,100%);max-height:90vh;display:flex;flex-direction:column;overflow-y:auto;box-shadow:0 20px 60px rgba(15,22,38,.32)}
  .mhead{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--card);z-index:2}
  .mhead .mt{font-weight:800;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mhead .mhgap{flex:1;min-width:0}
  .mhead .tb{border:1px solid var(--line);background:var(--card2);color:var(--mut);height:30px;min-width:32px;padding:0 9px;border-radius:6px;cursor:pointer;font-size:12px;font-weight:700;transition:.15s}
  .mhead .tb:hover{border-color:var(--accent);color:var(--accent)}
  .mhead .x{margin-left:auto;border:0;background:var(--card2);color:var(--mut);width:30px;height:30px;border-radius:6px;cursor:pointer;font-size:15px}
  .mfoot{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--line);position:sticky;bottom:0;background:var(--card);z-index:2}
  /* ---- 실시간 터미널 모달 ---- */
  .mbox.term{width:min(1000px,100%);height:86vh;max-height:96vh;resize:both;overflow:hidden;min-width:360px;min-height:240px}
  .mbox.term .mhead{cursor:move;user-select:none;position:static}   /* 터미널 모달은 sticky 끄기 — flex:1(.termwrap) 높이가 0이 돼 xterm이 빈 화면 되던 충돌 방지 */
  .mhead .tstat{font-size:11px;font-weight:700;padding:3px 9px;border-radius:99px;background:var(--card2);color:var(--mut)}
  .mhead .tstat.live{background:rgba(19,163,106,.14);color:var(--ok)}
  .termwrap{flex:1;min-height:0;background:#0e1320;border-radius:0 0 10px 10px;padding:8px 6px 6px 10px;overflow:hidden;position:relative}
  #term{width:100%;height:100%}
  /* 📎 세션 첨부 드롭 오버레이 — 딥블루 절제·점선 */
  .attachdrop{position:absolute;inset:8px;border:2px dashed var(--accent);border-radius:10px;background:rgba(29,78,216,.16);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#cfe0ff;font-weight:800;font-size:14px;z-index:6;pointer-events:none;backdrop-filter:blur(1px)}
  .attachdrop[hidden]{display:none}
  /* 🧠 내 Head-AI 패널(H2) — 큰 출력 화면 + 채팅 입력. 기존 xterm 재사용. */
  .hawrap{max-width:920px;display:flex;flex-direction:column;gap:12px}
  .haterm{height:min(56vh,540px);background:#0e1320;border:1px solid var(--line);border-radius:10px;padding:8px 6px 6px 10px;overflow:hidden}
  /* 🐛 #haTerm은 .haterm과 '같은 엘리먼트' — ID의 height:100%가 클래스의 min(56vh,540px)를 이겨 부모 auto 기준 0으로
     찌그러지던 버그(모바일 검수 2026-07-07 발견). 높이는 .haterm 한 곳에서만 관리. */
  #haTerm{width:100%}
  .hacompose{display:flex;gap:8px;align-items:flex-end}
  .hacompose textarea{flex:1;font:inherit;font-size:14px;line-height:1.5;border:1px solid var(--line);border-radius:8px;padding:11px 13px;background:var(--card2);resize:vertical;min-height:48px;max-height:180px}
  .hacompose .btn{white-space:nowrap;padding:11px 18px}
  .hahint{font-size:12px;color:var(--mut);min-height:16px}
  .hapill{font-size:12px;font-weight:700;padding:5px 11px;border-radius:999px;background:var(--card2);border:1px solid var(--line);color:var(--mut)}
  .hapill.on{color:#0f9d58;border-color:#bfe6cd;background:#eafaf0}
  .hapill.off{color:#cf5b4e;border-color:#f1cdc7;background:#fdeeeb}
  /* 📱 모바일 전용 터미널 입력바 — 한글이 네이티브 <textarea>에서 정상 조합된 뒤 텍스트+엔터(CR)로 pty 전송.
     데스크탑·비터치(.is-mobile 미부여)에선 display:none → 기존 xterm 직접입력 유지(회귀0). */
  .mk{flex:0 0 auto;min-width:46px;height:38px;padding:0 13px;border:1px solid var(--line);background:var(--card2);color:var(--txt);border-radius:7px;font-size:14px;font-weight:700;-webkit-tap-highlight-color:transparent;cursor:pointer}
  .mk:active{background:var(--accent);color:#fff;border-color:var(--accent)}
  .minbar{display:none;flex-direction:column;gap:7px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);background:var(--card);flex-shrink:0}
  .is-mobile #minbar{display:flex}
  .minbar .mkeys{display:flex;gap:6px;overflow-x:auto}
  .minbar .mintype{display:flex;gap:8px;align-items:flex-end}
  .minbar .mintype textarea{flex:1;min-height:42px;max-height:120px;resize:none;border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:inherit;font-size:16px;line-height:1.35;background:var(--card2);color:var(--txt)}
  .minbar .mintype textarea:focus{outline:none;border-color:var(--accent)}
  .minbar .mintype .btn{flex:0 0 auto;height:42px;padding:0 16px}
  .hakeys{display:none;gap:6px;overflow-x:auto;margin-bottom:2px}
  .is-mobile .hakeys{display:flex}
  /* 전체화면 토글 (터미널 모달) */
  .modal.full{padding:0}
  .modal.full .mbox.term{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;resize:none}
  .modal.full .mbox.term .mhead{cursor:default}
  .modal.full .termwrap{border-radius:0}
  .field{display:flex;flex-direction:column;gap:5px;padding:0 16px;margin-top:14px}
  .field label{font-size:12px;font-weight:700;color:var(--mut)}
  .field input,.field select,.field textarea{font:inherit;font-size:13px;border:1px solid var(--line);border-radius:7px;padding:9px 11px;background:var(--card2)}
  .field textarea{resize:vertical;min-height:70px}
  .field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--accent)}
  .ferr{color:var(--blk);font-size:12px;padding:0 16px;min-height:16px}

  /* ---- 모바일·태블릿 대응 (Tailscale 폰 접속) ---- */
  @media (max-width:640px){
    header{padding:12px 14px}
    h1{font-size:15px}
    .cr,.banner{padding:0 10px}
    .cards{grid-template-columns:1fr}
    .crhead{flex-wrap:wrap}
    .sortbar{margin-left:0}
    .cr .new{margin-left:auto}
    /* 모달 = 바텀시트(상용앱 문법): 아래에서 올라오고 상단만 라운드. 풀스크린(term)은 라운드 0 유지. */
    .modal{padding:0;align-items:flex-end}
    .mbox{border-radius:16px 16px 0 0;max-height:100dvh;width:100%;overflow-x:hidden}
    .mbox.term{width:100vw;height:100dvh;max-height:100dvh;resize:none;border-radius:0}
    .mbox.term .mhead{cursor:default}
    .termwrap{border-radius:0}
    /* 모바일 터미널 헤더: 한 줄 고정·상태칩/버튼은 안 줄고 제목만 말줄임 */
    .mhead{gap:6px;padding:10px 12px;flex-wrap:nowrap}
    .mhead .tb{height:34px;min-width:36px;flex-shrink:0}
    .mhead .x{flex-shrink:0}
    .mhead .tstat{flex-shrink:0;white-space:nowrap}
    .mhead .mt{flex-shrink:1}
    .mhead #tFull{display:none}  /* 폰에선 모달이 이미 풀스크린 → 전체화면 토글 숨김 */
    .field{padding:0 12px}
    .mfoot{padding:12px}
    .calgrid .calday{min-height:64px}
    /* 🐛 모달 폼 3열 행(시작일·마감일·상태)이 폰 폭을 넘어 가로스크롤 나던 문제 → 2열로 줄바꿈 */
    .frow{flex-wrap:wrap;padding:0 12px}
    .frow .field{flex:1 1 calc(50% - 6px);min-width:calc(50% - 6px);padding:0}
  }
  /* 모든 탭 상단 설명글(부제) 숨김 — 류팀장 요청(2026-07-08) */
  .topbar .sub{display:none}
  /* ---- 일정(캘린더) ---- */
  .calfilter{display:flex;align-items:center;gap:6px;font-size:12px}
  .calfilter label{color:var(--mut);font-weight:700}
  .calfilter select{font:inherit;font-size:12px;border:1px solid var(--line);border-radius:6px;padding:4px 8px;background:var(--card);color:var(--txt);cursor:pointer}
  .calbar{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:14px}
  .caltitle{font-size:16px;font-weight:800;min-width:140px;text-align:center;letter-spacing:-.01em}
  .cnav{width:30px;height:30px;border:1px solid var(--line);background:var(--card);border-radius:6px;cursor:pointer;font-size:16px;color:var(--txt2);line-height:1}
  .cnav:hover{border-color:var(--accent);color:var(--accent)}
  .calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .caldow{background:var(--bg2);font-size:12px;font-weight:700;color:var(--mut);text-align:center;padding:8px 0}
  .caldow.sun{color:#d04437}.caldow.sat{color:#2f6fed}
  .calday{background:var(--card);min-height:106px;padding:6px 7px;display:flex;flex-direction:column;gap:3px;cursor:pointer;transition:background .1s;overflow:hidden}
  .calday:hover{background:#fafaf9}
  .calday.other{background:#fbfbfa}
  .calday.other .cdnum{color:#c8c7c4}
  .cdnum{font-size:12px;font-weight:600;color:var(--txt2);align-self:flex-start}
  .calday.today .cdnum{background:var(--accent);color:#fff;border-radius:6px;min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px}
  .calday.sun .cdnum{color:#d04437}.calday.sat .cdnum{color:#2f6fed}
  .calday.today.sun .cdnum,.calday.today.sat .cdnum{color:#fff}
  .caltask{font-size:11px;font-weight:600;padding:2px 6px;border-radius:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--card2);color:var(--txt2)}
  .caltask.todo{border-color:#9b9a97;background:#f3f3f1}
  .caltask.doing{border-color:var(--accent);background:rgba(37,99,235,.1);color:var(--accent)}
  .caltask.done{border-color:var(--ok);background:rgba(15,157,88,.1);color:var(--ok);text-decoration:line-through}
  .caltask.late{border-color:var(--blk);background:rgba(224,70,62,.1);color:var(--blk)}
  .calmore{font-size:10.5px;color:var(--mut);padding-left:2px}
  /* 🤖 task 세션 실행중 표시 */
  .caltask.running{box-shadow:inset 0 0 0 1px rgba(15,157,88,.55)}
  /* ⚙️ 자동화(시스템 반복) 항목 — 일반 업무와 구분(보라색·점선·읽기전용 커서) */
  .caltask.sys{background:rgba(124,58,237,.09)!important;color:#6d28d9!important;text-decoration:none!important;cursor:default}
  /* ★ 스패닝 바(다일 일정 연속 막대) — 주(week) 행 레이아웃 + 이벤트 오버레이/레인 */
  .calgrid.spanning{display:flex;flex-direction:column;gap:0}
  .calgrid.spanning .calhead{display:grid;grid-template-columns:repeat(7,1fr);background:var(--line);gap:1px}
  .calgrid.spanning .calhead .caldow{background:var(--bg2)}
  .calweek{position:relative;border-left:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
  .calweek:first-of-type{}
  .calweekbg{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line)}
  .calwk{background:var(--card);min-height:118px;padding:5px 6px;cursor:pointer;transition:background .1s;display:flex;flex-direction:column}
  .calwk:hover{background:#fafaf9}
  .calwk.other{background:#fbfbfa}
  .calwk.other .cdnum{color:#c8c7c4}
  .calwk.today{background:var(--accent2)}
  .calwk .cdnum{font-size:12px;font-weight:600;color:var(--txt2);align-self:flex-start}
  .calwk.sun .cdnum{color:#d04437}.calwk.sat .cdnum{color:#2f6fed}
  .calwk.today .cdnum{background:var(--accent);color:#fff;border-radius:6px;min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;padding:0 5px}
  .calwk.today.sun .cdnum,.calwk.today.sat .cdnum{color:#fff}
  .calwk.dragover{background:rgba(37,99,235,.12);box-shadow:inset 0 0 0 2px var(--accent)}
  .calwk.blank{background:var(--card);cursor:default}
  /* 일정 헤더: 제목 + 전체/개인 세그먼트 */
  .caltop-l{display:flex;align-items:center;gap:12px}
  .calseg{display:inline-flex;background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:2px}
  .calseg button{font:inherit;font-size:12.5px;font-weight:600;color:var(--mut);background:none;border:0;border-radius:6px;padding:4px 12px;cursor:pointer;transition:.12s}
  .calseg button.on{background:var(--card);color:var(--accent);box-shadow:0 1px 2px rgba(15,22,38,.08)}
  /* + 새 업무 버튼 — 전체/개인 세그먼트와 동일 크기감 */
  #calAdd{font-size:12.5px;font-weight:700;padding:5px 13px;border-radius:8px;line-height:1.4;min-height:33px}
  /* 오늘 버튼 — 달력 좌측 하단 플로팅(고정) */
  .caltoday{position:fixed;left:264px;bottom:24px;z-index:40;font:inherit;font-size:12.5px;font-weight:700;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:99px;padding:7px 15px;cursor:pointer;box-shadow:0 3px 12px rgba(15,22,38,.12)}
  .caltoday:hover{border-color:var(--accent);color:var(--accent)}
  /* 📱 모바일 연속 세로스크롤 캘린더(아이폰 캘린더식) — 월 블록 스택 */
  .calgrid.stack{display:block;border:0;background:none;border-radius:0;overflow:visible;position:relative}
  .calgrid.stack .calstickyhead{position:sticky;top:0;z-index:6;display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--bg);padding-bottom:3px}
  .calgrid.stack .calstickyhead .caldow{background:var(--bg);padding:7px 0}
  .calgrid.stack .calmo{margin-bottom:6px}
  .calgrid.stack .calmlabel{font-size:16px;font-weight:800;letter-spacing:-.02em;color:var(--txt);padding:16px 2px 9px}
  .calgrid.stack .calweek{border-left:0;border-right:0;border-bottom:1px solid var(--line)}
  .calgrid.stack .calweek:first-of-type{border-top:1px solid var(--line)}
  .calevlayer{position:absolute;left:0;right:0;pointer-events:none}
  .calev{font-size:11px;font-weight:600;height:19px;line-height:17px;padding:0 7px;border-radius:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid transparent;background:var(--card2);color:var(--txt2);position:absolute;box-sizing:border-box;pointer-events:auto;cursor:pointer;display:flex;align-items:center;gap:3px}
  .calev.todo{background:#f1f1ef}
  .calev.doing{background:rgba(37,99,235,.13);color:var(--accent)}
  .calev.done{background:rgba(15,157,88,.13);color:var(--ok)}
  .calev.done .cbttl{text-decoration:line-through}
  .calev.late{background:rgba(224,70,62,.13);color:var(--blk)}
  .calev.sys{background:rgba(124,58,237,.1)!important;color:#6d28d9!important;cursor:default}
  .calev.running{box-shadow:inset 0 0 0 1px rgba(15,157,88,.55)}
  .calev .cbttl{overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
  .calev.contl{border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0;padding-left:9px}
  .calev.contl::before{content:'‹';position:absolute;left:2px;font-weight:800;opacity:.55}
  .calev.contr{border-top-right-radius:0;border-bottom-right-radius:0}
  .calev.contr::after{content:'›';position:absolute;right:3px;font-weight:800;opacity:.55}
  .calev.dragging{opacity:.45}
  .calev:not(.sys):hover{filter:brightness(.97);box-shadow:0 1px 4px rgba(20,30,50,.12)}
  .calev .crh{position:absolute;top:0;bottom:0;width:7px;cursor:ew-resize;z-index:2}
  .calev .crh.l{left:0}.calev .crh.r{right:0}
  .calevmore{position:absolute;font-size:10.5px;font-weight:700;color:var(--mut);pointer-events:auto;cursor:pointer;padding:0 4px;height:17px;line-height:17px}
  .calevmore:hover{color:var(--accent)}
  .calev.ghost{opacity:.9;box-shadow:0 4px 14px rgba(20,30,50,.25);pointer-events:none;z-index:50;position:fixed}
  /* 📱 월캘린더 컴팩트(2026-07-07): 셀이 과하게 높아 5주가 화면을 넘던 것 → 셀 낮춤 + 내비 여백 축소 */
  @media(max-width:560px){.calwk{min-height:58px;padding:3px 3px}.calev{font-size:10px;height:16px;line-height:14px;padding:0 4px;border-radius:0}.calbar{margin-bottom:8px}.caltitle{font-size:15px;min-width:110px}}
  /* 📱 일정: 헤더(월제목·요일) 고정 + 달력만 세로 스크롤 + 날짜 중앙상단 + 오늘 플로팅 */
  @media(max-width:560px){
    #view-calendar:not([hidden]){display:flex;flex-direction:column;height:100%;min-height:0}
    #view-calendar .topbar{flex-direction:row!important;align-items:center;gap:8px;padding:12px 16px 6px}
    #view-calendar .topbar>.caltop-l{flex:1 1 auto;min-width:0;min-height:0;padding-left:0;gap:10px;flex-direction:row!important;align-items:center;justify-content:flex-start}
    #view-calendar .topbar h2{font-size:19px}
    #view-calendar .topbar .actions{width:auto;margin:0;flex:0 0 auto;justify-content:flex-end}
    #view-calendar .calfilter{display:none}   /* 모바일 캘린더: 담당자 필터 숨김(공간 절약) */
    #view-calendar>.vbody{flex:1;min-height:0;display:flex;flex-direction:column;padding:0;overflow:hidden}
    #view-calendar .calbar{display:flex;justify-content:flex-start;gap:0;margin:0;padding:12px 16px 8px;flex-shrink:0;background:var(--bg)}
    #view-calendar .calbar .cnav{display:none}                 /* 스크롤로 이동 → 화살표 숨김 */
    #view-calendar .caltitle{font-size:18px;font-weight:800;min-width:0;text-align:left;letter-spacing:-.02em}
    .calgrid.stack{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 12px 24px}
    .calgrid.stack .calstickyhead{background:var(--bg);top:0}
    .calwk .cdnum{align-self:center}                            /* 날짜 중앙 상단 정렬 */
    .caltoday{left:16px;bottom:calc(var(--m-tabh) + var(--sab) + 14px);padding:6px 14px;font-size:12px}
  }
  .bcard.sys{background:rgba(124,58,237,.05);cursor:default}
  .gtbar.sys{background:#7c3aed!important;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.14) 0 6px,transparent 6px 12px)}
  .badge2.sys{background:rgba(124,58,237,.12);color:#6d28d9}
  .tbbadge.sys{background:rgba(124,58,237,.12);color:#6d28d9}
  /* 🤖 시스템 태그 칩 */
  .systag{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:700;color:#6d28d9;background:rgba(124,58,237,.12);border-radius:99px;padding:1px 6px;white-space:nowrap;vertical-align:middle}
  .runb{cursor:pointer;margin-right:2px}
  .runtag{display:inline-flex;align-items:center;gap:3px;font-size:10.5px;font-weight:700;color:var(--ok);background:rgba(15,157,88,.13);border-radius:99px;padding:1px 7px;cursor:pointer;white-space:nowrap}
  .runtag:hover{background:rgba(15,157,88,.22)}
  .frow{display:flex;gap:12px;padding:0 16px}
  .frow .field{flex:1;padding:0}
  /* ---- 모바일: 사이드바 드로어 ---- */
  .hamb{display:none}
  .navmask{display:none}
  .safetop{display:none}
  @media (max-width:820px){
    /* 상단 세이프에어리어(노치/상태바) 상시 불투명 커버 — 배경막(z85)·사이드바(z90) 위, 모달(z100) 아래 */
    .safetop{display:block;position:fixed;top:0;left:0;right:0;height:var(--sat);background:var(--bg);z-index:95;pointer-events:none}
    .hamb{display:flex;position:fixed;top:10px;left:10px;z-index:80;width:38px;height:38px;align-items:center;justify-content:center;background:var(--card);border:1px solid var(--line);border-radius:7px;font-size:17px;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.08)}
    .sidebar{position:fixed;top:0;bottom:0;left:0;height:auto;z-index:90;transform:translateX(-100%);transition:transform .22s ease;background:var(--bg2)}
    .app.navopen .sidebar{transform:translateX(0);box-shadow:0 0 50px rgba(0,0,0,.25)}
    /* 🐛 배경막: display 껐다 켜기 → opacity 전환으로 교체(2026-07-04). viewport-fit=cover로 배경막이 상태바까지
       덮으면서, display:none 순간전환 시 iOS가 상단(상태바) 영역을 다시 안 그려 '어두운 잔상'이 남던 문제 해결.
       항상 레이아웃엔 있되(opacity 0·pointer-events none) 열릴 때만 보이게 → 부드럽게 사라져 잔상 0. */
    .navmask{display:block;position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:85;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s ease}
    .app.navopen .navmask{opacity:1;visibility:visible;pointer-events:auto}
    /* 모바일 헤더: 세로 스택(제목 줄 → 툴바 전폭). 제목 줄만 햄버거(좌상단 고정) 만큼 들여쓰기. */
    .topbar{flex-direction:column;align-items:stretch;gap:10px;padding:16px 16px 0}
    .topbar>div:first-child{padding-left:48px;min-height:38px;display:flex;flex-direction:column;justify-content:center}
    .vbody{padding:14px 16px 40px}
    .topbar h2{font-size:18px}
    .topbar .actions{margin-left:0;width:100%;gap:6px;flex-wrap:wrap}
    /* 모달은 햄버거(z80)·사이드바(z90)·Q&A FAB(z60) 위로 — 폰에서 떠 보이는 겹침 제거 */
    .modal{z-index:100}
  }
  /* ───────── 📱 하단 탭바 (상용앱 1차 내비게이션) ───────── */
  .mtabbar{display:none}
  @media (max-width:820px){
    /* 하단 고정 탭바: 홈·일정·에이전트·채팅·더보기. 데스크탑은 display:none이라 무영향. */
    .mtabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:75;background:var(--card);border-top:1px solid var(--line);
      padding:0 max(var(--sal),4px) var(--sab) max(var(--sar),4px);box-shadow:0 -6px 22px rgba(15,22,38,.06)}
    .mtab{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:var(--m-tabh);
      background:none;border:0;font:inherit;font-size:10.5px;font-weight:600;color:var(--mut);cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent;transition:color .12s;padding:6px 2px}
    .mtab .mti{display:flex;align-items:center;justify-content:center}
    .mtab .mti svg{width:23px;height:23px;stroke-width:1.85}
    .mtab .mtl{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.02em}
    .mtab:active{color:var(--txt2)}
    .mtab.active{color:var(--accent)}
    .mtab.active .mti{color:var(--accent)}
    .mtab .mtdot{position:absolute;top:5px;left:50%;transform:translateX(3px);min-width:16px;height:16px;padding:0 4px;box-sizing:border-box;
      display:none;align-items:center;justify-content:center;font-size:10px;font-weight:800;line-height:1;color:#fff;background:var(--blk);border:1.5px solid var(--card);border-radius:99px}
    .mtab .mtdot.on{display:flex}
    /* 콘텐츠·플로팅요소를 탭바 위로 들어올림(탭바에 안 가리게) + 상단 노치/시계 안전영역(viewport-fit=cover 필수) */
    .main{padding-bottom:calc(var(--m-tabh) + var(--sab));padding-top:var(--sat)}
    .sidebar{padding-top:var(--sat);padding-bottom:calc(14px + var(--sab))}
    .qafab{right:16px;bottom:calc(16px + var(--m-tabh) + var(--sab))}
    .fbfab{right:16px;bottom:calc(80px + var(--m-tabh) + var(--sab))}
    .qapanel{right:12px;left:12px;width:auto;bottom:calc(80px + var(--m-tabh) + var(--sab));height:min(64vh,calc(100vh - 190px))}
    /* 사이드바 드로어: 좌측 세이프에어리어·터치타깃 확대 */
    .sidebar{padding-left:calc(10px + var(--sal))}
    .nav,.navsubitem,.acc-item{min-height:var(--m-tap)}
    /* 채팅 대화 화면엔 자체 입력창이 있으므로 전역 FAB 숨김(입력 겹침 방지) */
    body[data-view="chat"] .qafab,body[data-view="chat"] .fbfab,body[data-view="chat"] .qapanel{display:none!important}
    /* 하단 탭바 '더보기'가 드로어를 여므로 좌상단 플로팅 햄버거 제거 → 헤더 여백 회수(상용앱 톤) */
    .hamb{display:none}
    .topbar>div:first-child{padding-left:0}
  }
  /* 일정 — 보드/표 뷰 */
  .calmodes{display:inline-flex;border:1px solid var(--line);border-radius:6px;overflow:hidden;margin-right:auto}
  .calmodes button{font:inherit;font-size:12.5px;font-weight:600;border:0;background:var(--card);color:var(--txt2);padding:6px 12px;cursor:pointer;border-left:1px solid var(--line)}
  .calmodes button:first-child{border-left:0}
  .calmodes button.on{background:var(--accent);color:#fff}
  .calboard{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
  .bcol{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:10px;min-height:140px}
  .bcolh{font-size:13px;font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:6px}
  .bcolh .bcolname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .bcnt{font-size:11px;color:var(--mut);background:var(--card);border-radius:99px;padding:1px 7px;flex-shrink:0}
  .bcolmenu{margin-left:auto;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--mut);background:none;border:0;border-radius:6px;cursor:pointer;opacity:.55;transition:.12s}
  .bcolmenu:hover{opacity:1;background:rgba(55,53,47,.07);color:var(--txt2)}
  .bcol:hover .bcolmenu{opacity:.85}
  .projmenu{position:fixed;z-index:120;min-width:150px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 34px rgba(15,22,38,.16);padding:5px}
  .projmenu button{display:flex;align-items:center;gap:9px;width:100%;text-align:left;font:inherit;font-size:13px;font-weight:500;color:var(--txt);background:none;border:0;border-radius:7px;padding:9px 11px;cursor:pointer}
  .projmenu button svg{width:14px;height:14px;color:var(--mut);flex-shrink:0}
  .projmenu button:hover{background:var(--bg2)}
  .projmenu button.danger{color:var(--blk)}
  .projmenu button.danger:hover{background:rgba(224,70,62,.08)}
  .projmenu button.danger svg{color:var(--blk)}
  .bcards{display:flex;flex-direction:column;gap:7px}
  .bcard{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:9px 10px;cursor:pointer;transition:.1s}
  .bcard:hover{border-color:var(--accent)}
  .bcard[draggable]{cursor:grab}
  .bcard[draggable]:active{cursor:grabbing}
  .bcol.dragover{background:var(--accent2)}   /* 노션식(2026-07-06): 점선 제거 — 컬러 틴트 + 플레이스홀더로 대체 */
  
  .bct{font-size:13px;font-weight:600;margin-bottom:3px}
  .bcm{font-size:11px;color:var(--mut)}
  .bempty{font-size:12px;color:var(--mut);text-align:center;padding:8px}
  .ctbl{border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .ctr{display:grid;grid-template-columns:2fr 1fr 1fr .7fr;gap:10px;padding:10px 14px;border-top:1px solid var(--line);font-size:13px;cursor:pointer;align-items:center}
  .ctr.ctrh{border-top:0;background:var(--bg2);font-weight:700;color:var(--mut);font-size:12px;cursor:default}
  .ctr:not(.ctrh):hover{background:#fafaf9}
  .ctt{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ctlate{color:var(--blk);font-weight:700}
  .badge2{font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px}
  .badge2.todo{background:#f3f3f1;color:var(--mut)}.badge2.doing{background:rgba(37,99,235,.1);color:var(--accent)}.badge2.review{background:rgba(192,38,211,.1);color:#c026d3}.badge2.done{background:rgba(15,157,88,.1);color:var(--ok)}.badge2.late{background:rgba(224,70,62,.1);color:var(--blk)}
  @media (max-width:760px){.calboard{grid-template-columns:1fr 1fr}.ctr{grid-template-columns:2fr 1fr .7fr}.ctr span:nth-child(3){display:none}}
  /* ---- WBS / 간트 ---- */
  .gtstats{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:14px}
  .gtstat{font:inherit;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:9px 14px;cursor:pointer;text-align:left;transition:.1s;display:flex;flex-direction:column;gap:2px;min-width:84px}
  .gtstat:hover{background:var(--bg2)}
  .gtstat.on{border-color:var(--accent);background:var(--accent2)}
  .gtstat .gn{font-size:20px;font-weight:800;color:var(--txt);line-height:1}
  .gtstat .gl{font-size:11.5px;font-weight:600;color:var(--mut)}
  .gtstat.late .gn{color:var(--blk)}.gtstat.done .gn{color:var(--ok)}
  .gtwrap{border:1px solid var(--line);border-radius:8px;background:var(--card);overflow:hidden}
  .gtscroll{overflow-x:auto}
  .gtinner{min-width:640px}
  .gthead{display:flex;border-bottom:1px solid var(--line);background:var(--bg2);position:sticky;top:0;z-index:2}
  .gtlabelhd{width:230px;flex-shrink:0;padding:9px 14px;font-size:11.5px;font-weight:700;color:var(--mut);border-right:1px solid var(--line);box-sizing:border-box}
  .gttrack-hd{flex:1;position:relative;height:34px}
  .gttick{position:absolute;top:0;bottom:0;border-left:1px solid var(--line)}
  .gttick>span{position:absolute;top:8px;left:5px;font-size:10.5px;font-weight:600;color:var(--mut);white-space:nowrap}
  .gtgrp{border-top:1px solid var(--line)}
  .gtgrp:first-child{border-top:0}
  .gtgrph{padding:8px 14px;font-size:12px;font-weight:800;color:var(--txt2);background:var(--bg2);display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none}
  .gtgrph:hover{background:var(--card2)}
  .gtgcaret{color:var(--mut);display:inline-flex;transition:transform .15s}
  .gtgrp.collapsed .gtgcaret{transform:rotate(-90deg)}
  .gtgrp.collapsed .gtgbody{display:none}
  .gtgdot{width:9px;height:9px;border-radius:50%;background:var(--gc,var(--mut));flex-shrink:0}
  .gtgn{font-weight:700;color:var(--mut);font-size:11px;background:var(--card);border:1px solid var(--line);border-radius:99px;padding:1px 8px;line-height:1.5}
  .gtrow{display:flex;align-items:stretch;border-top:1px solid var(--line);min-height:38px}
  .gtrow:hover{background:var(--bg2)}
  .gtlabel{width:230px;flex-shrink:0;padding:8px 14px;border-right:1px solid var(--line);box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;gap:2px;cursor:pointer}
  .gtlabel .gtt{font-size:12.5px;font-weight:600;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gtlabel .gto{font-size:11px;color:var(--mut)}
  .gttrack{flex:1;position:relative;cursor:pointer}
  .gtgridline{position:absolute;top:0;bottom:0;border-left:1px solid var(--line);opacity:.5}
  .gttoday{position:absolute;top:0;bottom:0;border-left:2px dashed var(--accent);z-index:1;opacity:.4}
  .gttoday.hd{opacity:1;border-left-style:solid;z-index:3}
  .gttodaylbl{position:absolute;top:4px;left:3px;font-size:9.5px;font-weight:800;color:#fff;background:var(--accent);border-radius:4px;padding:1px 5px;white-space:nowrap;box-shadow:0 1px 3px rgba(37,99,235,.4)}
  .gtbar{position:absolute;top:50%;transform:translateY(-50%);height:18px;border-radius:0;display:flex;align-items:center;padding:0 7px;font-size:10.5px;font-weight:600;color:#fff;overflow:hidden;white-space:nowrap;min-width:7px}   /* 라운드·그림자 제거(2026-07-06) — 깔끔한 사각 막대 */
  .gtbar.todo{background:#9b9a97}.gtbar.doing{background:var(--accent)}.gtbar.done{background:var(--ok)}.gtbar.late{background:var(--blk)}
  .gtbar .runb{margin-right:4px;display:inline-flex}
  .gtempty{padding:30px;text-align:center;color:var(--mut);font-size:13px}
  @media (max-width:760px){.gtlabelhd,.gtlabel{width:140px}.gtinner{min-width:480px}}
  /* ---- 파일 ---- */
  .fcrumb{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:13px;margin-bottom:12px}
  .fcrumb a{color:var(--accent);cursor:pointer;font-weight:600}
  .fcrumb a:hover{text-decoration:underline}
  .fcrumb .sep{color:var(--mut)}
  .ftable{border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .frow2{display:flex;align-items:center;gap:11px;padding:10px 14px;border-top:1px solid var(--line);font-size:13.5px}
  .frow2:first-child{border-top:0}
  .frow2:hover{background:#fafaf9}
  .frow2 .fic{width:18px;text-align:center;flex-shrink:0}
  .frow2 .fnm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .frow2.dir .fnm{font-weight:700;cursor:pointer;color:var(--txt)}
  .frow2.dir .fnm:hover{color:var(--accent)}
  .frow2 .fmeta{font-size:12px;color:var(--mut);white-space:nowrap}
  .frow2 .fdl{font-size:12px;color:var(--accent);cursor:pointer;font-weight:600;text-decoration:none;white-space:nowrap}
  .frow2 .fdl:hover{text-decoration:underline}
  .fempty2{padding:26px;text-align:center;color:var(--mut);font-size:13px}
  .ftable{position:relative}
  .fstatus{font-size:12px;color:var(--accent);font-weight:600}
  .frow2 .fchk,.frow2 .fchkph{flex-shrink:0;width:15px;height:15px}
  .frow2 .fchk{cursor:pointer;accent-color:var(--accent);margin:0}
  .frow2.sel{background:var(--accent2)}
  .frow2[draggable="true"]{cursor:grab}
  .ftile[draggable="true"]{cursor:grab}
  .frow2.dragover{background:rgba(37,99,235,.16);outline:2px dashed var(--accent);outline-offset:-3px}
  .frow2.up .fnm{color:var(--mut);font-weight:600;cursor:pointer}
  .frow2.up:hover{background:#fafaf9}
  .frow2 .facts{display:flex;align-items:center;gap:9px;flex-shrink:0;margin-left:4px}
  .frow2 .fact{font-size:13px;cursor:pointer;text-decoration:none;opacity:.55;transition:.12s}
  .frow2:hover .fact{opacity:1}
  .frow2 .fact:hover{transform:scale(1.12)}
  .fcrumb a.dragover{background:rgba(37,99,235,.16);border-radius:6px;outline:1.5px dashed var(--accent)}
  .fselbar{display:flex;align-items:center;gap:8px;padding:0 12px;height:46px;background:var(--bg2);border:1px solid var(--line);border-radius:8px;margin:0 0 8px;font-size:13px}
  .fselbar .fselc{font-weight:700;min-width:62px}
  .fselbar .fsa{height:30px;padding:0 11px}
  .fselbar .fsa.fsdel{border-color:var(--blk);color:var(--blk)}
  .fselbar .fsa:disabled{opacity:.4;cursor:default;border-color:var(--line);color:var(--mut)}
  .fselbar .fseltip{margin-left:auto;color:var(--mut);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  @media (max-width:760px){.fselbar .fseltip{display:none}}
  .fdropmask{position:absolute;inset:0;background:rgba(37,99,235,.07);border:2.5px dashed var(--accent);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:800;color:var(--accent);pointer-events:none;z-index:5}
  .ftbody{position:relative;min-height:300px;user-select:none}
  .frow2.dir .fnm{cursor:pointer}
  .frow2.dir .fnm:hover{color:var(--accent);text-decoration:underline}
  /* 보기 전환 토글 */
  .fviews{display:inline-flex;border:1px solid var(--line);border-radius:6px;overflow:hidden}
  .fviews button{font:inherit;font-size:14px;border:0;background:var(--card);color:var(--txt2);padding:5px 11px;cursor:pointer;border-left:1px solid var(--line);line-height:1}
  .fviews button:first-child{border-left:0}
  .fviews button.on{background:var(--accent);color:#fff}
  /* 파일 뷰 세그먼트 토글 — 내 작업물 ↔ 회사 공용 (토스/노션식 미니멀) */
  .fseg{display:inline-flex;gap:2px;padding:2px;background:var(--hover,rgba(55,53,47,.055));border-radius:8px}
  .fseg button{display:inline-flex;align-items:center;gap:5px;font:inherit;font-size:12.5px;font-weight:600;border:0;background:none;color:var(--txt2);padding:5px 12px;border-radius:6px;cursor:pointer;line-height:1;transition:background .12s,color .12s,box-shadow .12s}
  .fseg button svg{width:14px;height:14px}
  .fseg button:hover{color:var(--txt)}
  .fseg button.on{background:var(--card,#fff);color:var(--accent);box-shadow:0 1px 2px rgba(0,0,0,.08)}
  .fmembersel{font:inherit;font-size:12.5px;color:var(--txt);background:var(--card);border:1px solid var(--line);border-radius:6px;padding:5px 8px;cursor:pointer;max-width:150px}
  /* 아이콘(그리드) 보기 */
  .ftbody.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:10px;padding:12px}
  .ftbody.grid .frow2.up,.ftbody.grid .fempty2{grid-column:1/-1}
  .ftile{position:relative;border:1px solid var(--line);border-radius:8px;padding:16px 8px 11px;display:flex;flex-direction:column;align-items:center;gap:7px;cursor:pointer;background:var(--card);transition:.1s}
  .ftile:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(37,99,235,.1)}
  .ftile.sel{background:var(--accent2);border-color:var(--accent)}
  .ftile.dragover{outline:2px dashed var(--accent);outline-offset:-3px;background:rgba(37,99,235,.12)}
  .ftile .ti{font-size:36px;line-height:1}
  .ftile .tn{font-size:12px;text-align:center;word-break:break-all;line-height:1.35;max-height:33px;overflow:hidden;font-weight:500}
  .ftile .fchk{position:absolute;top:7px;left:7px;margin:0;opacity:.6}
  .ftile:hover .fchk,.ftile.sel .fchk{opacity:1}
  .ftile .tn{cursor:default}
  .ftile .tacts{position:absolute;top:5px;right:5px;opacity:0;background:var(--card);border:1px solid var(--line);border-radius:7px;padding:1px 3px}
  .ftile:hover .tacts{opacity:1}
  .ftile .tacts .facts{gap:6px}
  /* 마퀴 선택 박스 */
  .marquee{position:absolute;border:1.5px solid var(--accent);background:rgba(37,99,235,.12);z-index:4;pointer-events:none;border-radius:2px}
  /* ---- 지식/플레이북 ---- */
  .knwrap{display:flex;gap:18px;align-items:flex-start}
  .knlist{width:264px;flex-shrink:0;display:flex;flex-direction:column;gap:1px}
  .knsearch{font:inherit;font-size:13px;border:1px solid var(--line);border-radius:7px;padding:7px 11px;background:var(--card2);width:200px}
  .knsearch:focus{outline:none;border-color:var(--accent);background:var(--card)}
  /* 아코디언 그룹 */
  .kgrp{display:flex;align-items:center;gap:7px;padding:8px 9px;cursor:pointer;border-radius:7px;font-weight:800;font-size:13px;color:var(--txt);user-select:none}
  .kgrp:hover{background:rgba(55,53,47,.05)}
  .kgrp .kgemoji{font-size:13px}
  .kgrp .kglabel{flex:1;min-width:0}
  .kgcaret{font-size:10px;color:var(--mut);transition:transform .15s;display:inline-block}
  .kgrp.open>.kgcaret,.ksub.open>.kgcaret{transform:rotate(90deg)}
  .kgcount{font-size:11px;font-weight:700;color:var(--mut);background:var(--card2);border-radius:99px;padding:1px 8px;min-width:20px;text-align:center}
  .kgbody{display:flex;flex-direction:column;gap:1px;padding-left:6px;margin-bottom:2px}
  .ksub{display:flex;align-items:center;gap:6px;padding:6px 9px;cursor:pointer;border-radius:7px;font-weight:700;font-size:12px;color:var(--txt2);user-select:none}
  .ksub:hover{background:rgba(55,53,47,.05)}
  .ksub .ksublabel{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ksbody{display:flex;flex-direction:column;gap:1px;padding-left:10px;border-left:1.5px solid var(--line);margin-left:9px}
  .knitem{text-align:left;font:inherit;border:0;background:none;border-radius:7px;padding:7px 10px;cursor:pointer;color:var(--txt2);display:flex;flex-direction:column;gap:2px}
  .knitem:hover{background:rgba(55,53,47,.05)}
  .knitem.active{background:var(--accent2);color:var(--txt)}
  .knitem .knnm{font-weight:600;font-size:13px;display:flex;align-items:center;gap:6px}
  .knitem .knpb{font-size:9.5px;font-weight:700;color:var(--accent);background:rgba(37,99,235,.1);border-radius:4px;padding:0 5px}
  .knitem .kndt{font-size:11px;color:var(--mut)}
  .kndoc{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px}
  .kndhead{display:flex;align-items:center;gap:8px;padding:11px 16px;border-bottom:1px solid var(--line)}
  .kndhead .kdt{font-weight:800;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;max-width:50%}
  .kndhead .kndpath{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--mut)}
  .kndbody{padding:18px 24px}
  .knedit{width:100%;min-height:440px;font-family:inherit;font-size:13px;line-height:1.65;border:0;outline:none;resize:vertical;background:transparent;color:var(--txt)}
  .knempty{padding:40px;text-align:center;color:var(--mut)}
  .md{line-height:1.7;color:var(--txt);font-size:14px}
  .md h1{font-size:23px;font-weight:800;margin:.2em 0 .4em;letter-spacing:-.02em}
  .md h2{font-size:18px;font-weight:800;margin:1.1em 0 .4em}
  .md h3{font-size:15px;font-weight:700;margin:1em 0 .3em}
  .md p{margin:.55em 0}
  .md ul{margin:.4em 0;padding-left:1.3em}
  .md li{margin:.25em 0}
  .md a{color:var(--accent)}
  .md strong{font-weight:700}
  .md blockquote{border-left:3px solid var(--line);margin:.6em 0;padding:.1em 0 .1em 14px;color:var(--mut)}
  .md hr{border:0;border-top:1px solid var(--line);margin:1.1em 0}
  .md code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em;background:var(--card2);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
  .md pre.cb{background:#0e1320;color:#dfe6f2;border-radius:8px;padding:13px 15px;overflow-x:auto;margin:.7em 0;line-height:1.5}
  .md pre.cb code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;background:none;border:0;padding:0;color:inherit;white-space:pre}
  .md table.mdt{border-collapse:collapse;margin:.7em 0;font-size:13px;display:block;overflow-x:auto;max-width:100%}
  .md table.mdt th,.md table.mdt td{border:1px solid var(--line);padding:6px 11px;text-align:left}
  .md table.mdt th{background:var(--bg2);font-weight:700}
  .md table.mdt tr:nth-child(even) td{background:#fafaf9}
  @media (max-width:760px){.knwrap{flex-direction:column}.knlist{width:100%}}
  /* ---- 파일 미리보기 모달(#62) ---- */
  /* 채팅 파일카드 탭→미리보기(2026-07-30): 모바일 전체화면 채팅(.chatwrap.csel=z130) 위에 떠야 하므로 그보다 높게. */
  #pvModal{z-index:9998}
  .pvbox{background:#fff;border-radius:10px;width:min(960px,94vw);max-height:92vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 64px rgba(0,0,0,.28)}
  .pvhead{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line)}
  .pvname{font-weight:700;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .pvhead .x{background:none;border:0;cursor:pointer;color:var(--mut);display:inline-flex;padding:4px;border-radius:7px}
  .pvhead .x:hover{background:var(--card2);color:var(--txt)}
  .pvbody{flex:1;overflow:auto;padding:16px;background:#faf9f8;min-height:240px}
  .pvbody img{display:block;max-width:100%;height:auto;margin:0 auto;border-radius:6px;background:#fff}
  .pvbody iframe{width:100%;height:78vh;border:0;border-radius:6px;background:#fff}
  /* 📄 PDF.js 캔버스 뷰어(페이지 세로 스크롤·모바일 폭맞춤). 브라우저 핀치줌 그대로 동작. */
  .pvbody .pvpdf{max-width:900px;margin:0 auto;display:flex;flex-direction:column;gap:12px}
  .pvbody .pvpg{background:#fff;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.08);overflow:hidden;width:100%;min-height:60px}
  .pvbody .pvpg canvas{display:block;width:100%;height:auto}
  .pvpdfmore{color:var(--mut);text-align:center;font-size:12px;padding:6px}
  .pvbody pre{margin:0;white-space:pre-wrap;word-break:break-word;font:12.5px/1.62 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--txt)}
  .pvbody .pvmd{background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px 20px;max-width:840px;margin:0 auto}
  .pvload,.pvno{color:var(--mut);text-align:center;padding:46px 12px;font-size:14px;line-height:1.7}
  .pvno .btn{margin-top:14px}
  /* ---- 프로젝트 권한 표(#63) ---- */
  .patbl{border-collapse:collapse;font-size:13px;min-width:100%}
  .patbl th,.patbl td{border:1px solid var(--line);padding:6px 10px;text-align:center;white-space:nowrap}
  .patbl thead th{background:var(--bg2);font-weight:700;font-size:12px}
  .patbl th:first-child,.patbl td.pauser{text-align:left}
  .patbl td.pauser{font-weight:600}
  .patbl .pauid{color:var(--mut);font-size:11px;margin-left:6px;font-weight:400}
  .patbl input{accent-color:var(--accent);cursor:pointer;width:16px;height:16px}
  /* ---- 조직도(업무세션 하단, 컴팩트·접기) ---- */
  .orgsec{margin-top:30px;border-top:1px solid var(--line);padding-top:14px}
  .orgtoggle{font:inherit;font-size:13px;font-weight:700;color:var(--mut);background:none;border:0;cursor:pointer;padding:4px 2px;display:flex;align-items:center;gap:6px}
  .orgtoggle:hover{color:var(--txt)}
  .orgcaret{font-size:11px;transition:transform .15s;display:inline-block}
  .orgsec.open .orgcaret{transform:rotate(180deg)}
  .orgwrap[hidden]{display:none}
  /* (구 조직도 트리 .orgwrap .tree/.node 컴팩트 오버라이드 제거 — 카드 그리드로 대체) */
  /* ════ 파일 뷰: Finder/탐색기 스타일 (앞선 파일 CSS를 덮어씀) ════ */
  .fbodywrap{display:flex;flex-direction:column;height:calc(100vh - 92px);padding:14px 30px 18px;min-height:0}
  .fbar{display:flex;align-items:center;gap:14px;padding:0 2px 10px;flex-wrap:nowrap}
  .upinfo{font-size:12px;color:var(--mut);white-space:nowrap}
  .upbar{display:inline-block;width:120px;height:6px;background:var(--line);border-radius:99px;overflow:hidden;vertical-align:middle;margin-left:8px}
  .upbar>i{display:block;height:100%;background:var(--accent);transition:width .12s linear}
  .fbar .fcrumb{margin:0;flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .fbar .fselbar{display:flex;align-items:center;gap:7px;height:auto;background:none;border:0;padding:0;margin:0;flex-shrink:0}
  .fbar .fselbar .fselc{font-weight:700;font-size:12.5px;color:var(--accent);white-space:nowrap;min-width:0}
  .fbar .fselbar .fseltip{font-size:12px;color:var(--mut);white-space:nowrap}
  .fbar .fselbar .fsa{height:30px;padding:0 11px}
  .fbar .fselbar .fsa.fsdel{border-color:var(--blk);color:var(--blk)}
  .fpane{flex:1;min-height:0;overflow-y:auto;position:relative;border:1px solid var(--line);border-radius:8px;background:var(--card)}
  .ftbody{position:relative;min-height:100%}
  .ftbody.list{display:block}
  .flhead,.ftbody.list .frow2{display:grid;grid-template-columns:30px 1fr 96px 122px 70px;align-items:center;gap:10px;padding:0 14px}
  .flhead{height:34px;position:sticky;top:0;background:var(--bg2);border-bottom:1px solid var(--line);font-size:12px;font-weight:700;color:var(--mut);z-index:2;border-radius:8px 8px 0 0}
  .flhead .rt{text-align:right}
  .ftbody.list .frow2{height:40px;border-top:0;border-bottom:1px solid #f1f1ef;font-size:13.5px;cursor:default}
  .ftbody.list .frow2:hover{background:#f7f7f5}
  .ftbody.list .frow2.sel{background:var(--accent2)}
  .ftbody.list .frow2.up{display:flex;align-items:center;gap:10px;color:var(--mut);font-weight:600;cursor:pointer}
  .ftbody.list .frow2.up:hover{background:#f7f7f5}
  .fnamec{display:flex;align-items:center;gap:9px;min-width:0}
  .fnamec .fnm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .ftbody.list .frow2.dir .fnm{cursor:pointer;font-weight:600}
  .ftbody.list .frow2.dir .fnm:hover{color:var(--accent);text-decoration:underline}
  .ftbody.list .fcol{font-size:12px;color:var(--mut);white-space:nowrap}
  .ftbody.list .fcol.rt{text-align:right}
  .ftbody.list .facts{display:flex;align-items:center;justify-content:flex-end;gap:10px}
  .fic{flex-shrink:0}
  .fchk{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;margin:0}
  .fact{font-size:13px;cursor:pointer;text-decoration:none;opacity:.5;transition:.1s}
  .frow2:hover .fact,.ftile:hover .fact{opacity:1}
  .fact:hover{transform:scale(1.14)}
  .ftbody.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(122px,1fr));gap:12px;align-content:start;padding:14px}
  .ftbody.grid .frow2.up{grid-column:1/-1;display:flex;align-items:center;gap:10px;padding:8px 10px;color:var(--mut);font-weight:600;cursor:pointer;border-radius:6px}
  .ftbody.grid .frow2.up:hover{background:#f7f7f5}
  .ftbody.grid .fempty2{grid-column:1/-1}
  .ftile{position:relative;border:1px solid var(--line);border-radius:8px;padding:16px 8px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;background:var(--card);height:124px;box-sizing:border-box}
  .ftile:hover{border-color:var(--accent);box-shadow:0 2px 10px rgba(37,99,235,.1)}
  .ftile.sel{background:var(--accent2);border-color:var(--accent)}
  .ftile .ti{font-size:38px;line-height:1}
  .ftile .tn{font-size:12px;text-align:center;word-break:break-all;line-height:1.35;max-height:34px;overflow:hidden;font-weight:500;width:100%}
  .ftile .fchk{position:absolute;top:7px;left:7px;opacity:.55}
  .ftile:hover .fchk,.ftile.sel .fchk{opacity:1}
  .ftile .tacts{position:absolute;top:5px;right:5px;display:flex;gap:7px;opacity:0;background:var(--card);border:1px solid var(--line);border-radius:7px;padding:2px 6px}
  .ftile:hover .tacts{opacity:1}
  .frow2[draggable="true"],.ftile[draggable="true"]{cursor:grab}
  .frow2.dragover,.ftile.dragover{outline:2px dashed var(--accent);outline-offset:-3px;background:rgba(37,99,235,.1)}
  .marquee{position:absolute;border:1.5px solid var(--accent);background:rgba(37,99,235,.12);z-index:5;pointer-events:none;border-radius:2px}
  .fdropmask{position:absolute;inset:0;background:rgba(37,99,235,.08);border:2.5px dashed var(--accent);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:800;color:var(--accent);pointer-events:none;z-index:6}
  @media (max-width:820px){
    .fbodywrap{height:calc(100vh - 120px);padding:10px 16px 14px}
    /* 🐛 행 자식은 5개(체크·이름·크기·날짜·액션)인데 4열 그리드라 액션이 다음 줄로 랩되어 겹치던 문제.
       기존 셀렉터 .fcol.rt:last-of-type은 acts()가 span이라 아무것도 못 잡았음 → '크기' 열을 숨겨 4개=4열 정합. */
    .flhead,.ftbody.list .frow2{grid-template-columns:26px minmax(0,1fr) 78px 68px;gap:8px;padding:0 10px}
    .flhead>span:nth-child(3),.ftbody.list .frow2>.fcol.rt:nth-of-type(2){display:none}
    .ftbody.list .facts{gap:8px}
    .fact{opacity:.85}   /* 터치엔 hover가 없어 액션이 흐릿하게 숨어 있던 것 → 항상 보이게 */
    .fbar .fselbar .fseltip{display:none}
  }
  /* 🔋 사용량 한도 위젯 */
  .usagecard{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:12px 15px;margin-bottom:14px;box-shadow:0 1px 3px rgba(20,30,50,.07);max-width:520px}
  .usagecard .uctitle{font-size:12.5px;font-weight:800;color:var(--txt2);margin-bottom:9px;display:flex;align-items:center;gap:6px}
  .usagecard .uctitle .ucerr{font-size:11px;font-weight:600;color:var(--mut);margin-left:auto}
  .usagecard .uctitle .ucsub{font-size:11px;font-weight:600;color:var(--mut)}
  .urow{display:flex;align-items:center;gap:10px;margin:8px 0}
  .urow .ulabel{font-size:12px;color:var(--mut);font-weight:700;width:46px;flex-shrink:0}
  .ubar{flex:1;height:8px;background:var(--card2);border-radius:99px;overflow:hidden;min-width:0}
  .ubar>i{display:block;height:100%;width:0;background:var(--accent);border-radius:99px;transition:width .4s ease}
  .urow.warn .ubar>i{background:var(--warn)}
  .urow.crit .ubar>i{background:var(--blk)}
  .urow .upct{font-size:12px;font-weight:800;width:40px;text-align:right;flex-shrink:0}
  .urow.warn .upct{color:var(--warn)}.urow.crit .upct{color:var(--blk)}
  .urow .ureset{font-size:11px;color:var(--mut);width:104px;text-align:right;flex-shrink:0;white-space:nowrap}
  @media (max-width:520px){.urow .ureset{width:auto}.usagecard{max-width:none}}
  /* 🗂 조직도 = 부서 카드 그리드 (반응형·실시간) */
  .orggrid{padding:6px 2px 16px}
  .deptgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(244px,1fr));gap:12px;align-items:start}
  .deptcard{background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 1px 3px rgba(20,30,50,.06);overflow:hidden;transition:border-color .15s,box-shadow .15s}
  .deptcard.hq{grid-column:1/-1;background:linear-gradient(135deg,#eef3fb,#fff);border-color:rgba(37,99,235,.3)}
  .deptcard.working{border-color:rgba(15,157,88,.5)}
  .deptcard.needs-feedback{border-color:var(--warn);box-shadow:0 0 0 1px rgba(207,120,17,.25)}
  .deptcard.done{opacity:.82}
  .depthead{display:flex;align-items:center;gap:8px;padding:11px 13px;cursor:pointer;user-select:none}
  .depthead .dname{font-weight:800;font-size:14px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .depthead .dstat{font-size:11px;font-weight:700;color:var(--mut);white-space:nowrap}
  .deptcard.working .depthead .dstat{color:var(--ok)}
  .deptcard.needs-feedback .depthead .dstat{color:var(--warn)}
  .depthead .dprog{font-size:11px;color:var(--mut);background:var(--card2);border-radius:99px;padding:1px 8px;white-space:nowrap}
  .depthead .dcol{border:0;background:none;color:var(--mut);cursor:pointer;font-size:12px;transition:transform .15s;padding:0 2px;line-height:1}
  .deptcard.collapsed .dcol{transform:rotate(-90deg)}
  .deptcard.collapsed .dbody{display:none}
  .dbody{padding:0 13px 13px}
  .ochips{display:flex;flex-wrap:wrap;gap:6px}
  .ochip{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:12px;font-weight:600;color:var(--txt2);background:var(--card2);border:1px solid var(--line);border-radius:99px;padding:4px 10px;cursor:default;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ochip.live{cursor:pointer}
  .ochip.live:hover{border-color:var(--accent);color:var(--accent);background:var(--accent2)}
  .ochip .ccount{font-size:10.5px;color:var(--mut);font-weight:700}
  .ochip.camp{background:var(--accent2);border-color:rgba(37,99,235,.25);color:var(--accent);font-weight:700}
  .ochip.idle{opacity:.66}
  .ochip.done{color:var(--ok)}
  .sdone{color:var(--ok);font-weight:800;font-size:11px;line-height:1}
  .sdot{width:8px;height:8px;border-radius:99px;flex-shrink:0;background:#b3bac6;display:inline-block}
  .sdot.working{background:var(--ok);animation:pulse 1.2s infinite}
  .sdot.needs-feedback{background:var(--warn);animation:pulse2 1.4s infinite}
  .sdot.done,.sdot.on{background:var(--ok)}
  .sdot.idle,.sdot.off,.sdot.offline{background:#b3bac6}
  .sdot.planned{background:var(--warn)}
  .sdot.loaded{background:var(--accent)}
  .sdot.blocked{background:var(--blk)}
  /* 👤 직원 현황 + 📁 프로젝트 현황 블록 */
  .orgblock{margin:2px 0 18px}
  .orgblock+.orgblock{margin-top:6px}
  .orgbh{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:800;color:var(--mut);margin:0 2px 10px;letter-spacing:.01em}
  .orgbh svg{color:var(--accent)}
  .emplist{display:flex;flex-wrap:wrap;gap:8px}
  .emprow{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:12.5px;font-weight:600;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 13px;cursor:default}
  .emprow.live{cursor:pointer}
  .emprow.live:hover{border-color:var(--accent);color:var(--accent);background:var(--accent2)}
  .emprow.working{border-color:rgba(15,157,88,.45)}
  .emprow.needs-feedback{border-color:var(--warn)}
  .emprow .empnm{font-weight:700;color:var(--txt)}
  .emprow .empst{font-size:11px;color:var(--mut);font-weight:600}
  .deptcard .depthead.static{cursor:default}
  .pbar{height:6px;border-radius:99px;background:var(--card2);overflow:hidden;margin:2px 0 8px}
  .pbarf{height:100%;background:var(--accent);border-radius:99px;transition:width .3s}
  .deptcard.done .pbarf{background:var(--ok)}
  .pmeta{font-size:11.5px;color:var(--txt2);font-weight:600;margin-bottom:8px}
  .pmeta b{color:var(--accent)}
  .pmeta.mut{color:var(--mut);font-weight:500}
  .orgempty{font-size:12.5px;color:var(--mut);padding:6px 2px}
  @media (max-width:560px){.deptgrid{grid-template-columns:1fr}}
  /* 📹 회의 */
  .mtrooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
  .mtroom{border:1px solid var(--line);border-radius:8px;padding:15px;background:var(--card);display:flex;flex-direction:column;gap:10px;transition:border-color .12s,box-shadow .12s}
  .mtroom:hover{border-color:var(--accent);box-shadow:0 2px 12px rgba(37,99,235,.1)}
  .mtroom .nm{font-size:15px;font-weight:700;color:var(--txt);display:flex;align-items:center;gap:8px}
  .mtroom .mtdot2{width:8px;height:8px;border-radius:50%;background:var(--ok);animation:pulse 1.4s infinite;flex-shrink:0}
  .mtroom .meta{font-size:12px;color:var(--mut)}
  .mtroom .jn{align-self:flex-start;margin-top:2px}
  /* ★ 회의록 정리뷰(아카이브) */
  .mtarch{margin-top:30px}
  .mtarchhd{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px}
  .mtarch .hsech{font-size:15px;color:var(--txt);font-weight:800;margin:0}
  .mtarchtools{display:flex;gap:8px;flex-wrap:wrap}
  .mtarchsearch{font:inherit;font-size:13px;color:var(--txt);background:var(--card);border:1px solid var(--line);border-radius:7px;padding:7px 11px;outline:none;width:220px}
  .mtarchsearch:focus{border-color:var(--accent)}
  .mtarchsel{font:inherit;font-size:12.5px;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:7px;padding:7px 9px;outline:none;cursor:pointer}
  .mtarchsel:focus{border-color:var(--accent)}
  .mtmonth{font-size:12px;font-weight:700;color:var(--mut);margin:18px 0 9px;letter-spacing:.01em}
  .mtmonth:first-child{margin-top:0}
  .mtcard{border:1px solid var(--line);border-radius:8px;background:var(--card);padding:14px 16px;margin-bottom:10px;transition:border-color .12s}
  .mtcard:hover{border-color:#d6d6d2}
  .mtcardtop{display:flex;align-items:center;gap:10px;cursor:pointer}
  .mtcdate{font-size:12px;font-weight:700;color:var(--accent);background:var(--accent2);border-radius:6px;padding:3px 9px;white-space:nowrap;flex-shrink:0}
  .mtctitle{font-size:14.5px;font-weight:700;color:var(--txt);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mtcproj{font-size:11px;font-weight:700;color:var(--txt2);background:var(--bg2);border:1px solid var(--line);border-radius:6px;padding:2px 8px;white-space:nowrap}
  .mtcmeta{font-size:11.5px;color:var(--mut);white-space:nowrap;flex-shrink:0}
  .mtccaret{color:var(--mut);transition:transform .15s;flex-shrink:0}
  .mtcard.open .mtccaret{transform:rotate(180deg)}
  .mtcsum{font-size:12.5px;color:var(--txt2);margin-top:9px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .mtcbody{margin-top:12px;padding-top:12px;border-top:1px solid var(--line);display:none}
  .mtcard.open .mtcbody{display:block}
  .mtcsec{margin-bottom:12px}
  .mtcsec:last-child{margin-bottom:0}
  .mtcsec h5{font-size:11px;font-weight:800;color:var(--mut);margin:0 0 6px;letter-spacing:.03em}
  .mtcsec ul{margin:0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:5px}
  .mtcsec li{font-size:12.5px;color:var(--txt);line-height:1.45;padding-left:16px;position:relative}
  .mtcsec.dec li::before{content:"✓";position:absolute;left:0;color:var(--ok);font-weight:800}
  .mtcsec.act li::before{content:"→";position:absolute;left:0;color:var(--accent);font-weight:800}
  .mtcsec .mtnone{font-size:12px;color:var(--mut)}
  .mtctx{font-size:12px;color:var(--txt2);line-height:1.55;max-height:240px;overflow:auto;background:var(--bg2);border-radius:6px;padding:10px 12px}
  .mtctx .sp{font-weight:700;color:var(--txt)}
  .mtcparts{display:flex;gap:7px;flex-wrap:wrap;margin-top:4px}
  .mtcpart{font-size:11px;color:var(--txt2);background:var(--bg2);border-radius:99px;padding:2px 9px}
  .mtcpartx{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:var(--txt2);background:var(--bg2);border:1px solid var(--line);border-radius:99px;padding:3px 11px 3px 3px}
  .mtcavs{flex-shrink:0;display:inline-flex;align-items:center;margin-left:2px}
  .mtcallbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
  .mtcalltitle{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:700;color:var(--txt);min-width:0}
  .mtcalltitle .mtdot{width:9px;height:9px;border-radius:50%;background:var(--blk);animation:pulse 1.3s infinite;flex-shrink:0}
  .mtcode{font-size:11px;font-weight:600;color:var(--mut);background:var(--bg2);border-radius:6px;padding:2px 8px}
  .mtctrls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .mtbtn{display:inline-flex;align-items:center;gap:7px;font:inherit;font-size:13px;font-weight:600;color:var(--txt);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 13px;cursor:pointer;transition:.12s}
  .mtbtn:hover{border-color:var(--accent);color:var(--accent)}
  .mtbtn svg{width:17px;height:17px}
  .mtbtn.off{background:var(--blk);border-color:var(--blk);color:#fff}
  .mtbtn.danger{background:var(--accent);border-color:var(--accent);color:#fff}
  .mtbtn.danger:hover{filter:brightness(.94);color:#fff}
  .mtbtn.ghost{color:var(--txt2)}
  .mtbtn.recording{border-color:var(--blk)}
  .mtbtn.recording svg{color:var(--blk)}
  .mtbtnl{font-size:12px}
  .mtstage{display:flex;gap:14px;align-items:stretch}
  .mtgridwrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px}
  .mtgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-content:start}
  .mtempty{text-align:center;color:var(--mut);font-size:13px;padding:18px 16px;border:1px dashed var(--line);border-radius:8px;background:var(--card)}
  .mttile{position:relative;background:#11131a;border-radius:10px;overflow:hidden;aspect-ratio:4/3;border:1px solid var(--line)}
  .mttile.speaking{border-color:#22c55e;box-shadow:0 0 0 2px #22c55e inset}
  .mtmicwrap{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:99px;background:var(--card2);border:1px solid var(--line);transition:border-color .1s}
  .mtmicwrap.active{border-color:#22c55e}
  .mtmicdot{font-size:13px;filter:grayscale(1);opacity:.6;transition:all .1s}
  .mtmicwrap.active .mtmicdot{filter:none;opacity:1}
  .mtmicbar{width:46px;height:6px;border-radius:99px;background:var(--line);overflow:hidden}
  .mtmicbar>i{display:block;height:100%;width:0;background:#22c55e;transition:width .08s linear}
  .mttile video{width:100%;height:100%;object-fit:cover;display:block;background:#11131a}
  .mttile.self video{transform:scaleX(-1)}
  .mttile.self.sharing video{transform:none;object-fit:contain}
  .mttile .nmtag{position:absolute;left:9px;bottom:9px;font-size:12px;font-weight:600;color:#fff;background:rgba(0,0,0,.5);border-radius:7px;padding:3px 9px;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mttile .muted{position:absolute;right:9px;top:9px;width:24px;height:24px;border-radius:50%;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center}
  .mttile.amuted .muted{display:flex}
  .mttile .muted svg{width:13px;height:13px;color:#fff}
  /* ── 화면공유/비디오 클릭→확대(spotlight). 뷰어별 로컬 상태(시그널링 미변경) ── */
  .mttile{cursor:pointer}
  .mttile .mtexp{position:absolute;left:9px;top:9px;width:26px;height:26px;border-radius:7px;background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center;color:#fff;opacity:0;transition:opacity .12s}
  .mttile .mtexp svg{width:14px;height:14px;display:block}
  .mttile:hover .mtexp{display:flex;opacity:1}
  .mtgrid.spotlit{display:flex;flex-wrap:wrap;gap:10px;align-content:start}
  .mtgrid.spotlit .mttile{aspect-ratio:auto}
  .mtgrid.spotlit .mttile.spotmain{flex:0 0 100%;order:-1;height:min(56vh,540px)}
  .mtgrid.spotlit .mttile.spotmain video{object-fit:contain;background:#11131a}
  .mtgrid.spotlit .mttile:not(.spotmain){flex:0 0 150px;height:100px}
  .mtgrid.spotlit .mttile.spotmain .mtexp{display:flex;opacity:.85}
  @media (max-width:820px){
    .mtgrid.spotlit .mttile.spotmain{height:min(40vh,300px)}
    .mtgrid.spotlit .mttile:not(.spotmain){flex:0 0 108px;height:74px}
  }
  .mttx{width:300px;flex-shrink:0;border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;background:var(--card);max-height:62vh}
  .mttxh{padding:11px 14px;border-bottom:1px solid var(--line);font-size:13px;font-weight:700;color:var(--txt);display:flex;align-items:center;justify-content:space-between}
  .mttxlive{font-size:11px;font-weight:700;color:var(--blk)}
  .mttxlive.off{color:var(--mut)}
  .mttxbody{flex:1;overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px}
  .mttxempty{color:var(--mut);font-size:12.5px;text-align:center;margin-top:20px}
  .mttxseg .who{font-size:11px;font-weight:700;color:var(--accent)}
  .mttxseg .tx{font-size:13px;color:var(--txt);line-height:1.5;white-space:pre-wrap;word-break:break-word}
  .mtresult{max-width:760px;margin:0 auto;border:1px solid var(--line);border-radius:10px;background:var(--card);padding:22px 26px}
  .mtresult h3{margin:0 0 6px;font-size:17px;font-weight:800;color:var(--txt)}
  .mtresult .rsub{font-size:13px;color:var(--mut);margin-bottom:14px}
  @media (max-width:820px){.mtstage{flex-direction:column}.mttx{width:auto;max-height:none;height:240px}}
  /* ── 💬 직원 채팅 ── */
  .chatwrap{display:flex;gap:0;height:calc(100vh - 150px);min-height:420px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--card)}
  /* 💬 데스크탑 채팅 도크 — 사이드바 옆 슬라이드 패널(본문은 우측으로 밀림). 모바일 무관(min-width:821px). */
  .chatdockclose{display:none;flex-shrink:0;width:30px;height:30px;align-items:center;justify-content:center;color:var(--mut);background:none;border:0;border-radius:7px;cursor:pointer}
  .chatdockclose svg{width:17px;height:17px}
  .chatdockclose:hover{background:var(--bg2);color:var(--txt2)}
  @media(min-width:821px){
    .main{transition:padding-left .2s ease}
    .app.chatopen #view-chat{position:fixed;left:248px;top:0;bottom:0;width:360px;z-index:45;display:flex!important;flex-direction:column;background:var(--card);border-right:1px solid var(--line);box-shadow:8px 0 26px rgba(15,22,38,.08);overflow:hidden;animation:chatdockin .22s ease}
    .app.chatopen #view-chat .topbar{padding:16px 14px 12px;min-height:0;align-items:center}
    .app.chatopen #view-chat .topbar h2{font-size:16px}
    .app.chatopen #view-chat .chatdockclose{display:inline-flex;margin-left:auto}
    .app.chatopen #view-chat .vbody{padding:0;flex:1;min-height:0;overflow:hidden;display:flex}
    .app.chatopen #view-chat .chatwrap{height:100%;min-height:0;flex:1;border:0;border-radius:0}
    .app.chatopen #view-chat .chatside{width:100%;border-right:0}
    .app.chatopen #view-chat .chatmain{display:none}
    .app.chatopen #view-chat .chatwrap.csel .chatside{display:none}
    .app.chatopen #view-chat .chatwrap.csel .chatmain{display:flex}
    .app.chatopen #view-chat .chatwrap.csel .chatback{display:inline-flex}
    .app.chatopen .main{padding-left:360px}
  }
  @keyframes chatdockin{from{transform:translateX(-12px);opacity:.4}to{transform:translateX(0);opacity:1}}
  /* 좁은 데스크탑(≤900)에선 밀지 않고 본문 위에 덮기 */
  @media(min-width:821px) and (max-width:900px){ .app.chatopen .main{padding-left:0} }
  .chatside{width:280px;flex-shrink:0;border-right:1px solid var(--line);display:flex;flex-direction:column;background:var(--bg2)}
  .chatsearch{padding:10px;border-bottom:1px solid var(--line);display:flex;gap:6px;align-items:center}
  .chatsearch input{flex:1;min-width:0}
  .cgnewbtn{flex-shrink:0;border:1px solid var(--line);background:var(--card);color:var(--txt);border-radius:8px;padding:7px 10px;font-size:12.5px;cursor:pointer;white-space:nowrap}
  .cgnewbtn:hover{border-color:var(--accent);color:var(--accent)}
  /* 👥 단톡방 — 보낸이 라벨 + 만들기 모달 */
  .cmfrom{font-size:11.5px;color:var(--sub,#6b7280);margin:2px 2px 3px}
  /* 👥 시스템 메시지(입장/퇴장/초대) — 중앙 정렬 회색 칩 */
  .cmsys{align-self:center;max-width:80%;text-align:center;font-size:11.5px;color:var(--mut);background:var(--card2);border-radius:99px;padding:4px 12px;margin:4px auto}
  .pipbody{margin:0;height:100vh;background:var(--bg);font-family:Pretendard,-apple-system,sans-serif;color:var(--fg)}
  .pipwrap{display:flex;flex-direction:column;height:100vh;min-height:0}
  .piphd{flex:none;padding:10px 14px;border-bottom:1px solid var(--line);font-weight:700;font-size:var(--fs-sm,13px);background:var(--bg2)}
  .pipmsgs{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:2px;min-height:0}
  .pipform{flex:none;display:flex;gap:8px;padding:8px 10px;border-top:1px solid var(--line);background:var(--bg2)}
  .pipinput{flex:1;resize:none;border:1px solid var(--line);border-radius:18px;padding:8px 12px;font-family:inherit;font-size:var(--fs-sm,13px);background:var(--bg);color:var(--fg);max-height:120px}
  .pipsend{flex:none;width:36px;height:36px;border:0;border-radius:50%;background:var(--accent);color:#fff;font-size:16px;cursor:pointer;align-self:flex-end}
  #chatPip.on{color:var(--accent)}
  .cmkan{align-self:center;width:min(340px,88%);border:1px solid var(--line);border-radius:14px;background:var(--card2);padding:12px 14px;margin:6px auto}
  .cmkan.off{opacity:.72}
  .ckhd{font-size:var(--fs-xs,12px);font-weight:600;color:var(--mut);margin-bottom:4px}
  .cktt{font-size:var(--fs-sm,13px);font-weight:700;color:var(--fg);word-break:break-word}
  .ckmeta{font-size:var(--fs-xs,12px);color:var(--mut);margin-top:4px}
  .ckbtns{display:flex;gap:8px;margin-top:10px}
  .ckadd{flex:1;border:0;border-radius:10px;background:var(--accent);color:#fff;padding:8px 0;font-size:var(--fs-sm,13px);font-weight:600;cursor:pointer;font-family:inherit}
  .ckdis{flex:1;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);padding:8px 0;font-size:var(--fs-sm,13px);cursor:pointer;font-family:inherit}
  .ckst{margin-top:10px;font-size:var(--fs-xs,12px);font-weight:600;color:var(--mut)}
  .ckfile{display:flex;align-items:center;gap:10px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
  .ckfinfo{flex:1;min-width:0}
  .ckfnm{font-size:var(--fs-sm,13px);font-weight:600;color:var(--fg);word-break:break-word}
  .ckfpath{font-size:var(--fs-xs,12px);color:var(--mut);word-break:break-word;margin-top:1px}
  .ckfopen{flex:none;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:#fff;padding:6px 12px;font-size:var(--fs-xs,12px);font-weight:600;cursor:pointer;font-family:inherit}
  .ckfopen:hover{filter:brightness(.94)}
  /* 🤖 정리봇 — 첨부 칩·되돌리기 버튼 */
  .botchip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--accent);background:var(--accent2);border-radius:8px;padding:5px 10px}
  .botchip .botchipx{border:0;background:none;color:var(--mut);cursor:pointer;font-size:13px;padding:0 2px}
  .botundo{align-self:flex-start;margin-top:4px;border:1px solid var(--line);background:var(--card);color:var(--txt2);border-radius:7px;font-size:11.5px;font-weight:600;padding:4px 10px;cursor:pointer}
  .botundo:hover{border-color:var(--blk);color:var(--blk);background:rgba(224,70,62,.06)}
  .botundo.botact{border-color:var(--accent);color:#fff;background:var(--accent)}
  .botundo.botact:hover{filter:brightness(.94);color:#fff;background:var(--accent)}
  .chatbotrow .cav{font-size:17px}
  /* 👥 헤더 관리 버튼 + 멤버 시트 */
  .chathd .chatgmenu{margin-left:auto;flex-shrink:0;width:30px;height:30px;border:none;background:transparent;border-radius:8px;cursor:pointer;color:var(--txt2);display:none;align-items:center;justify-content:center}
  .chathd .chatgmenu:hover{color:var(--accent);background:var(--bg2)}
  .gmsheet{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:135;display:none;align-items:center;justify-content:center;padding:16px}
  .gmsheet.on{display:flex}
  .gmbox{background:var(--card);border-radius:14px;width:100%;max-width:360px;max-height:82vh;overflow-y:auto;box-shadow:0 20px 50px rgba(0,0,0,.25)}
  .gmhd{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line)}
  .gmhd .gmt{font-size:15px;font-weight:800;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gmhd .x{border:0;background:none;font-size:18px;color:var(--mut);cursor:pointer;padding:2px 6px}
  .gmmembers{padding:8px 8px 4px}
  .gmrow{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:9px}
  .gmrow:hover{background:var(--card2)}
  .gmav{width:30px;height:30px;border-radius:99px;background:var(--accent2);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0}
  .gmnm{flex:1;min-width:0;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gmtag{font-size:11px;color:var(--mut)}
  .gmkick{border:1px solid var(--line);background:var(--card);color:var(--blk);border-radius:7px;font-size:11.5px;font-weight:700;padding:4px 9px;cursor:pointer}
  .gmkick:hover{background:rgba(224,70,62,.08);border-color:rgba(224,70,62,.4)}
  .gmfoot{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--line)}
  .gmfoot button{flex:1;min-height:40px;border-radius:9px;font-size:13.5px;font-weight:700;cursor:pointer;border:1px solid var(--line);background:var(--card);color:var(--txt)}
  .gmfoot .gminvite:hover{border-color:var(--accent);color:var(--accent)}
  .gmfoot .gmleave{color:var(--blk)}
  .gmfoot .gmleave:hover{background:rgba(224,70,62,.08);border-color:rgba(224,70,62,.4)}
  .cgmodal{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:120;display:flex;align-items:center;justify-content:center;padding:16px}
  .cgbox{background:var(--bg,#fff);border-radius:14px;padding:18px;width:100%;max-width:360px;max-height:88vh;overflow-y:auto;box-shadow:0 20px 50px rgba(0,0,0,.25)}
  .cgbox h3{margin:0 0 12px;font-size:16px}
  .cgbox input[type=text]{width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid var(--line);border-radius:8px;font-size:14px;margin-bottom:10px}
  .cgmems{max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:6px;margin-bottom:12px}
  .cgmem{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;font-size:14px}
  .cgmem:hover{background:var(--hover,#f3f4f6)}
  .cgacts{display:flex;gap:8px;justify-content:flex-end}
  /* ⚡ 빠른 추가 한 줄 완결형(2026-07-04) — 제목+마감+담당을 그 자리에서 */
  /* ══ 📋 내 작업 2.0(2026-07-04 Sprint1) — 상태 컬러 언어 + 정보밀도 카드 + 인라인 진행률 ══ */
  :root{--st-plan:#94a3b8;--st-doing:#1D4ED8;--st-review:#c026d3;--st-done:#16a34a;--st-late:#dc2626}
  /* 📐 타이포 스케일 토큰(2026-07-06) — 중앙화 + 전반 축소(노션식: 제목 과대 금지, 여백으로 위계) */
  :root{--fs-h1:18px;--fs-h2:14.5px;--fs-body:13.5px;--fs-sm:12.5px;--fs-xs:11.5px;--fs-micro:10.5px}
  .topbar h2{font-size:var(--fs-h1)!important;letter-spacing:-.02em}
  .dh-hi{font-size:var(--fs-h2)!important}
  .topbar .sub,.dh-meta{font-size:var(--fs-sm)}
  .tkbrief{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:12px;background:linear-gradient(90deg,rgba(29,78,216,.06),transparent);border:1px solid var(--line);border-radius:10px;font-size:13px;color:var(--txt2)}
  .tkbrief b{color:var(--txt)}
  .tkbrief .tkbico{color:var(--accent);display:flex}
  .tksec{display:flex;align-items:center;gap:6px;margin:16px 2px 8px;font-size:12px;font-weight:800;letter-spacing:-.01em;color:var(--mut);text-transform:none}
  .tksec:first-of-type{margin-top:2px}
  .tksec .n{font-weight:700;color:var(--mut);background:var(--bg2);border-radius:99px;padding:1px 7px;font-size:11px}
  .tksec.now{color:var(--st-late)} .tksec.now .n{color:var(--st-late)}
  .tksec.done{color:var(--st-done)}
  .tki{display:flex;align-items:flex-start;gap:10px;padding:11px 13px 12px;border:1px solid var(--line);border-radius:11px;margin-bottom:7px;background:var(--card);transition:transform .18s ease,opacity .18s ease,box-shadow .15s}
  .tki:hover{box-shadow:0 3px 14px rgba(15,22,38,.07)}
  .tki.late{}
  .tki.doing{}
  .tki.done{opacity:.62}
  .tki.leaving{transform:translateX(24px);opacity:0}
  .tkmain{flex:1;min-width:0;cursor:pointer}
  .tkrow1{display:flex;align-items:center;gap:6px;min-width:0}
  .tktitle{font-size:14.5px;font-weight:600;letter-spacing:-.01em;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tki.done .tktitle{text-decoration:line-through;color:var(--txt2)}
  .tkmeta{display:flex;align-items:center;gap:8px;margin-top:4px;font-size:12px;color:var(--mut);flex-wrap:wrap}
  .tkchip{display:inline-flex;align-items:center;gap:3px;border-radius:6px;padding:1px 7px;font-size:11.5px;font-weight:700;background:var(--bg2);color:var(--txt2)}
  .tkchip.today{background:rgba(29,78,216,.1);color:var(--st-doing)}
  .tkchip.late{background:rgba(220,38,38,.1);color:var(--st-late)}
  .tkmeta .tkmi{display:inline-flex;align-items:center;gap:3px}
  .tkava{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-size:9.5px;font-weight:800;color:#fff;flex-shrink:0}
  .tkbar{position:relative;height:4px;background:var(--bg2);border-radius:99px;margin-top:9px;overflow:visible}
  .tkbar i{position:absolute;left:0;top:0;bottom:0;background:var(--st-doing);border-radius:99px;transition:width .15s}
  .tki.late .tkbar i{background:var(--st-late)} .tki.done .tkbar i{background:var(--st-done)}
  .tkrange{position:absolute;left:0;right:0;top:-9px;bottom:-9px;width:100%;opacity:0;cursor:ew-resize;margin:0}
  .tkpct{position:absolute;right:0;top:-19px;font-size:10.5px;font-weight:700;color:var(--mut)}
  .tkbot{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--mut);cursor:pointer;transition:all .12s}
  .tkbot:hover{color:var(--accent);border-color:var(--accent)}
  .tkrun{display:inline-flex;align-items:center;gap:3px;color:var(--accent);font-size:11px;font-weight:700}
  .tkrun .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:tkpulse 1.2s infinite}
  @keyframes tkpulse{0%,100%{opacity:1}50%{opacity:.3}}
  .tkmore{font-size:12px;color:var(--mut);padding:4px 2px;cursor:pointer}
  .tkmore:hover{color:var(--accent)}
  /* ══ 📋 내 작업 칸반 보드(2026-07-06) — 예정·진행·검토·완료 컬럼 + 카드 드래그 이동 (노션 톤) ══ */
  .hvright{flex:0 0 auto;display:inline-flex;align-items:center}
  .hvnew{display:inline-flex;align-items:center;gap:5px;background:var(--accent);color:#fff;border:0;border-radius:7px;padding:5px 11px;font:inherit;font-size:var(--fs-xs);font-weight:700;cursor:pointer;transition:filter .12s;white-space:nowrap}
  .hvnew:hover{filter:brightness(1.08)}
  .hvnew svg{width:13px;height:13px}
  /* 🔎 필터 바(프로젝트·담당자) — 심플: 기본은 은은하게, 선택 시 accent 칩 */
  .hvfilters{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:14px}
  .hvfsel{font:inherit;font-size:11.5px;font-weight:500;color:var(--mut);background:transparent;border:1px solid var(--line);border-radius:6px;padding:3px 21px 3px 8px;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px;max-width:42vw;transition:.12s}
  .hvfsel:hover{border-color:var(--txt3,#c7c5be);color:var(--txt2)}
  .hvfsel:focus{outline:none}
  .hvfsel.on{color:var(--accent);font-weight:600;border-color:var(--accent);background-color:var(--accent2)}
  .hvfclear{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;color:var(--mut);background:none;border:0;border-radius:5px;cursor:pointer;padding:0}
  .hvfclear:hover{background:rgba(55,53,47,.06);color:var(--txt2)}
  .hvfclear svg{width:12px;height:12px}
  /* 📱 모바일: 새 업무 버튼 맨 왼쪽 고정, 탭 스트립은 우측에서 좌우 스크롤 */
  @media(max-width:640px){
    .hvright{order:-1}
    .hvnew{padding:6px 11px}
  }
  /* 컬럼 독립 높이(align-items:flex-start) — 노션식: 카드 수만큼만, 최장 컬럼에 안 끌려감 */
  .hbd{display:flex;align-items:flex-start;gap:12px;overflow-x:auto;padding:2px 2px 8px;-webkit-overflow-scrolling:touch}
  /* 회색 카테고리 박스(스프린트 보드와 동일 문법) + 독립 높이 유지 */
  .hbdcol{flex:1 1 0;min-width:225px;background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:10px;display:flex;flex-direction:column;transition:background .15s}
  .hbdcol.dragover{background:var(--accent2)}
  .hbdh{display:flex;align-items:center;gap:6px;padding:0 2px 10px;font-size:var(--fs-sm);font-weight:700;letter-spacing:-.01em}
  .hbdh .pill{display:inline-flex;align-items:center;gap:6px;border-radius:6px;padding:2px 9px}
  .hbdh .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
  .hbdh.plan .pill{background:rgba(148,163,184,.16);color:#64748b} .hbdh.plan .dot{background:var(--st-plan)}
  .hbdh.doing .pill{background:rgba(29,78,216,.1);color:var(--st-doing)} .hbdh.doing .dot{background:var(--st-doing)}
  .hbdh.review .pill{background:rgba(192,38,211,.1);color:var(--st-review)} .hbdh.review .dot{background:var(--st-review)}
  .hbdh.done .pill{background:rgba(22,163,74,.1);color:var(--st-done)} .hbdh.done .dot{background:var(--st-done)}
  .hbdh .n{font-size:var(--fs-xs);font-weight:700;color:var(--mut);margin-left:4px}
  /* 드래그 플레이스홀더 — 점선 대신, 들어갈 자리가 부드럽게 벌어짐(노션식) */
  .hcph{height:0;border-radius:10px;background:var(--accent2);border:1.5px solid rgba(37,99,235,.25);opacity:0;transition:height .15s ease,opacity .15s ease;pointer-events:none}
  .hcph.on{height:52px;opacity:1;margin-bottom:8px}
  .hbdcards{display:flex;flex-direction:column;gap:8px;min-height:40px;flex:1}
  .hbdadd{margin-top:8px;padding:8px;border:1px dashed var(--line);border-radius:8px;background:none;color:var(--mut);font:inherit;font-size:var(--fs-xs);font-weight:600;cursor:pointer;transition:.12s}
  .hbdadd:hover{border-color:var(--accent);color:var(--accent)}
  .hbdmore{margin-top:6px;padding:7px;border:0;border-radius:8px;background:none;color:var(--mut);font:inherit;font-size:var(--fs-xs);font-weight:600;cursor:pointer;transition:.12s;text-align:center}
  .hbdmore:hover{background:var(--bg2);color:var(--accent)}
  .hbdempty{color:var(--mut);font-size:var(--fs-xs);text-align:center;padding:14px 0;opacity:.7}
  .hc{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 12px;cursor:grab;transition:box-shadow .14s,transform .14s,opacity .14s;position:relative}
  .hc:hover{box-shadow:0 3px 14px rgba(15,22,38,.09)}
  .hc:active{cursor:grabbing}
  .hc.dragging{opacity:.45}
  /* 왼쪽 포인트 컬러 테두리 제거(2026-07-06, 류팀장) — 상태는 진행바 색으로 구분, 카드는 깔끔하게 통일 */
  .hctop{display:flex;align-items:flex-start;gap:8px}
  .hctitle{flex:1;min-width:0;font-size:var(--fs-body);font-weight:600;line-height:1.4;color:var(--txt);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
  .hcbot{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--mut);cursor:pointer;transition:.12s}
  .hcbot:hover{color:var(--accent);border-color:var(--accent)}
  .hcmeta{display:flex;align-items:center;gap:7px;margin-top:9px;flex-wrap:wrap;font-size:var(--fs-xs);color:var(--mut)}
  .hcmeta .mi{display:inline-flex;align-items:center;gap:3px}
  .hcbar{height:4px;background:var(--bg2);border-radius:99px;margin-top:10px;overflow:hidden}
  .hcbar i{display:block;height:100%;background:var(--st-doing);border-radius:99px;transition:width .15s}
  .hc.late .hcbar i{background:var(--st-late)} .hc.review .hcbar i{background:var(--st-review)} .hc.done .hcbar i{background:var(--st-done)}
  .hc.done{opacity:.66} .hc.done .hctitle{text-decoration:line-through;color:var(--txt2)}
  @media(max-width:820px){.hbdcol{min-width:80vw}}
  /* 🔔 인앱 알림 토스트(2026-07-04, 카톡PC 스타일) — 우측하단 스택(폰=상단), 클릭=해당 대화로 이동 */
  .osnoti-wrap{position:fixed;right:16px;bottom:16px;z-index:140;display:flex;flex-direction:column-reverse;gap:8px;pointer-events:none}
  @media(max-width:820px){.osnoti-wrap{left:12px;right:12px;bottom:auto;top:calc(var(--sat) + 8px);flex-direction:column}}
  .osnoti{pointer-events:auto;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px;box-shadow:0 10px 30px rgba(15,22,38,.18);max-width:320px;cursor:pointer;animation:osnotiIn .18s ease}
  .osnoti .ont{font-size:13px;font-weight:700;margin-bottom:2px}
  .osnoti .onb{font-size:12.5px;color:var(--txt2);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
  @keyframes osnotiIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
  /* ＋ 업무 등록 버튼(2026-07-04, 빠른추가 인라인 대체) */
  .taskaddbtn{width:100%;margin-top:10px;padding:11px;background:var(--bg2);border:1px dashed var(--line);border-radius:9px;color:var(--txt2);font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;transition:border-color .12s,color .12s}
  .taskaddbtn:hover{border-color:var(--accent);color:var(--accent)}
  /* 📊 업무 진행 기록(업무고도화 P1/P2) */
  /* 📢 공지사항 게시판(2026-07-06 게시판화) — 홈 위젯 */
  .annc{margin:2px 0 16px;border:1px solid var(--line);border-radius:10px;background:var(--card);overflow:hidden}
  .anchd{display:flex;align-items:center;gap:8px;padding:11px 14px;border-bottom:1px solid var(--line)}
  .anchd .t{font-size:var(--fs-body);font-weight:700;color:var(--txt);display:flex;align-items:center;gap:6px}
  .anchd .t svg{color:var(--accent)}
  .anchd .sp{margin-left:auto}
  .anmore{font-size:var(--fs-xs);color:var(--mut);cursor:pointer;background:none;border:0;font:inherit;font-weight:600}
  .anmore:hover{color:var(--accent)}
  .anwrite{display:inline-flex;align-items:center;gap:5px;background:var(--accent);color:#fff;border:0;border-radius:7px;padding:5px 11px;font:inherit;font-size:var(--fs-xs);font-weight:700;cursor:pointer}
  .anwrite:hover{filter:brightness(1.08)}
  .anrow{display:flex;align-items:center;gap:10px;padding:9px 14px;cursor:pointer;border-bottom:1px solid var(--line);transition:background .1s}
  .anrow:last-child{border-bottom:0}
  .anrow:hover{background:var(--bg2)}
  .anpin{font-size:var(--fs-micro);font-weight:800;color:var(--accent);background:var(--accent2);border-radius:5px;padding:1px 6px;flex-shrink:0}
  .antt{flex:1;min-width:0;font-size:var(--fs-sm);font-weight:600;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .anby{font-size:var(--fs-xs);color:var(--txt2);flex-shrink:0;width:78px;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .andt{font-size:var(--fs-xs);color:var(--mut);flex-shrink:0;width:42px;text-align:right}
  .anvw{font-size:var(--fs-xs);color:var(--mut);flex-shrink:0;width:46px;text-align:right;display:inline-flex;align-items:center;gap:3px;justify-content:flex-end}
  .anempty{padding:18px 14px;text-align:center;color:var(--mut);font-size:var(--fs-sm)}
  @media(max-width:820px){.anby{display:none}.anvw{width:34px}}
  /* 📄 공지 읽기 패널(우측 드로어, 문서형) */
  #anncRead{justify-content:flex-end;padding:0}
  #anncRead .mbox{width:min(600px,100%);max-width:100%;height:100dvh;max-height:100dvh;border-radius:0;border-left:1px solid var(--line);overflow-y:auto;box-shadow:-20px 0 60px rgba(15,22,38,.16);animation:tpslide .26s cubic-bezier(.32,.72,0,1);padding:22px 34px 40px}
  @media(max-width:820px){#anncRead .mbox{width:100%;padding:16px 18px 32px}}
  .anrtt{font-size:24px;font-weight:800;letter-spacing:-.02em;color:var(--txt);line-height:1.3;margin:6px 0 8px}
  .anrmeta{font-size:var(--fs-sm);color:var(--mut);display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--line)}
  .anrbody{font-size:var(--fs-body);line-height:1.75;color:var(--txt);white-space:pre-wrap;word-break:break-word;padding:16px 0}
  .anract{display:flex;gap:8px;margin-top:8px}
  /* ✍️ 공지 작성/수정 드로어(문서형) */
  #anncEdit{justify-content:flex-end;padding:0}
  #anncEdit .mbox{width:min(600px,100%);max-width:100%;height:100dvh;max-height:100dvh;border-radius:0;border-left:1px solid var(--line);overflow-y:auto;box-shadow:-20px 0 60px rgba(15,22,38,.16);animation:tpslide .26s cubic-bezier(.32,.72,0,1);padding:22px 34px 40px;display:flex;flex-direction:column}
  @media(max-width:820px){#anncEdit .mbox{width:100%;padding:16px 18px 32px}}
  .anwmode{font-size:var(--fs-sm);font-weight:700;color:var(--mut);margin-right:auto}
  .anwtitle{width:100%;box-sizing:border-box;border:0;outline:0;background:none;font-family:inherit;font-size:24px;font-weight:800;letter-spacing:-.02em;color:var(--txt);padding:4px 0 8px;line-height:1.3}
  .anwtitle::placeholder{color:var(--line)}
  .anwpin{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--txt2);cursor:pointer;padding:6px 0 12px;border-bottom:1px solid var(--line);margin-bottom:14px;user-select:none}
  .anwpin svg{opacity:.7}
  .anwbody{flex:1;width:100%;box-sizing:border-box;border:0;outline:0;background:none;resize:none;font-family:inherit;font-size:var(--fs-body);line-height:1.8;color:var(--txt);min-height:200px}
  .anwbody::placeholder{color:var(--mut)}
  .anwfoot{display:flex;gap:8px;justify-content:flex-end;border-top:1px solid var(--line);padding-top:16px;margin-top:14px}
  /* 📝 공지 리치 에디터 툴바 */
  .rtbar{display:flex;align-items:center;gap:3px;flex-wrap:wrap;padding:8px 0;border-bottom:1px solid var(--line);margin-bottom:10px;position:sticky;top:0;background:var(--card);z-index:2}
  .rtsep{width:1px;height:18px;background:var(--line);margin:0 4px}
  .rtb{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:30px;height:30px;padding:0 8px;font:inherit;font-size:13px;font-weight:600;color:var(--txt2);background:none;border:1px solid transparent;border-radius:7px;cursor:pointer}
  .rtb:hover{background:var(--bg2)}
  .rtb.on{background:var(--accent2);color:var(--accent)}
  .rtb.rtimg{font-size:12.5px;font-weight:700}.rtb.rtimg svg{width:15px;height:15px}
  .rtsel{font:inherit;font-size:12.5px;font-weight:600;color:var(--txt2);background:var(--card);border:1px solid var(--line);border-radius:7px;padding:5px 8px;cursor:pointer}
  .rtcolor{position:relative;overflow:hidden;font-weight:800}
  .rtcolor input[type=color]{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer;border:0;padding:0}
  .anweditor{flex:1;min-height:240px;outline:0;font-family:inherit;font-size:var(--fs-body);line-height:1.8;color:var(--txt);overflow-y:auto;padding:2px 0 20px}
  .anweditor:empty::before{content:attr(data-ph);color:var(--mut)}
  .anweditor h1{font-size:22px;font-weight:800;margin:14px 0 6px;letter-spacing:-.02em}
  .anweditor h2{font-size:18px;font-weight:800;margin:12px 0 5px}
  .anweditor h3{font-size:16px;font-weight:700;margin:10px 0 4px}
  .anweditor p{margin:6px 0}.anweditor ul,.anweditor ol{margin:6px 0;padding-left:24px}
  .anweditor blockquote{margin:8px 0;padding:6px 14px;border-left:3px solid var(--accent);background:var(--bg2);color:var(--txt2);border-radius:0 8px 8px 0}
  .anweditor img{max-width:100%;border-radius:8px;margin:6px 0;display:block}
  .anweditor a{color:var(--accent);text-decoration:underline}
  /* 공지 읽기 본문 — 리치 HTML 렌더 */
  .anrbody h1{font-size:22px;font-weight:800;margin:16px 0 7px;letter-spacing:-.02em}
  .anrbody h2{font-size:18px;font-weight:800;margin:14px 0 6px}
  .anrbody h3{font-size:16px;font-weight:700;margin:12px 0 5px}
  .anrbody p{margin:7px 0}.anrbody ul,.anrbody ol{margin:7px 0;padding-left:24px}
  .anrbody blockquote{margin:9px 0;padding:7px 14px;border-left:3px solid var(--accent);background:var(--bg2);color:var(--txt2);border-radius:0 8px 8px 0}
  .anrbody img{max-width:100%;border-radius:10px;margin:8px 0;display:block}
  .anrbody a{color:var(--accent);text-decoration:underline}
  /* 📢 공지 게시판 탭 */
  .bdlist{max-width:900px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card)}
  .bdempty{padding:40px 16px;text-align:center;color:var(--mut);font-size:14px}
  .bdrow{display:flex;align-items:center;gap:12px;padding:14px 18px;cursor:pointer;border-bottom:1px solid var(--line);transition:background .1s}
  .bdrow:last-child{border-bottom:0}.bdrow:hover{background:var(--bg2)}
  .bdrow .bdtt{flex:1;min-width:0;font-size:14.5px;font-weight:600;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bdrow .bdby{font-size:12.5px;color:var(--txt2);flex-shrink:0}
  .bdrow .bddt{font-size:12.5px;color:var(--mut);flex-shrink:0;min-width:64px;text-align:right}
  .bdrow .bdvw{font-size:12px;color:var(--mut);flex-shrink:0;display:inline-flex;align-items:center;gap:3px;min-width:44px;justify-content:flex-end}
  .bdpin{font-size:11px;font-weight:800;color:var(--accent);background:var(--accent2);border-radius:5px;padding:2px 7px;flex-shrink:0}
  @media(max-width:640px){.bdrow .bdby{display:none}.bdrow{padding:13px 14px;gap:8px}}
  /* 게시글 상세(별도 화면) */
  .bdread{max-width:820px}
  .bdback{display:inline-flex;align-items:center;gap:3px;font:inherit;font-size:13px;font-weight:600;color:var(--txt2);background:none;border:0;border-radius:7px;padding:6px 10px 6px 6px;margin:0 0 12px -6px;cursor:pointer}
  .bdback:hover{background:var(--bg2);color:var(--accent)}
  .bdback svg{width:16px;height:16px}
  .bdread .anrtt{font-size:22px;font-weight:800;letter-spacing:-.02em;color:var(--txt);line-height:1.3;margin-bottom:8px}
  .bdread .anrmeta{display:flex;flex-wrap:wrap;gap:12px;font-size:12.5px;color:var(--mut);padding-bottom:14px;border-bottom:1px solid var(--line)}
  .bdread .anract{display:flex;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
  /* 게시글 작성/수정(별도 페이지) — 상단 액션바 */
  .bdedit{max-width:820px;display:flex;flex-direction:column}
  .bdedbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--line)}
  .bdedsp{flex:1}
  .bdedbar .anwpin{border:0!important;padding:0!important;margin:0!important;font-size:12.5px}
  .bdedit .rtbar{position:static}
  .bdedit .anwtitle{margin-top:0}
  /* 📝 업무 노트 — tbModal을 문서형(노션 페이지) 우측 드로어로(2026-07-06 재설계) */
  #tbModal{justify-content:flex-end;padding:0}
  #tbModal .mbox.tpdoc{width:min(880px,94vw);max-width:100%;max-height:100dvh;height:100dvh;border-radius:0;border-left:1px solid var(--line);overflow-y:auto;box-shadow:-20px 0 60px rgba(15,22,38,.16);animation:tpslide .26s cubic-bezier(.32,.72,0,1);padding:24px 40px 44px}
  @keyframes tpslide{from{transform:translateX(100%)}to{transform:translateX(0)}}
  @media(max-width:820px){#tbModal .mbox.tpdoc{width:100%;padding:16px 18px 32px}}
  .tpbar{display:flex;align-items:center;justify-content:space-between;margin:0 -6px 4px -6px;position:sticky;top:-22px;background:var(--card);z-index:2;padding-top:2px}
  .tpbar .x{background:none;border:0;color:var(--mut);cursor:pointer;padding:6px;border-radius:7px;display:flex}
  .tpbar .x:hover{background:var(--bg2);color:var(--txt)}
  .tpbaracts{display:flex;align-items:center;gap:6px}
  .tpbtn{border:0;border-radius:7px;padding:6px 14px;font:inherit;font-size:var(--fs-sm);font-weight:700;cursor:pointer;transition:.12s}
  .tpbtn.save{background:var(--accent);color:#fff}
  .tpbtn.save:hover{filter:brightness(1.08)}
  .tpbtn.del{background:none;color:var(--blk);border:1px solid var(--line)}
  .tpbtn.del:hover{border-color:var(--blk)}
  /* 제목 = 큰 헤딩(테두리·배경 없음) */
  .tpdoc-title{width:100%;box-sizing:border-box;border:0;outline:0;background:none;font-family:inherit;font-size:26px;font-weight:800;letter-spacing:-.02em;color:var(--txt);padding:2px 0 6px;line-height:1.25}
  .tpdoc-title::placeholder{color:var(--line)}
  /* 속성 줄 — 노션식: [아이콘 라벨] ...... [값]. 넓은 패널에선 2열로 세로 절약(담당자·리스트는 전체폭) */
  .tpprops{display:grid;grid-template-columns:1fr 1fr;gap:1px 32px;margin:6px 0 14px}
  .tpprop:nth-child(1),.tpprop:nth-child(5){grid-column:1/-1}   /* 담당자·리스트 = 전체폭 */
  @media(max-width:820px){.tpprops{grid-template-columns:1fr}.tpprop:nth-child(1),.tpprop:nth-child(5){grid-column:auto}}
  .tpprop{display:flex;align-items:center;min-height:34px;gap:10px;border-radius:6px;padding:2px 6px;margin:0 -6px}
  .tpprop:hover{background:var(--bg2)}
  .tpk{display:inline-flex;align-items:center;gap:7px;width:104px;flex-shrink:0;color:var(--mut);font-size:var(--fs-sm);font-weight:500}
  .tpk svg{opacity:.75}
  .tpv{flex:1;min-width:0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  /* 값 컨트롤 — 테두리·배경 없이 텍스트처럼 보이다가 hover/focus 때만 살짝 */
  .tpinp{border:1px solid transparent;background:none;font:inherit;font-size:var(--fs-body);color:var(--txt);border-radius:6px;padding:4px 6px;cursor:pointer;max-width:100%}
  .tpinp:hover{background:var(--card2)}
  .tpinp:focus{outline:0;border-color:var(--line);background:var(--card)}
  .tprange{gap:4px}
  .tprange .tprdash{color:var(--mut);font-size:var(--fs-sm);flex-shrink:0}
  .tpprogv{gap:10px}
  .tpprogv .tbrange{flex:1;max-width:220px}
  .tpprogv .tbprogval{font-size:var(--fs-sm);font-weight:700;color:var(--accent)}
  /* 담당자 칩 — 값 영역에 인라인 */
  #tbOwnPick.tpv{gap:5px}
  /* 본문(상세) = 문서 바디(테두리 없음) */
  .tpdoc-note{width:100%;box-sizing:border-box;border:0;outline:0;background:none;resize:vertical;font-family:inherit;font-size:var(--fs-body);line-height:1.75;color:var(--txt);padding:14px 0;min-height:220px;border-top:1px solid var(--line)}
  .tpdoc-note::placeholder{color:var(--mut)}
  /* 섹션(진행 기록·코멘트) */
  .tpsection{border-top:1px solid var(--line);padding-top:14px;margin-top:6px}
  .tpsech{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:700;color:var(--txt2);margin-bottom:10px}
  .tpsech svg{opacity:.7}
  .tpsecsub{font-weight:400;color:var(--mut);font-size:var(--fs-xs)}
  #tbModal .mfoot{border-top:1px solid var(--line);margin-top:18px;padding-top:16px}
  /* 💬 업무 코멘트 스레드 */
  .tbcmts{display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:auto;margin-bottom:8px}
  .tbcmts:empty{display:none}
  .tbcmt{display:flex;gap:8px;align-items:flex-start}
  .tbcmt .cav{flex-shrink:0;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff}
  .tbcmt .cbody{flex:1;min-width:0}
  .tbcmt .chd{font-size:var(--fs-xs);color:var(--mut);margin-bottom:1px}
  .tbcmt .chd b{color:var(--txt2);font-weight:700}
  .tbcmt .ctx{font-size:var(--fs-sm);color:var(--txt);line-height:1.5;white-space:pre-wrap;word-break:break-word}
  .tbcmtnew{display:flex;gap:8px;align-items:flex-end}
  .tbcmtnew .btn{flex:none;align-self:stretch}
  /* ✎ 진행기록·코멘트 입력창 = 확장 가능한 textarea(2026-07-10 류팀장: 창이 작고 확장 안 됨) */
  .tbinp-ta{flex:1;width:100%;min-width:0;box-sizing:border-box;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-family:inherit;font-size:var(--fs-body,14px);line-height:1.6;background:var(--card);color:var(--txt);resize:vertical;min-height:66px;max-height:340px}
  .tbinp-ta:focus{outline:0;border-color:var(--accent)}
  .tbcmtempty{color:var(--mut);font-size:var(--fs-xs);padding:8px 2px}
  .tbupds{max-height:180px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:4px 8px;margin-bottom:8px}
  .tbupds:empty{display:none}
  .tbupd{padding:7px 2px;border-bottom:1px solid var(--line);font-size:12.5px;line-height:1.5}
  .tbupd:last-child{border-bottom:0}
  .tbupdhd{color:var(--sub,#6b7280);font-size:11.5px;display:flex;gap:6px;align-items:center}
  .tbupdpg{font-weight:700;color:var(--accent)}
  .tbupdtx{margin-top:2px;white-space:pre-wrap;word-break:break-word}
  .tbupdfl{margin-top:3px;display:flex;flex-wrap:wrap;gap:4px}
  .tbupdfl a{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;color:var(--accent);text-decoration:none;border:1px solid var(--line);border-radius:6px;padding:2px 7px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tbupdnew .tbinp-ta{margin-bottom:6px}
  .tbupdfiles{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}
  .tbupdfiles:empty{display:none}
  .tbupdfiles .chip{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;border:1px solid var(--line);border-radius:6px;padding:2px 7px;background:var(--card)}
  .tbupdfiles .chip b{cursor:pointer;font-weight:600;color:#b91c1c}
  .tbupdacts{display:flex;gap:8px;justify-content:flex-end;align-items:center}
  /* 📎 공용폴더 파일 선택 미니 피커 */
  .fpk{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:130;display:flex;align-items:center;justify-content:center;padding:16px}
  .fpkbox{background:var(--bg,#fff);border-radius:14px;padding:14px;width:100%;max-width:420px;max-height:88vh;overflow-y:auto;box-shadow:0 20px 50px rgba(0,0,0,.25)}
  .fpkhd{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px}
  .fpkhd .fpkpath{flex:1;color:var(--sub,#6b7280);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left}
  .fpklist{max-height:300px;overflow-y:auto;border:1px solid var(--line);border-radius:8px}
  .fpkit{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--line)}
  .fpkit:last-child{border-bottom:0}
  .fpkit:hover{background:var(--hover,#f3f4f6)}
  .chatsearch input{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:9px;padding:8px 11px;font-size:13px;background:var(--card);color:var(--txt);font-family:inherit}
  .chatsearch input:focus{outline:none;border-color:var(--accent)}
  .chatlist{flex:1;overflow-y:auto;padding:6px}
  .chatrow{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;cursor:pointer;position:relative}
  .chatrow:hover{background:var(--card2)}
  .chatrow.active{background:var(--accent2)}
  .chatrow .cav{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:#fff}
  .chatrow .cmid{flex:1;min-width:0}
  .chatrow .cnm{font-size:13.5px;font-weight:600;color:var(--txt);display:flex;align-items:center;gap:6px}
  .chatrow .cdot{width:7px;height:7px;border-radius:50%;background:var(--ok);flex-shrink:0}
  .chatrow .clast{font-size:12px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
  .chatrow .cunread{margin-left:auto;font-size:11px;font-weight:700;background:var(--accent);color:#fff;border-radius:99px;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;padding:0 5px}
  .chatmain{flex:1;display:flex;flex-direction:column;min-width:0}
  .chatempty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--mut);font-size:13px}
  .chatpane{flex:1;display:flex;flex-direction:column;min-height:0}
  .chathd{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:9px}
  .chathd .chatpeer{font-size:15px;font-weight:700;color:var(--txt)}
  .chathd .chatpeerstat{font-size:12px;color:var(--mut)}
  .chatback{display:none;flex:none;width:34px;height:34px;margin:-4px 2px -4px -6px;border:0;background:none;border-radius:9px;color:var(--txt2);cursor:pointer;align-items:center;justify-content:center;padding:0}
  .chatback:active{background:var(--card2)}
  .chatback svg{width:22px;height:22px}
  .chatmsgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--bg2)}
  .cmrow{display:flex;flex-direction:column;max-width:84%}   /* 말풍선 옆 시간/숫자 공간 포함(카톡식) */
  .cmrow.me{align-self:flex-end;align-items:flex-end}
  .cmrow.them{align-self:flex-start;align-items:flex-start}
  .cmbub{padding:8px 12px;border-radius:14px;font-size:14px;line-height:1.45;white-space:pre-wrap;word-break:break-word}
  .cmrow.me .cmbub{background:#e9ebf0;color:var(--txt);border-bottom-right-radius:5px}   /* 보낸 말풍선: 쿨그레이(브라운톤 #eceae5 → 쿨톤, 딥블루 accent와 조화) 2026-07-06 */
  .cmrow.them .cmbub{background:var(--card);color:var(--txt);border:1px solid var(--line);border-bottom-left-radius:5px}
  /* 카톡식: 말풍선 옆에 [안읽음 숫자·시간] 세로 스택 — 내 메시지=왼쪽, 상대=오른쪽 */
  .cmline{display:flex;align-items:flex-end;gap:6px;max-width:100%}
  .cmrow.me .cmline{flex-direction:row-reverse}
  .cmmeta{display:flex;flex-direction:column;gap:1px;font-size:10.5px;color:var(--mut);white-space:nowrap;flex:none;padding-bottom:2px}
  .cmrow.me .cmmeta{align-items:flex-end}
  .cmunread{color:var(--accent);font-weight:400;font-size:10.5px}   /* 안읽음 숫자 — 시간과 동일 두께·크기, 컬러만 강조 */
  .cmment{color:var(--accent);font-weight:400}   /* @멘션 — 컬러만(두께 동일) */
  .cmrow.me .cmment{color:#1d4ed8}
  /* @멘션 자동완성 팝업 — 입력창 위 */
  .mentionpop{position:absolute;left:10px;right:10px;bottom:100%;margin-bottom:8px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(15,22,38,.18);max-height:210px;overflow-y:auto;z-index:20;padding:4px}
  .mentionpop[hidden]{display:none}
  .mentitem{display:block;width:100%;text-align:left;border:0;background:none;font:inherit;font-size:14px;color:var(--txt);padding:9px 11px;border-radius:8px;cursor:pointer}
  .mentitem.on,.mentitem:hover{background:var(--accent2);color:var(--accent)}
  .cmsep{align-self:center;font-size:11px;color:var(--mut);background:var(--card2);padding:2px 10px;border-radius:99px;margin:6px 0}
  .chatcompose{position:relative;display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;border-top:1px solid var(--line);align-items:center}   /* relative: @멘션 팝업 기준 / flex-wrap: 스테이징 칩 줄바꿈 / align center: 아이콘·입력·전송 상하 중앙 정렬(2026-07-06) */
  /* 카톡식 입력창: 테두리 없음(bg2 필로 형태) — 포커스 아웃라인/파란테두리 원천 제거 */
  /* 🩹 iOS 포커스 라운드 버그: pill은 감싸는 div가 갖고 textarea는 완전 투명·라운드0 → iOS가 포커스 때 네이티브 박스를 살려도 안 보임 */
  .chatinputwrap{flex:1;min-width:0;display:flex;background:var(--bg2);border-radius:22px;overflow:hidden;align-self:center}   /* 22px: 1줄=완전 알약(높이 절반), 여러 줄=모서리만 둥근 사각 */
  .chatcompose textarea{flex:1;min-width:0;resize:none;border:0!important;-webkit-appearance:none;appearance:none;border-radius:0!important;padding:9px 15px;font-size:14px;font-family:inherit;color:var(--txt);background:transparent!important;max-height:120px;line-height:1.45}
  .chatcompose textarea:focus,.chatcompose textarea:focus-visible{outline:none!important;border:0!important;box-shadow:none!important;background:transparent!important}
  /* 💬 카톡식 전송 버튼(2026-07-06): 빈칸=회색 대기, 텍스트 입력 시 accent 원형 화살표 활성 */
  .chatsend{flex:none;width:38px;height:38px;border:0;border-radius:50%;background:var(--line);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:background .14s,transform .1s}
  .chatsend svg{width:20px;height:20px}
  .chatcompose.has-text .chatsend{background:var(--accent)}
  .chatcompose.has-text .chatsend:active{transform:scale(.9)}
  /* 사진 첨부: 테두리 없는 원형 아이콘 버튼(전송과 같은 38px·중앙정렬) — 중복 규칙 통합(2026-07-06) */
  .chatattach{flex:none;width:38px;height:38px;border:0;border-radius:50%;background:none;color:var(--mut);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}
  .chatattach:hover{color:var(--accent)}
  .chatattach svg{width:21px;height:21px}
  /* 채팅 이미지 메시지 */
  .cmimg{display:block;max-width:240px;max-height:280px;border-radius:12px;cursor:pointer;object-fit:cover;background:var(--bg2)}
  .cmrow.me .cmimg{margin-left:auto}
  .cmbub.hasimg{padding:5px;background:transparent!important;border:none!important}
  .cmrow.me .cmbub.hasimg{background:transparent!important}
  .cmbub.hasimg .cmcap{display:block;margin-top:6px;padding:8px 12px;border-radius:12px;background:var(--card);border:1px solid var(--line);font-size:13.5px;white-space:pre-wrap;word-break:break-word}
  .cmrow.me .cmbub.hasimg .cmcap{background:#e9ebf0;border-color:transparent}
  .cmrow.me .cmbub.hasimg .cmcap{color:var(--txt)}
  /* 📷 앨범(여러 장 묶음) 그리드 — 카톡식. 1장=단독, 2~4장=2xN, 5장+=3열(+N 오버레이) */
  .cmalbum{display:grid;gap:3px;max-width:264px;border-radius:12px;overflow:hidden}
  .cmalbum.cols2{grid-template-columns:repeat(2,1fr)}
  .cmalbum.cols3{grid-template-columns:repeat(3,1fr)}
  .cmalbum.single{display:block;max-width:240px}
  .cmrow.me .cmalbum{margin-left:auto}
  .cmacell{position:relative;aspect-ratio:1/1;cursor:pointer;background:var(--bg2);overflow:hidden}
  .cmalbum.single .cmacell{aspect-ratio:auto}
  .cmacell img{display:block;width:100%;height:100%;object-fit:cover}
  .cmalbum.single .cmacell img{width:auto;height:auto;max-width:240px;max-height:280px;object-fit:contain}
  .cmamore{position:absolute;inset:0;background:rgba(0,0,0,.5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;pointer-events:none}
  @media (max-width:820px){ .cmalbum{max-width:70vw} .cmalbum.single{max-width:66vw} }
  /* 🎬 동영상 인라인 플레이어(말풍선) — 폭 제한·세로 과대 방지, 모바일에서도 바로 재생 */
  .cmbub.hasvideo{padding:5px;background:transparent!important;border:none!important}
  .cmrow.me .cmbub.hasvideo{background:transparent!important}
  .cmvideo{display:block;width:auto;max-width:280px;max-height:360px;border-radius:12px;background:#000}
  .cmrow.me .cmbub.hasvideo .cmvideo{margin-left:auto}
  .cmbub.hasvideo .cmvidact{display:flex;gap:8px;margin-top:5px}
  .cmrow.me .cmbub.hasvideo .cmvidact{justify-content:flex-end}
  .cmbub.hasvideo .cmvidact .cmflink{border:0;background:none;padding:0;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--accent);line-height:1.4}
  .cmbub.hasvideo .cmvidact .cmflink:hover{text-decoration:underline}
  .cmbub.hasvideo .cmcap{display:block;margin-top:6px;padding:8px 12px;border-radius:12px;background:var(--card);border:1px solid var(--line);font-size:13.5px;white-space:pre-wrap;word-break:break-word}
  .cmrow.me .cmbub.hasvideo .cmcap{background:#e9ebf0;border-color:transparent;color:var(--txt)}
  @media (max-width:820px){ .cmvideo{max-width:74vw} }
  /* 전송 중 미리보기(스피너 오버레이) */
  .cmsending{position:relative;opacity:.7}
  .cmsending::after{content:'';position:absolute;left:50%;top:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border:3px solid rgba(255,255,255,.55);border-top-color:var(--accent);border-radius:50%;animation:cmspin .8s linear infinite}
  @keyframes cmspin{to{transform:rotate(360deg)}}
  /* 드래그&드롭 하이라이트 */
  .chatmsgs.cmdrag{outline:2px dashed var(--accent);outline-offset:-8px;background:rgba(29,78,216,.05)}
  /* 라이트박스(이미지 확대) */
  .cmlb{position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.82);display:flex;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}
  .cmlb img{max-width:96vw;max-height:92vh;border-radius:8px;box-shadow:0 8px 40px rgba(0,0,0,.5)}
  .cmlbnav{position:fixed;top:50%;transform:translateY(-50%);z-index:10000;width:48px;height:48px;border:0;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;font-size:30px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .cmlbnav:hover{background:rgba(0,0,0,.7)} .cmlbnav.prev{left:16px} .cmlbnav.next{right:16px}
  /* 📎 스테이징 첨부 칩(공용 — 채팅·건의 모달) — 붙여넣기/드롭/선택 시 '붙어만 있다가' 전송 때 함께 감 */
  .stagestrip{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0 2px}
  .stagestrip:empty{display:none}
  .stagechip{position:relative;width:60px;height:60px;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:var(--bg2);flex:none}
  .stagechip img{width:100%;height:100%;object-fit:cover;display:block}
  /* 🎬 동영상 스테이징 칩 — 첫 프레임 미리보기 + 🎬 배지 */
  .stagechip.vid video{width:100%;height:100%;object-fit:cover;display:block;background:#000}
  .stagechip.vid .svidbadge{position:absolute;left:3px;bottom:2px;font-size:13px;line-height:1;text-shadow:0 1px 2px rgba(0,0,0,.6);pointer-events:none}
  .stagechip .sx{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;border:none;background:rgba(0,0,0,.62);color:#fff;font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}
  .stagechip .sx:hover{background:rgba(0,0,0,.85)}
  /* 📎 문서 첨부 칩(스테이징) — 이미지 칩과 달리 가로형 아이콘+이름 */
  .stagechip.doc{width:auto;max-width:180px;height:auto;padding:8px 26px 8px 10px;display:flex;align-items:center;gap:7px;border-radius:9px}
  .stagechip.doc .sdocic{color:var(--accent);flex:none;display:flex}
  .stagechip.doc .sdocic svg{width:20px;height:20px;display:block}
  .stagechip.doc .sdocnm{font-size:12px;color:var(--txt2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}
  /* 📎 문서 첨부 카드(말풍선) */
  .cmbub.hasfile{padding:0;background:transparent!important;border:none!important}
  /* 📎 카톡식 파일카드(2026-07-22) — 좌:파일명+메타+액션링크 / 우:상태 비주얼(다운로드·게이지·썸네일·문서) */
  .cmfile{display:flex;align-items:flex-start;gap:11px;width:264px;max-width:74vw;text-align:left;border:1px solid var(--line);background:var(--card);border-radius:12px;padding:11px 12px}
  .cmrow.me .cmfile{margin-left:auto;background:#e9ebf0;border-color:transparent}
  .cmfile .cmfinfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
  .cmfile .cmfnm{font-size:13.5px;font-weight:700;color:var(--txt);line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all}
  .cmfile .cmfsz{font-size:11.5px;color:var(--mut)}
  .cmfile .cmfact{display:flex;align-items:center;gap:8px;margin-top:2px}
  .cmfile .cmflink{border:0;background:none;padding:0;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--accent);line-height:1.4}
  .cmfile .cmflink:hover{text-decoration:underline}
  .cmfile .cmflinksep{color:var(--line);font-size:11px}
  .cmfile .cmfvis{flex:none;width:46px;height:46px;border:0;padding:0;border-radius:9px;background:var(--accent2);color:var(--accent);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}
  .cmfile .cmfvis svg{width:22px;height:22px;display:block}
  .cmfile .cmfvis.thumb{width:52px;height:52px;background:var(--card2);border:1px solid var(--line)}
  .cmfile .cmfthumb{width:100%;height:100%;object-fit:cover;display:block}
  /* 진행 게이지(원형) + X 취소 */
  .cmfile .cmfvis.dling{background:var(--accent2)}
  .cmfile .cmfvis .cmring{width:30px;height:30px;display:block;transform:rotate(-90deg)}
  .cmfile .cmfvis.dling.spin .cmring{animation:cmringspin .9s linear infinite}
  .cmfile .cmfvis .cmringbg{fill:none;stroke:var(--line);stroke-width:2.4}
  .cmfile .cmfvis .cmringfg{fill:none;stroke:var(--accent);stroke-width:2.4;stroke-linecap:round;transition:stroke-dashoffset .18s}
  .cmfile .cmfvis .cmringx{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--mut)}
  .cmfile .cmfvis .cmringx svg{width:12px;height:12px}
  @keyframes cmringspin{to{transform:rotate(270deg)}}
  .cmbub.hasfile .cmcap{display:block;margin-top:6px;font-size:13.5px;white-space:pre-wrap;word-break:break-word;color:var(--txt)}
  .fbattachrow{display:flex;align-items:center;gap:9px;margin-top:8px}
  .fbattachrow .chatattach{width:34px;height:34px}
  .fbattachhint{font-size:12px;color:var(--mut)}
  .fbiimgs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
  .fbithumb{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid var(--line);cursor:zoom-in;background:var(--bg2)}
  @media (max-width:820px){
    /* ⭐ iOS 입력 포커스 자동확대(zoom) 차단 — 폼 컨트롤 16px 미만이면 포커스 시 화면이 확대됨(실기기 버그 근본원인).
       "입력창 누르면 대화창이 확대되는" 현상 해결. 모바일 전 폼 요소 16px 강제. */
    input,textarea,select{font-size:16px!important}
    /* 채팅 = 마스터-디테일(카카오식): 목록은 전체폭 → 대화 선택 시 전체화면(헤더 ← 뒤로가기). */
    .chatwrap{height:calc(100dvh - 150px - var(--m-tabh) - var(--sab));min-height:340px;border-radius:12px}
    .chatside{width:100%;border-right:0}
    .chatrow{padding:11px 12px}
    .chatrow .cmid .clast{display:block}
    .chatmain{display:none}
    .chatwrap.csel .chatside{display:none}
    .chatwrap.csel .chatmain{display:flex}
    .chatwrap.csel .chatback{display:inline-flex}
    /* ⭐ 대화 열림 = 전체화면 고정(카톡식). 높이는 JS가 visualViewport로 실시간 추적(키보드 대응). */
    .chatwrap.csel{position:fixed;left:0;top:0;right:0;z-index:130;height:100dvh;min-height:0;border:0;border-radius:0;background:var(--card);box-shadow:none;overflow:hidden}
    .chatwrap.csel .chatmain,.chatwrap.csel .chatpane{height:100%;min-height:0;display:flex;flex-direction:column}
    .chatwrap.csel .chathd{flex-shrink:0;padding-top:calc(13px + var(--sat));position:relative;z-index:2;box-shadow:0 1px 0 var(--line)}
    .chatwrap.csel .chatmsgs{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
    .chatwrap.csel .chatcompose{flex-shrink:0;padding-bottom:calc(11px + var(--sab));background:var(--card)}
    /* 키보드 열림 = 홈바 안전영역 없음 → 하단 여백 제거해 입력바를 키보드에 밀착(빈틈 제거, 2026-07-06) */
    body.kbopen .chatwrap.csel .chatcompose{padding-bottom:9px}
    /* 대화 열리면 하단 탭바/플로팅은 채팅 전체화면이 덮음 — 잔상 방지로 숨김 */
    body.chatfs .mtabbar,body.chatfs .qafab,body.chatfs .fbfab{display:none!important}
    /* ⭐ body 잠금(2026-07-06): 입력 포커스 시 iOS가 body를 스크롤해 입력창-키보드 사이 빈틈 생기던 문제 방지 */
    body.chatfs{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;overflow:hidden}
  }
  /* ── 라인 아이콘 정렬·크기 통일 (Feather풍 SVG 패밀리) ── */
  .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}
  .calmodes button,.fviews button{display:inline-flex;align-items:center;justify-content:center;gap:5px}
  .tb,.mhead .x,.shead .x,.qaphead .qapx,.cnav,.dcol{display:inline-flex;align-items:center;justify-content:center}
  .orgtoggle .orgcaret,.shead .sic{display:inline-flex;align-items:center}
  .btn svg,.cnav svg{display:block}
  .hamb svg{display:block}
  /* 텍스트 옆 인라인 아이콘은 베이스라인 살짝 내려 가운데 정렬 */
  .smeta .mi svg,.scard .tasktag svg,.bcm svg,.fcrumb a svg,.runtag svg,.runb svg,.job .jbi svg,.noteic svg,.okic svg{vertical-align:-.16em}
  .smeta .mi{gap:4px}
  .scard .tasktag{display:inline-flex;align-items:center;gap:3px}
  /* 조직도 칩/카드 아이콘 */
  .ochip .chico{display:inline-flex;align-items:center;flex-shrink:0}
  .ochip .chico svg,.sdone svg{display:block;flex-shrink:0}
  .deptcard .dico{display:inline-flex;align-items:center;color:var(--accent);flex-shrink:0}
  .deptcard .dico svg{display:block;flex-shrink:0}
  /* 상태 뱃지 점 */
  .badge .bdot{width:7px;height:7px;border-radius:99px;background:currentColor;display:inline-block;margin-right:5px;vertical-align:0}
  .badge{display:inline-flex;align-items:center}
  /* 검색 결과 아이콘 */
  .sii{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
  .sii svg{display:block;flex-shrink:0}
  /* 파일 타입 아이콘 (목록 18 / 아이콘뷰 34) */
  .ficn{width:18px;height:18px;color:#8a93a3;display:inline-block;vertical-align:-.28em}
  .ficn.dir{color:var(--accent)}
  .ftile .ti .ficn{width:34px;height:34px;vertical-align:0}
  .frow2 .fic,.fic{display:inline-flex;align-items:center;justify-content:center}
  .frow2 .fic svg,.fic svg{display:block}
  .facts .fact svg{display:block;width:15px;height:15px;flex-shrink:0}
  .facts .fact{display:inline-flex;align-items:center}
  /* 지식 영역 아이콘 = accent */
  .kgrp .kgemoji{display:inline-flex;align-items:center;color:var(--accent)}
  .kgrp .kgemoji svg{display:block}
  .kgcaret{display:inline-flex;align-items:center}
  /* Home 위젯 아이콘 */
  .hwic{color:var(--accent);display:flex;justify-content:center;line-height:0}
  .hwic svg{display:block}
  /* Q&A 아바타·플로팅 버튼 */
  .qmsg .av svg,.qafab svg{display:block}
  /* 세션 종료 버튼 */
  .scard .sh .skill{margin-left:6px;border:1px solid var(--line);background:var(--card);color:var(--mut);width:26px;height:26px;border-radius:7px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:.12s}
  .scard .sh .skill:hover{border-color:var(--blk);color:var(--blk);background:rgba(224,70,62,.08)}
  .scard .sh .skill svg{display:block}
  .mhead .tkill{display:inline-flex;align-items:center;gap:5px;color:var(--blk);border-color:rgba(224,70,62,.4)}
  .mhead .tkill:hover{background:rgba(224,70,62,.1)}
  .mhead .tkill svg{display:block}
  /* ════ UI 폴리시(작업: 나머지 뷰 시각·사용성 일관화) — 추가 전용·홈/일정 미접촉 ════
     아래는 모두 기존 규칙 '뒤'에 와서 점진 보강만 한다(구조·동작 불변). */
  /* (1) 접근성 — 키보드 포커스 링(마우스/hover 동작엔 영향 없음, :focus-visible). 대상 뷰에 한정. */
  #view-sessions :focus-visible,#view-supervise :focus-visible,#view-meet :focus-visible,
  #view-knowledge :focus-visible,#view-files :focus-visible,#view-chat :focus-visible,
  #view-settings :focus-visible,#view-mypc :focus-visible,#view-headai :focus-visible{
    outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
  /* 입력류는 테두리 강조로 충분 → 이중 링 방지(겹침 깔끔하게) */
  #view-sessions input:focus-visible,#view-sessions select:focus-visible,#view-sessions textarea:focus-visible,
  #view-meet input:focus-visible,#view-meet select:focus-visible,#view-meet textarea:focus-visible,
  #view-knowledge input:focus-visible,#view-files input:focus-visible,
  #view-chat input:focus-visible,#view-chat textarea:focus-visible,
  #view-settings input:focus-visible,#view-settings select:focus-visible,#view-settings textarea:focus-visible,
  #view-headai textarea:focus-visible{outline-offset:0;border-color:var(--accent)}
  /* (2) 토큰 정합 — 설정 힌트 성공/오류색을 디자인토큰으로 통일(임의 초록/빨강 → --ok/--blk) */
  .sethint.ok{color:var(--ok)}
  .sethint.err{color:var(--blk)}
  /* (3) 빈 상태 톤 통일 — 줄간격·여백 일관(문구 가독성). 색/구조 불변. */
  .crempty,.fempty2,.mttxempty,.chatempty,.mtempty{line-height:1.55}
  .crempty{padding:14px 2px}
  /* (4) 모바일·터치 — 대상 뷰의 컨트롤 터치타깃 확보·가로넘침 방지(안전영역 포함). */
  @media (max-width:640px){
    /* 회의 컨트롤바: 줄바꿈 허용 + 버튼 터치타깃 */
    #view-meet .mtctrls{flex-wrap:wrap;gap:8px}
    #view-meet .mtbtn{min-height:40px}
    /* 회의록 검색/필터: 한 줄에 안 욱여넣고 가로 100%로 — 넘침 방지 */
    #view-meet .mtarchtools{width:100%}
    #view-meet .mtarchsearch{width:100%;box-sizing:border-box}
    #view-meet .mtarchsel{flex:1 1 46%;min-width:0}
    /* 자료실 검색: 모바일에서 가로 100% */
    #view-knowledge .knsearch{width:100%;box-sizing:border-box}
    #view-knowledge .topbar .actions{flex-wrap:wrap}
    /* 보기전환/모드 토글 버튼 터치타깃 */
    #view-files .fviews button{min-height:34px}
    /* 설정 서브탭: 가로 스크롤로(겹침/줄바꿈 방지) */
    #view-settings .setsubnav{overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch}
    #view-settings .setsubtab{white-space:nowrap;flex-shrink:0}
    /* 직원 계정/계정추가 폼: 입력이 너무 좁아지지 않게 */
    #view-settings .userform{gap:8px}
    /* Head-AI 입력바 안전영역 여백 */
    #view-headai .hacompose{padding-bottom:env(safe-area-inset-bottom,0px)}
  }
  /* 설정 서브탭 스크롤바는 숨김(있어도 얇게) — 시각 노이즈 감소 */
  #view-settings .setsubnav::-webkit-scrollbar{height:0}
  .mob-only{display:none}   /* 📱 모바일 전용 요소 — 아래 미디어쿼리에서만 켬 */
  /* 📥 다운로드 진행 카드 — 파일 받기 피드백(진행률·MB·취소). JS(dlProgEl)가 동적 생성. */
  .dlprog{position:fixed;left:12px;right:12px;bottom:calc(14px + var(--m-tabh,0px) + var(--sab,0px));z-index:140;background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 34px rgba(15,22,38,.22);padding:12px 14px;max-width:420px;margin:0 auto}
  .dlprog[hidden]{display:none}
  .dlprog .dlrow{display:flex;align-items:center;gap:8px}
  .dlprog .dlname{flex:1;min-width:0;font-size:13.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dlprog .dlx{border:0;background:none;color:var(--mut);font-size:15px;cursor:pointer;padding:2px 4px;line-height:1}
  .dlprog .dlbar{height:6px;background:var(--card2);border-radius:99px;overflow:hidden;margin:9px 0 6px}
  .dlprog .dlbar>i{display:block;height:100%;width:0;background:var(--accent);border-radius:99px;transition:width .2s}
  .dlprog .dlmeta{font-size:12px;color:var(--mut)}
  .pvhead .btn{white-space:nowrap;flex-shrink:0}   /* '다운로드' 세로 줄바꿈 방지 */
  /* ════ 📱 모바일 상용 폴리시(2026-07-07 전면 검수) — 전부 max-width:820px 안, 데스크탑 무영향 ════ */
  @media (max-width:820px){
    /* (1) 더블탭 확대 차단 — "화면이 자꾸 확대된다" 원인 중 하나. manipulation은 팬/핀치는 허용, 더블탭 줌만 끔. */
    *,*::before,*::after{touch-action:manipulation}
    /* (2) 헤더 컴팩트 — 제목·부제·툴바가 상단을 과점하던 것 축소 */
    .topbar{gap:8px;padding:14px 16px 0}
    .topbar .sub{font-size:12.5px}
    /* 툴바 버튼 높이 통일(제각각이던 필/사각 버튼 정렬) */
    .topbar .actions button,.topbar .actions select{min-height:36px}
    .topbar .actions .calmodes button{min-height:34px}
    /* (3) 플로팅 버튼: Q&A만 48px로 남기고, 건의(전구) FAB는 콘텐츠(설정 토글 등)를 가려 드로어 메뉴로 이동.
       페이지 끝까지 스크롤하면 마지막 콘텐츠가 FAB 위로 빠지게 하단 여백 확보. */
    .qafab{width:48px;height:48px}
    .fbfab{display:none!important}
    .mob-only{display:flex}
    .vbody{padding-bottom:130px}
    /* (4) 사이드바 드로어: 폰에 무의미한 단축키 힌트 제거 */
    .sidesearch .kbd{display:none}
    /* (5) 홈 칸반 가로 스크롤: 못생긴 네이티브 스크롤바 숨김 + 컬럼 스냅(카드덱 느낌) */
    .hbd::-webkit-scrollbar,.hvboard::-webkit-scrollbar{display:none}
    .hbd,.hvboard{scrollbar-width:none;scroll-snap-type:x proximity}
    .hbdcol,.hvboard .bcol{scroll-snap-align:start}
    /* (6) 설정 서브탭: 오른쪽이 뚝 잘려 보이던 것 → 페이드로 '더 있음' 힌트 */
    #view-settings .setsubnav{-webkit-mask-image:linear-gradient(90deg,#000 90%,transparent);mask-image:linear-gradient(90deg,#000 90%,transparent)}
    /* (7) Head-AI: 터미널 높이 화면 비율로, 입력바 정렬 */
    .haterm{height:46vh}
    .hacompose .btn{min-height:48px}
    /* (8) 파일 미리보기 = 전체화면 뷰어(하단에 어정쩡한 반시트로 뜨던 것 교정) + 노치 안전영역 */
    #pvModal{padding:0;align-items:stretch}
    #pvModal .pvbox{width:100%;max-height:none;height:100dvh;border-radius:0}
    #pvModal .pvhead{padding-top:calc(11px + var(--sat,0px))}
  }
  /* 📔 업무일지(2026-07-07) */
  .wlseg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
  .wlseg button{font:inherit;font-size:13px;font-weight:600;border:0;background:var(--card);color:var(--txt2);padding:7px 14px;cursor:pointer;border-left:1px solid var(--line)}
  .wlseg button:first-child{border-left:0}
  .wlseg button.on{background:var(--accent);color:#fff}
  .wldate{display:flex;align-items:center;gap:8px;margin-bottom:16px}
  .wlnav{width:30px;height:30px;border:1px solid var(--line);background:var(--card);border-radius:7px;cursor:pointer;font-size:16px;color:var(--txt2);line-height:1}
  .wlnav:hover{border-color:var(--accent);color:var(--accent)}
  .wldatelbl{font-size:15px;font-weight:800;min-width:160px;text-align:center;letter-spacing:-.01em}
  .wltoday{border:1px solid var(--line);background:var(--card);border-radius:99px;font-size:12.5px;font-weight:700;padding:6px 14px;cursor:pointer;color:var(--txt2)}
  .wltoday:hover{border-color:var(--accent);color:var(--accent)}
  .wlcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;max-width:720px}
  .wlsec{margin-bottom:16px}
  .wlh{font-size:14px;font-weight:800;color:var(--txt);margin-bottom:8px;display:flex;align-items:center;gap:8px}
  .wlpull{margin-left:auto;font:inherit;font-size:11.5px;font-weight:600;color:var(--mut);background:none;border:1px solid var(--line);border-radius:99px;padding:4px 11px;cursor:pointer}
  .wlpull:hover{color:var(--accent);border-color:var(--accent)}
  /* 메모장식 에디터 — 제목 줄=굵게(.wlt), '-' 시작 줄=본문. 줄 내 Ctrl+B/I로 부분 굵게·기울임(2026-07-10) */
  .wledit{border:1px solid var(--line);border-radius:8px;padding:12px 14px;min-height:200px;font-size:14px;line-height:1.8;background:var(--card);outline:none}
  .wledit:focus{border-color:var(--accent)}
  /* 모바일: 폼컨트롤 16px 규칙(textarea)과 크기 통일 + iOS 포커스 확대 방지(contenteditable도 <16px면 확대) */
  @media(max-width:820px){.wledit{font-size:16px;line-height:1.7}}
  .wledit div{min-height:1.5em}
  .wledit .wlt{font-weight:700}
  .wledit b,.wledit strong{font-weight:700}
  .wledit:empty::before{content:'오늘 한 일을 적어주세요';color:var(--mut)}
  /* ✎ 업무일지 서식 툴바 */
  .wltoolbar{display:flex;gap:4px;margin-bottom:6px}
  .wltoolbar button{width:30px;height:28px;border:1px solid var(--line);border-radius:6px;background:var(--card);cursor:pointer;font-size:13px;color:var(--txt2);font-family:inherit}
  .wltoolbar button:hover{border-color:var(--accent);color:var(--accent)}
  .wltoolbar .wtb{font-weight:800}
  .wltoolbar .wti{font-style:italic}
  .wltoolbar .wthint{margin-left:auto;align-self:center;font-size:11.5px;color:var(--mut)}
  .wltags{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
  .wltag{font:inherit;font-size:12px;font-weight:600;color:var(--accent);background:var(--accent2);border:0;border-radius:99px;padding:4px 11px;cursor:pointer}
  .wltag:hover{filter:brightness(.95)}
  .wlcard textarea{width:100%;box-sizing:border-box;font:inherit;font-size:14px;line-height:1.7;border:1px solid var(--line);border-radius:8px;padding:11px 13px;background:var(--card);resize:vertical;min-height:72px}
  .wlcard textarea:focus{outline:none;border-color:var(--accent)}
  .wlall-body .wlt{font-weight:700;color:var(--txt)}
  .wlall-body b,.wlall-body strong{font-weight:700;color:var(--txt)}
  .wlfoot{display:flex;align-items:center;gap:12px;justify-content:flex-end}
  .wlsaved{font-size:12px;color:var(--mut);margin-right:auto}
  .wlall-item{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:10px;max-width:760px}
  .wlall-hd{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  .wlall-nm{font-size:14px;font-weight:800}
  .wlall-none{font-size:12.5px;color:var(--mut);font-weight:600;margin-left:auto}
  .wlall-sec{font-size:12px;font-weight:700;color:var(--mut);margin:8px 0 3px}
  .wlall-body{font-size:13.5px;line-height:1.7;color:var(--txt2);white-space:pre-line}
  .wlall-req{margin-top:8px;background:rgba(224,70,62,.07);border:1px solid rgba(224,70,62,.22);border-radius:8px;padding:9px 12px}
  .wlall-req .wlreqh{font-weight:800;color:var(--blk);margin-bottom:3px;font-size:12px}
  .wlall-req .wlreqb{font-size:13px;line-height:1.6;white-space:pre-line;color:var(--txt2)}

  /* 📁 폴더 선택기(2026-07-21) — 이동·복사·채팅 폴더링크 공유 */
  .fpick{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:150;display:flex;align-items:center;justify-content:center;padding:16px}
  .fpickbox{background:var(--bg);border:1px solid var(--line);border-radius:14px;width:100%;max-width:420px;max-height:82vh;display:flex;flex-direction:column;box-shadow:0 20px 50px rgba(0,0,0,.25);overflow:hidden}
  .fpickhd{display:flex;align-items:center;gap:8px;padding:14px 16px 10px}
  .fpicktitle{font-size:15px;font-weight:800;color:var(--txt);flex:1}
  .fpickx{border:0;background:none;color:var(--mut);cursor:pointer;padding:2px;display:flex;border-radius:6px}
  .fpickx:hover{background:var(--card2);color:var(--txt)}
  .fpickcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:0 16px 10px;font-size:12.5px;color:var(--mut)}
  .fpickcr{border:0;background:none;color:var(--accent);cursor:pointer;font:inherit;font-weight:600;padding:2px 4px;border-radius:5px;display:inline-flex;align-items:center;gap:3px}
  .fpickcr:hover{background:var(--accent2)}
  .fpickcr svg{width:13px;height:13px}
  .fpicksep{color:var(--mut);margin:0 1px}
  .fpicklist{flex:1;overflow-y:auto;padding:2px 10px 10px;min-height:120px}
  .fpickrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:none;cursor:pointer;font:inherit;padding:10px 8px;border-radius:9px;color:var(--txt)}
  .fpickrow:hover{background:var(--card2)}
  .fpickrow .fpickic{flex:none;color:var(--accent);display:flex}
  .fpickrow.up .fpickic{color:var(--mut)}
  .fpickrow .fpickic svg{width:20px;height:20px}
  .fpickrow .fpickn{flex:1;min-width:0;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fpickrow .fpickgo{flex:none;color:var(--mut);display:flex}
  .fpickempty{color:var(--mut);font-size:13px;padding:16px 8px;line-height:1.6}
  .fpickfoot{border-top:1px solid var(--line);padding:11px 16px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
  .fpickdest{flex:1;min-width:0;font-size:12.5px;color:var(--txt2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fpickacts{display:flex;gap:8px;flex:none}

  /* 💬 채팅 +첨부 메뉴(2026-07-21) */
  .chatattmenu{position:fixed;z-index:160;background:var(--card);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px rgba(15,22,38,.2);padding:5px;min-width:196px;max-width:min(260px,92vw)}
  .chatattitem{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:none;cursor:pointer;font:inherit;font-size:13.5px;font-weight:600;color:var(--txt);padding:10px 11px;border-radius:8px}
  .chatattitem:hover{background:var(--card2)}
  .chatattitem svg{width:17px;height:17px;color:var(--accent);flex:none}

  /* 📁 채팅 공용폴더 링크 칩(2026-07-21) */
  .cmfolder{display:flex;align-items:center;gap:10px;width:250px;max-width:66vw;text-align:left;border:1px solid var(--line);background:var(--card);border-radius:12px;padding:11px 12px;cursor:pointer;font:inherit}
  .cmrow.me .cmfolder{margin-left:auto;background:#e9ebf0;border-color:transparent}
  .cmfolder:hover{border-color:var(--accent)}
  .cmfolder .cmficon{flex:none;width:34px;height:34px;border-radius:8px;background:var(--accent2);color:var(--accent);display:flex;align-items:center;justify-content:center}
  .cmfolder .cmficon svg{width:19px;height:19px;display:block}
  .cmfolder .cmfinfo{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
  .cmfolder .cmfnm{font-size:13.5px;font-weight:700;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cmfolder .cmfsz{font-size:11.5px;color:var(--mut)}
  .cmfolder .cmfdl{flex:none;color:var(--mut);display:flex}
  .cmfolder .cmfdl svg{width:18px;height:18px;display:block}

  /* 🏗️ 분양현장 관리 대시보드(bunyang) — 토큰 기반·반응형·라이트톤 통일 */
  .byng-site{min-width:230px;max-width:360px}
  .byng-note{background:rgba(199,119,0,.06);border:1px solid rgba(199,119,0,.26);color:var(--warn,#c77700);border-radius:10px;padding:11px 14px;font-size:var(--fs-sm,12.5px);font-weight:600;margin-bottom:16px;display:flex;gap:8px;align-items:flex-start}
  .byng-note svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}
  .byng-empty{padding:64px 20px;text-align:center;color:var(--mut);font-size:var(--fs-sm,13px)}
  .byng-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
  .byng-kpis--3{grid-template-columns:repeat(3,minmax(0,1fr))}
  /* 임대현황 KPI: 히어로(임대율)를 2칸 폭으로 → 2타일(임대율·평균수익률)이 3칸 그리드를 자연스럽게 채움(무상임대 타일 제거·2026-07-27) */
  .byng-kpis--3 .byng-kpi--hero{grid-column:span 2}
  .byng-kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:15px 16px;min-width:0}
  .byng-kpi .k-lbl{font-size:var(--fs-xs,11.5px);color:var(--mut);font-weight:600;margin-bottom:8px;letter-spacing:-.01em}
  .byng-kpi .k-val{font-size:25px;font-weight:800;color:var(--txt);letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.05}
  .byng-kpi .k-val small{font-size:15px;font-weight:700;color:var(--txt2);margin-left:1px}
  .byng-kpi .k-sub{font-size:var(--fs-xs,11.5px);color:var(--mut);margin-top:7px;font-variant-numeric:tabular-nums}
  .byng-kpi--hero{background:linear-gradient(180deg,var(--accent2),transparent);border-color:color-mix(in srgb,var(--accent) 30%,var(--line))}
  .byng-kpi--hero .k-val{color:var(--accent);font-size:30px}
  .byng-kpi .k-bar{height:7px;border-radius:5px;background:var(--card2,#f0f0ee);margin-top:11px;overflow:hidden}
  .byng-kpi .k-barf{height:100%;background:var(--accent);border-radius:5px;transition:width .5s cubic-bezier(.2,.7,.3,1)}
  .byng-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .byng-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;min-width:0}
  .byng-card--wide{grid-column:1 / -1}
  .byng-cardhd{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}
  .byng-cardhd h3{font-size:var(--fs-h2,14.5px);font-weight:700;margin:0;color:var(--txt)}
  .byng-sub2{font-size:var(--fs-xs,11.5px);color:var(--mut);font-weight:500}
  .byng-tbtn{margin-left:auto;font:inherit;font-size:var(--fs-xs,11.5px);font-weight:700;color:var(--txt2);background:var(--bg2);border:1px solid var(--line);border-radius:7px;padding:5px 11px;cursor:pointer;transition:.12s}
  .byng-tbtn:hover{background:var(--card2);color:var(--txt)}
  .byng-tbtn[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
  .byng-legend{display:flex;gap:15px;align-items:center}
  .byng-lg{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-xs,11.5px);color:var(--txt2);font-weight:600}
  .byng-sw{width:14px;height:14px;border-radius:4px;flex-shrink:0}
  .byng-sw--bar{background:var(--accent)}
  .byng-sw--line{height:0;width:16px;border-radius:0;border-top:2.5px solid var(--accent);position:relative}
  .byng-sw--line::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:7px;height:7px;border-radius:50%;background:var(--accent)}
  /* 도넛 */
  .byng-donutwrap{display:flex;align-items:center;gap:22px;flex-wrap:wrap;justify-content:center}
  .byng-donut{position:relative;width:170px;height:170px;flex-shrink:0}
  .byng-donut .d-ctr{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
  .byng-donut .d-pct{font-size:32px;font-weight:800;color:var(--accent);letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1}
  .byng-donut .d-cap{font-size:var(--fs-xs,11px);color:var(--mut);font-weight:600}
  .byng-donutleg{display:flex;flex-direction:column;gap:10px}
  .byng-dlrow{display:flex;align-items:center;gap:9px;font-size:var(--fs-sm,12.5px);color:var(--txt);font-variant-numeric:tabular-nums}
  .byng-dlrow .dl-dot{width:11px;height:11px;border-radius:3px;flex-shrink:0}
  .byng-dlrow b{font-weight:700;margin-left:2px}
  .byng-dlrow .dl-k{color:var(--txt2);font-weight:600}
  /* 가로 막대(층별·지역별) */
  .byng-bars{display:flex;flex-direction:column;gap:9px}
  .byng-brow{display:grid;grid-template-columns:64px 1fr auto;align-items:center;gap:11px;cursor:default}
  .byng-brow .b-lbl{font-size:var(--fs-sm,12.5px);color:var(--txt2);font-weight:600;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .byng-brow.wlbl{grid-template-columns:130px 1fr auto}
  .byng-btrack{position:relative;height:22px;background:var(--card2,#f0f0ee);border-radius:6px;overflow:hidden}
  .byng-bfill{position:absolute;left:0;top:0;bottom:0;background:var(--accent);border-radius:6px;min-width:2px;transition:width .5s cubic-bezier(.2,.7,.3,1)}
  .byng-brow:hover .byng-bfill{filter:brightness(1.08)}
  .byng-bval{font-size:var(--fs-sm,12.5px);color:var(--txt);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
  .byng-bval .bv-mut{color:var(--mut);font-weight:500}
  /* 월별 SVG 콤보 */
  .byng-svgwrap{width:100%;overflow-x:auto}
  .byng-svgwrap svg{display:block;width:100%;height:auto;min-width:420px}
  .byng-svg .ax{stroke:var(--line);stroke-width:1}
  .byng-svg .grid{stroke:var(--line);stroke-width:1;stroke-dasharray:2 4;opacity:.6}
  .byng-svg .axtxt{fill:var(--mut);font-size:10.5px;font-weight:600}
  .byng-svg .bar{fill:var(--accent);opacity:.28;transition:opacity .12s}
  .byng-svg .barhit:hover+.bar,.byng-svg .bar.on{opacity:.5}
  .byng-svg .cline{fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
  .byng-svg .cdot{fill:var(--card);stroke:var(--accent);stroke-width:2}
  .byng-svg .clbl{fill:var(--accent);font-size:10px;font-weight:700}
  .byng-svg .barhit{fill:transparent;cursor:pointer}
  /* 표 대체 */
  .byng-tbl{width:100%;border-collapse:collapse;font-size:var(--fs-sm,12.5px);font-variant-numeric:tabular-nums}
  .byng-tbl th{text-align:left;color:var(--mut);font-weight:600;font-size:var(--fs-xs,11px);padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
  .byng-tbl td{padding:8px 10px;border-bottom:1px solid var(--line);color:var(--txt)}
  .byng-tbl th.num,.byng-tbl td.num{text-align:right}
  .byng-tbl tbody tr:last-child td{border-bottom:0}
  .byng-tbl tfoot td{font-weight:700;border-top:2px solid var(--line);border-bottom:0}
  .byng-src{margin-top:16px;font-size:var(--fs-xs,11px);color:var(--mut);line-height:1.6}
  /* 임대현황 섹션 */
  .byng-secttl{display:flex;align-items:baseline;gap:10px;margin:26px 0 12px;padding-top:20px;border-top:1px solid var(--line);flex-wrap:wrap}
  .byng-secttl h3{font-size:var(--fs-h2,15px);font-weight:800;margin:0;color:var(--txt);letter-spacing:-.01em}
  .byng-sw--soft{background:color-mix(in srgb,var(--accent) 42%,var(--card2,#eee))}
  .byng-bfill--soft{background:color-mix(in srgb,var(--accent) 42%,var(--card2,#eee))}
  .byng-svg .bar.solid{opacity:.82}
  .byng-svg .bar.solid.on{opacity:1}
  /* 코벤트워크(입점률 중심) — 1차/2차 단계 탭 + 2차지표 점선 */
  .byng-phaserow{display:flex;align-items:center;gap:12px;margin:22px 0 14px;flex-wrap:wrap}
  .byng-phasetabs{display:inline-flex;background:var(--bg2);border:1px solid var(--line);border-radius:9px;padding:3px;gap:2px}
  .byng-ptab{font:inherit;font-size:var(--fs-sm,12.5px);font-weight:700;color:var(--txt2);background:transparent;border:0;border-radius:7px;padding:7px 20px;cursor:pointer;transition:.12s}
  .byng-ptab:hover{color:var(--txt)}
  .byng-ptab[aria-selected="true"]{background:var(--accent);color:#fff}
  .byng-phasettl{font-size:var(--fs-xs,11.5px);color:var(--mut);font-weight:500}
  .byng-svg .cline2{fill:none;stroke:var(--txt2);stroke-width:2;stroke-dasharray:4 4;stroke-linejoin:round;stroke-linecap:round;opacity:.7}
  .byng-svg .cdot2{fill:var(--card);stroke:var(--txt2);stroke-width:1.5;opacity:.85}
  .byng-sw--line2{height:0;width:16px;border-radius:0;border-top:2.5px dashed var(--txt2);opacity:.7}
  /* 부동 툴팁(공통) */
  .byng-tip{position:fixed;z-index:200;pointer-events:none;background:var(--txt);color:var(--bg,#fff);font-size:11.5px;font-weight:600;line-height:1.4;padding:7px 10px;border-radius:8px;box-shadow:0 8px 24px rgba(15,22,38,.22);opacity:0;transform:translateY(3px);transition:opacity .1s,transform .1s;white-space:nowrap;max-width:260px}
  .byng-tip.on{opacity:1;transform:translateY(0)}
  .byng-tip .t-k{opacity:.7;font-weight:500}
  /* ── 층별 도면(floorplan) ── */
  #byngFloorplanSection{margin-top:4px}
  .byng-fp-actions{margin-left:auto;display:flex;gap:8px}
  .byng-fp-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
  .byng-fp-tab{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--txt2);font-family:inherit;font-size:var(--fs-sm,12.5px);font-weight:700;padding:6px 13px;border-radius:8px;cursor:pointer;transition:background .12s,color .12s,border-color .12s}
  .byng-fp-tab:hover{background:var(--bg2)}
  .byng-fp-tab[aria-selected="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
  .byng-fp-stagewrap{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;overflow:auto}
  .byng-fp-stage{position:relative;display:block;max-width:1000px;margin:0 auto;line-height:0;user-select:none}
  .byng-fp-stage img{display:block;width:100%;height:auto;border-radius:6px;background:var(--bg2)}
  .byng-fp-overlay{position:absolute;inset:0}
  /* 호실 도형 = SVG 다각형(실제 방 외곽, 사선벽 포함). 라벨·정점핸들은 HTML(왜곡 방지). */
  .byng-fp-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
  .byng-fp-poly{pointer-events:all;fill:transparent;stroke:transparent;stroke-width:2;stroke-linejoin:round}
  .byng-fp-poly.sold{fill:var(--accent2);stroke:var(--accent)}
  .byng-fp-lab{position:absolute;transform:translate(-50%,-50%);font-size:11px;font-weight:800;color:var(--accent);background:rgba(255,255,255,.82);border-radius:4px;padding:0 4px;line-height:1.5;letter-spacing:-.02em;pointer-events:none;white-space:nowrap}
  .byng-fp-lab:not(.sold){color:var(--mut)}
  /* 조회 모드: 분양완료 도형만 노출(호버 강조) */
  .byng-fp-overlay:not(.editing) .byng-fp-poly{cursor:default;transition:fill .12s}
  .byng-fp-overlay:not(.editing) .byng-fp-poly.sold:hover{fill:rgba(37,99,235,.2)}
  /* 편집 모드 */
  .byng-fp-overlay.editing .byng-fp-poly{cursor:move;fill:rgba(155,154,151,.10);stroke:var(--mut);stroke-dasharray:4 3}
  .byng-fp-overlay.editing .byng-fp-poly.sold{stroke:var(--accent);fill:var(--accent2);stroke-dasharray:none}
  .byng-fp-overlay.editing .byng-fp-poly.sel{stroke:var(--accent);fill:var(--accent2);stroke-dasharray:none;stroke-width:3}
  .byng-fp-vtx{position:absolute;width:11px;height:11px;margin:-6px 0 0 -6px;background:#fff;border:2px solid var(--accent);border-radius:50%;z-index:6;cursor:grab}
  .byng-fp-vtx:active{cursor:grabbing}
  .byng-fp-edithint{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;background:var(--accent2);border:1px solid var(--line);border-radius:10px;padding:9px 14px;margin-bottom:12px;font-size:var(--fs-sm,12.5px);color:var(--txt2);font-weight:600}
  .byng-fp-edittools{margin-left:auto;display:flex;gap:8px}
  .byng-fp-legend{display:flex;flex-wrap:wrap;gap:16px;margin-top:10px;font-size:var(--fs-sm,12px);color:var(--txt2)}
  .byng-fp-legend .lg{display:flex;align-items:center;gap:7px}
  .byng-fp-legend .sw{width:20px;height:14px;border-radius:3px;border:2px solid var(--accent);background:var(--accent2);flex-shrink:0}
  .byng-fp-empty{padding:48px 20px;text-align:center;color:var(--mut);font-size:var(--fs-sm,13px)}
  @media (max-width:900px){
    .byng-kpis{grid-template-columns:repeat(2,1fr)}
    .byng-grid{grid-template-columns:1fr}
    .byng-card--wide{grid-column:auto}
  }
  @media (max-width:520px){
    .byng-kpi .k-val{font-size:22px}
    .byng-kpi--hero .k-val{font-size:26px}
    .byng-brow{grid-template-columns:52px 1fr auto;gap:8px}
    .byng-brow.wlbl{grid-template-columns:104px 1fr auto}
  }
