:root{--bg: #f4f3ef;--panel: #fff;--text: #141414;--text-2: #5c5c58;--text-3: #8f8f89;--border: #d9d8d2;--accent: #7a8b5c;--black: #111;--sel: #eceae3;--red: #b3261e;--amber-bg: #fbf0c8;--amber: #7a5b00;--purple-bg: #ece6fb;--purple: #4b2fa0;--blue-bg: #e3edf8;--blue: #1c4f86;--green-bg: #e2eedb;--green: #3d6b25}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Noto Sans,system-ui,sans-serif;font-size:14px;color:var(--text);background:var(--bg)}button,input,select,textarea{font:inherit;color:inherit}a{color:inherit}.shell{display:grid;grid-template-columns:200px 1fr;grid-template-rows:60px 1fr;height:100%}.logo{display:flex;align-items:center;padding-left:20px;letter-spacing:.3em;font-size:18px;border-bottom:.5px solid var(--border);border-right:.5px solid var(--border);background:var(--panel)}.topbar{display:flex;align-items:center;gap:16px;padding:0 24px;border-bottom:.5px solid var(--border);background:var(--panel);letter-spacing:.2em;text-transform:uppercase;font-size:16px}.topbar .sep{color:var(--border)}.topbar .date{margin-left:auto;letter-spacing:.05em;text-transform:none;font-size:16px;display:flex;gap:14px}.sidebar{background:var(--panel);border-right:.5px solid var(--border);padding:20px 8px;display:flex;flex-direction:column;overflow-y:auto}.main{overflow:auto;padding:22px 28px 60px}.pill-nav{display:block;padding:8px 12px;border-radius:8px;font-weight:600;font-size:13px;letter-spacing:.06em;text-transform:uppercase;text-decoration:none;background:#fff;border:.5px solid var(--border);margin-bottom:8px}.pill-nav.active{background:var(--black);color:#fff;border-color:var(--black)}.nav-group{margin:18px 0 6px 12px;font-size:11px;letter-spacing:.12em;color:var(--text-2);text-transform:uppercase}.nav-link{display:flex;align-items:center;gap:10px;padding:7px 12px;border-radius:6px;text-decoration:none;font-size:14px}.nav-link:hover{background:var(--sel)}.nav-link.active{background:var(--sel);font-weight:500}.nav-link .ic{width:16px;text-align:center;color:var(--text-2)}.sidebar .spacer{flex:1}.userbar{display:flex;align-items:center;gap:8px;padding:12px 10px 0;font-size:12px;letter-spacing:.1em;text-transform:uppercase;cursor:pointer}.userbar span.sign{font-size:10px}h2.page{font-size:15px;letter-spacing:.2em;text-transform:uppercase;font-weight:400;margin:6px 0 22px}.section-label{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-2);margin:28px 0 12px}.card{background:var(--panel);border:.5px solid var(--border);border-radius:12px;padding:18px}.card+.card{margin-top:14px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:stretch}.grid3>.card{margin-top:0;min-height:110px;color:inherit}.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}.metric-label{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-2)}.metric-value{font-size:26px;margin-top:6px}.metric-sub{font-size:12px;color:var(--text-3);font-style:italic}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.muted{color:var(--text-2)}.small{font-size:12px}.empty{text-align:center;color:var(--text-2);padding:36px 10px}.btn{border:.5px solid var(--border);background:#fff;border-radius:8px;padding:6px 12px;cursor:pointer;font-weight:500;font-size:13px}.btn:hover{border-color:#999}.btn.on,.btn.primary{background:var(--black);color:#fff;border-color:var(--black)}.btn.green{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.danger{color:var(--red)}.btn:disabled{opacity:.5;cursor:default}.chip{border:.5px solid var(--border);background:#fff;border-radius:100px;padding:7px 18px;cursor:pointer;font-size:14px}.chip.on{background:var(--black);color:#fff;border-color:var(--black)}.tag{display:inline-block;font-size:11px;font-weight:500;padding:2px 8px;border-radius:6px;margin-right:10px}.tag.reply{background:var(--amber-bg);color:var(--amber)}.tag.deadline{background:var(--purple-bg);color:var(--purple)}.tag.blue{background:var(--blue-bg);color:var(--blue)}.tag.green{background:var(--green-bg);color:var(--green)}.tag.gray{background:var(--sel);color:var(--text-2)}label.f{display:block;font-size:13px;margin-bottom:14px}label.f>span{display:block;margin-bottom:6px;color:var(--text-2)}label.f .req{color:var(--red)}input.in,select.in,textarea.in{width:100%;padding:10px 12px;border:.5px solid var(--border);border-radius:8px;background:#fff;font-size:14px}textarea.in{min-height:90px;resize:vertical}.form-card{max-width:760px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}table.t{width:100%;border-collapse:collapse;font-size:13px}table.t th{text-align:left;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);font-weight:500;padding:12px 14px;border-bottom:.5px solid var(--border)}table.t td{padding:12px 14px;border-bottom:.5px solid var(--border);vertical-align:top}table.t tr:last-child td{border-bottom:none}table.t tr.click{cursor:pointer}table.t tr.click:hover td{background:#faf9f6}.table-wrap{background:#fff;border:.5px solid var(--border);border-radius:12px;overflow-x:auto}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:#fff;border-radius:14px;padding:22px;width:100%;max-width:520px;max-height:90vh;overflow:auto}.modal h3{margin:0 0 16px;font-size:15px;letter-spacing:.1em;text-transform:uppercase;font-weight:500}.split{display:grid;grid-template-columns:360px 1fr;gap:14px;height:calc(100vh - 150px)}.list{overflow-y:auto;padding:0}.list-item{padding:12px 16px;border-bottom:.5px solid var(--border);cursor:pointer}.list-item:hover{background:#faf9f6}.list-item.sel{background:var(--sel)}.list-item.unread .subj{font-weight:600}.list-item .from{font-size:13px}.list-item .subj{font-size:13px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.list-item .snip{font-size:12px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.msg-body{white-space:pre-wrap;font-size:14px;line-height:1.6}iframe.msg{width:100%;border:none;height:60vh;background:#fff}.cal{display:grid;grid-template-columns:repeat(7,1fr);border:.5px solid var(--border);border-radius:12px;overflow:hidden;background:#fff}.cal .dow{padding:8px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-2);border-bottom:.5px solid var(--border)}.cal .day{min-height:96px;padding:6px;border-right:.5px solid var(--border);border-bottom:.5px solid var(--border);cursor:pointer;font-size:12px}.cal .day:nth-child(7n){border-right:none}.cal .day.out{background:#faf9f6;color:var(--text-3)}.cal .day.today .n{background:var(--black);color:#fff;border-radius:100px;padding:1px 6px}.cal .day.sel{background:var(--sel)}.cal .ev{margin-top:3px;padding:1px 5px;border-radius:4px;background:var(--blue-bg);color:var(--blue);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11px}.sub-nav{display:flex;gap:0;border:.5px solid var(--border);border-radius:12px;background:#fff;overflow:hidden;min-height:360px}.sub-nav .left{width:200px;border-right:.5px solid var(--border)}.sub-nav .left div{padding:13px 18px;cursor:pointer;display:flex;justify-content:space-between}.sub-nav .left div.on{border-left:2px solid var(--black);font-weight:600;padding-left:16px}.sub-nav .right{flex:1;padding:14px;display:flex;flex-wrap:wrap;gap:8px;align-content:flex-start}.link-pill{border:.5px solid var(--border);border-radius:8px;padding:9px 12px;text-decoration:none;display:inline-flex;gap:10px;align-items:center}.link-pill .x{color:var(--text-3);cursor:pointer}.res-card{padding:18px;display:flex;flex-direction:column;gap:8px}.res-card .title{font-weight:500;font-size:15px}.res-card a{color:var(--blue);font-size:12px;text-decoration:none}.login{height:100%;display:flex;flex-direction:column;justify-content:center;padding-left:12vw;gap:14px;text-transform:uppercase;letter-spacing:.12em;font-size:13px;background:#efede8}.login button{all:unset;cursor:pointer;border-bottom:1px solid var(--text);width:max-content}.portal .sidebar,.portal.shell,.portal .main{background:#f3f4f6}.project-card{background:#fff;border:.5px solid var(--border);border-radius:14px;padding:16px;height:220px;display:flex;flex-direction:column;justify-content:space-between;cursor:pointer;text-decoration:none}.project-card:hover{border-color:#888}.project-card{position:relative;background-size:cover;background-position:center}.project-card .code{font-size:12px;color:var(--text-2)}.project-card .name{font-weight:500;font-size:15px}.project-card .loc{display:block;font-weight:400;font-size:11px;color:var(--text-2);margin-top:3px}.project-card .edit{position:absolute;top:10px;right:12px;opacity:0;font-size:14px;padding:2px 6px;border-radius:6px;background:#ffffffd9;color:var(--text)}.project-card:hover .edit{opacity:1}.project-card[style*="url("] .code,.project-card[style*="url("] .name,.project-card[style*="url("] .loc{color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.5)}.portal .nav-link.active{background:var(--black);color:#fff;font-weight:500}.portal .nav-link.active .ic{color:#fff}.acc-bar{display:flex;align-items:center;gap:20px;background:#6b6a66;color:#fff;border-radius:10px;padding:18px 20px;cursor:pointer;font-size:14px}.acc-bar .num{font-size:12px;opacity:.8;min-width:24px}.acc-bar .acc-title{font-weight:600;letter-spacing:.08em;text-transform:uppercase;flex:1}.acc-bar .acc-meta{font-size:12px;opacity:.85}.acc-body{background:#fff;border:.5px solid var(--border);border-top:none;border-radius:0 0 10px 10px;margin-top:-6px;padding-top:6px}.acc-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 16px;border-bottom:.5px solid var(--border)}.acc-row:last-child{border-bottom:none}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;padding:14px}.photo img,.photo .ph{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:8px;cursor:pointer;background:var(--sel);display:block}.photo .cap{display:flex;justify-content:space-between;font-size:12px;margin-top:4px;gap:6px}.photo .x{cursor:pointer;color:var(--text-3)}.tabs{display:flex;gap:28px;border-bottom:.5px solid var(--border);margin-bottom:18px}.tabs button{background:none;border:none;padding:10px 2px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-.5px}.tabs button.on{color:var(--text);font-weight:600;border-bottom-color:var(--text)}.tabs .n{color:var(--text-3);margin-left:3px}.chip.sm{padding:5px 12px;font-size:12px}.chip .n{color:var(--text-3);margin-left:4px}.chip.on .n{color:#bbb}.tag.amber2{background:#efe7d2;color:#6e5a1e}tr.selrow td{background:var(--sel)!important}.legend{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:10px 0 0}.standing{margin-top:18px}.stats{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--text);margin-top:18px}.stats>div{padding:14px 12px 0 0;display:flex;flex-direction:column;gap:4px}.stats b{font-size:28px;font-weight:500}.stats span{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-2)}.contact{display:grid;grid-template-columns:200px 220px 1fr;gap:12px;padding:16px 18px;border-bottom:.5px solid var(--border);cursor:pointer;align-items:center}.contact:last-child{border-bottom:none}.gantt{position:relative;height:16px;background:var(--sel);border-radius:4px;min-width:160px}.gantt .bar{position:absolute;top:3px;bottom:3px;background:var(--accent);border-radius:3px}.gantt .today{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--red)}@media (max-width: 800px){.stats{grid-template-columns:repeat(2,1fr)}.contact{grid-template-columns:1fr}.shell{grid-template-columns:1fr;grid-template-rows:52px auto 1fr}.sidebar{flex-direction:row;flex-wrap:wrap;padding:8px;border-right:none;border-bottom:.5px solid var(--border)}.nav-group,.sidebar .spacer{display:none}.logo{border-right:none}.split,.grid3{grid-template-columns:1fr;height:auto}.form-grid{grid-template-columns:1fr}}.mail{display:grid;grid-template-columns:220px 340px 1fr;gap:14px;height:calc(100vh - 150px)}.folders{overflow-y:auto;padding:8px 0}.folder{display:flex;align-items:center;gap:4px;padding:6px 10px;cursor:pointer;font-size:13px;border-radius:6px;margin:0 6px}.folder:hover{background:#faf9f6}.folder.on{background:var(--sel);font-weight:600}.folder .caret{width:14px;flex:none;color:var(--text-3);font-size:11px;text-align:center}.folder .dot{width:8px;height:8px;border-radius:50%;flex:none}.folder .fname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.folder .fcount{font-size:11px;color:var(--text-2)}.fhead{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-3);padding:14px 16px 4px}@media (max-width: 900px){.mail{grid-template-columns:1fr;height:auto}.folders{max-height:240px}}.editor{min-height:180px;max-height:45vh;overflow:auto;outline:none;line-height:1.5;white-space:normal}.editor:focus{border-color:#999}.editor img{max-width:100%;height:auto;border-radius:4px;display:block;margin:6px 0}.loginlink{width:max-content;border-bottom:1px solid var(--text);color:inherit;text-decoration:none}.public{min-height:100%;background:var(--bg)}.public-head{display:flex;justify-content:space-between;align-items:center;padding:14px 24px;background:var(--panel);border-bottom:.5px solid var(--border)}.public-logo{letter-spacing:.3em;font-size:18px}.linkbtn{all:unset;cursor:pointer;font-size:13px;border-bottom:1px solid var(--text)}.public-body{max-width:760px;margin:0 auto;padding:28px 16px 60px}.public-body h1{font-size:16px;letter-spacing:.15em;text-transform:uppercase;font-weight:500;margin:0 0 10px}.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.pgrid .full{grid-column:1 / -1}.pgrid small{display:block;margin-top:4px}@media (max-width: 600px){.pgrid{grid-template-columns:1fr}}.bill{display:grid;grid-template-columns:240px minmax(380px,1fr) minmax(320px,1fr);gap:16px;align-items:start}.bill .list-item{padding:10px 14px;cursor:pointer;border-bottom:.5px solid var(--border)}.bill .list-item.sel{background:var(--sel)}.billpreview{width:100%;height:82vh;border:.5px solid var(--border);border-radius:12px;background:#fff;position:sticky;top:0}.itemrow{display:grid;grid-template-columns:1fr 56px 76px 84px 34px;gap:6px;margin-bottom:8px;align-items:start}.itemrow textarea.in{min-height:0}@media (max-width: 1250px){.bill{grid-template-columns:220px 1fr}.billpreview{grid-column:1 / -1;position:static}}
