:root{--bg: #F5F4F0;--panel: #FFFFFF;--ink: #1B1A17;--ink2: #55524B;--ink3: #8C887E;--line: #E7E4DC;--line2: #EFEDE7;--side: #FBFAF7;--accent: #E2551B;--accent-soft: #FCEBE2;--green: #2E7D57;--amber: #C98A12;--red: #C3352B;--blue: #2D5FA8;--violet: #6C4BB4;--green-soft: #E3F2EA;--amber-soft: #FBF1DC;--red-soft: #FBE5E2;--blue-soft: #E4ECF7;--violet-soft: #EEE9F8;--r: 12px;--shadow: 0 1px 2px rgba(27, 26, 23, .06)}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg)}body{font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;color:var(--ink);font-size:13px;line-height:1.45;font-feature-settings:"tnum" 1;-webkit-text-size-adjust:100%}a{color:inherit}button,input,select,textarea{font:inherit;color:inherit}h1{font-size:22px;font-weight:700;letter-spacing:-.4px}h2{font-size:14px;font-weight:650}.muted{color:var(--ink3)}.ink2{color:var(--ink2)}.small{font-size:12px}.mono{font-family:ui-monospace,Menlo,monospace}.num{font-variant-numeric:tabular-nums;white-space:nowrap}.pos{color:var(--green)}.neg{color:var(--red)}.right{text-align:right}.center{display:grid;place-items:center}.full{min-height:100vh}.pad{padding:28px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row.between{justify-content:space-between}.grow{flex:1}.stack>*+*{margin-top:12px}.grid{display:grid;gap:14px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g5{grid-template-columns:repeat(5,minmax(0,1fr))}.tone-green{color:var(--green)}.tone-amber{color:var(--amber)}.tone-red{color:var(--red)}.tone-blue{color:var(--blue)}.app{display:grid;grid-template-columns:232px 1fr;min-height:100vh}.side{background:var(--side);border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{display:flex;gap:10px;align-items:center;padding:4px 8px 12px;font-weight:700;font-size:15px}.brand.big{font-size:20px;justify-content:center;padding-bottom:18px}.logo{width:30px;height:30px;border-radius:8px;background:var(--ink);color:#fff;display:grid;place-items:center;font-weight:800;position:relative}.logo:after{content:"";position:absolute;right:-2px;bottom:-2px;width:10px;height:10px;border-radius:3px;background:var(--accent)}.proj-switch{margin:0 4px 10px}.proj-switch select{width:100%}.sect{font-size:11px;text-transform:uppercase;letter-spacing:.8px;color:var(--ink3);font-weight:600;padding:14px 10px 6px}.nav{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--ink2);font-weight:500;cursor:pointer;border:0;background:none;text-align:left;text-decoration:none}.nav:hover{background:#f2f0ea}.nav.on{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--line)}.nav .badge{margin-left:auto}.badge{background:var(--accent);color:#fff;border-radius:10px;font-size:11px;font-weight:700;padding:1px 7px}.side-foot{margin-top:auto;border-top:1px solid var(--line);padding:12px 6px 0;display:flex;gap:10px;align-items:center}.avatar{width:30px;height:30px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:inline-grid;place-items:center;font-weight:700;font-size:11px;flex:none}.main{min-width:0}.top{display:flex;align-items:center;gap:12px;padding:14px 28px;border-bottom:1px solid var(--line);background:var(--bg);position:sticky;top:0;z-index:5}.crumbs{color:var(--ink3);font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumbs b{color:var(--ink);font-weight:600}.search{flex:1;max-width:420px;margin-left:auto;position:relative}.search input{width:100%;padding:8px 12px;border-radius:10px;border:1px solid var(--line);background:var(--panel)}.search .res{position:absolute;top:40px;left:0;right:0;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px #00000014;max-height:360px;overflow:auto;z-index:20}.search .res a{display:block;padding:9px 12px;text-decoration:none;border-bottom:1px solid var(--line2)}.search .res a:hover{background:var(--bg)}.bell{position:relative;border:1px solid var(--line);background:var(--panel);border-radius:10px;width:38px;height:38px;cursor:pointer}.bell .badge{position:absolute;top:-6px;right:-6px}.page{padding:22px 28px 40px;max-width:1400px}.page-h{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}.page-h .sub{color:var(--ink2);font-size:13px;width:100%}.bottom-nav{display:none}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow);min-width:0}.card.nopad{padding:0}.card.nopad .card-h{padding:14px 18px 0}.card+.card{margin-top:14px}.grid>.card+.card{margin-top:0}.card-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.card-r{display:flex;gap:8px;align-items:center;color:var(--ink3);font-size:12px}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:14px}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;box-shadow:var(--shadow)}.kpi-l{color:var(--ink2);font-size:12px}.kpi-v{font-size:24px;font-weight:700;letter-spacing:-.5px;margin:4px 0 2px;font-variant-numeric:tabular-nums}.kpi-s{font-size:12px;color:var(--ink3);font-weight:500}.kpi-s.green{color:var(--green)}.kpi-s.amber{color:var(--amber)}.kpi-s.red{color:var(--red)}.pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:2px 9px;border-radius:20px;background:var(--line2);color:var(--ink2);white-space:nowrap}.pill i{width:6px;height:6px;border-radius:50%;background:currentColor}.pill.green{background:var(--green-soft);color:var(--green)}.pill.amber{background:var(--amber-soft);color:var(--amber)}.pill.red{background:var(--red-soft);color:var(--red)}.pill.blue{background:var(--blue-soft);color:var(--blue)}.pill.violet{background:var(--violet-soft);color:var(--violet)}.pill.dark{background:var(--ink);color:#fff}.bar{height:8px;border-radius:6px;background:var(--line2);overflow:hidden;min-width:60px}.bar.thin{height:5px}.bar .fill{height:100%;border-radius:6px;background:var(--accent)}.fill.green{background:var(--green)}.fill.red{background:var(--red)}.fill.amber{background:var(--amber)}.fill.ink{background:var(--ink)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:10px;border:1px solid var(--line);background:var(--panel);font-weight:600;cursor:pointer;text-decoration:none;white-space:nowrap;min-height:36px}.btn:hover{border-color:#d6d2c7}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.dark{background:var(--ink);border-color:var(--ink);color:#fff}.btn.ghost{border-color:transparent;background:none}.btn.danger{color:var(--red)}.btn.sm{padding:4px 10px;min-height:28px;font-size:12px}.btn.block{width:100%}.link{background:none;border:0;color:var(--blue);cursor:pointer;padding:0;font-weight:500;text-decoration:none}.tabs{display:flex;gap:22px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto;scrollbar-width:none}.tabs button{border:0;background:none;padding:9px 0;color:var(--ink3);font-weight:600;font-size:14px;cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap}.tabs button.on{color:var(--ink);border-bottom-color:var(--accent)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--panel)}.seg button{border:0;background:none;padding:6px 12px;cursor:pointer;font-weight:600;color:var(--ink2)}.seg button.on{background:var(--ink);color:#fff}.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.chip{border:1px solid var(--line);background:var(--panel);border-radius:20px;padding:5px 12px;font-weight:600;cursor:pointer;color:var(--ink2);font-size:12px}.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line2);font-size:13px;vertical-align:middle}th{font-size:11px;color:var(--ink3);text-transform:uppercase;letter-spacing:.4px;font-weight:600;position:sticky;top:0;background:var(--panel)}td.r,th.r{text-align:right}tr.grp td{background:#faf9f5;font-weight:650}tr.tot td{font-weight:700;border-top:1px solid var(--line)}tr.click{cursor:pointer}tr.click:hover td{background:#fbfaf6}tr.sel td{background:#fdf3ee}.table-wrap{overflow-x:auto}.field{display:flex;flex-direction:column;gap:4px;min-width:0}.field .lbl{font-size:12px;color:var(--ink2);font-weight:500}.field .hint{font-size:11px;color:var(--ink3)}.ferr{font-size:11px;color:var(--red)}input,select,textarea{border:1px solid var(--line);border-radius:9px;padding:8px 10px;background:var(--panel);min-height:36px;width:100%}input[type=checkbox],input[type=radio]{width:auto;min-height:0;accent-color:var(--accent)}textarea{min-height:80px;resize:vertical}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-grid .span2{grid-column:span 2}.inline-num{width:120px;text-align:right;padding:4px 8px;min-height:30px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1b1a1759;z-index:50;display:grid;place-items:center;padding:16px}.overlay.right{place-items:stretch end;padding:0}.modal{background:var(--panel);border-radius:14px;width:100%;max-width:520px;max-height:92vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0003}.modal.wide{max-width:860px}.modal-h{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid var(--line2)}.modal-b{padding:16px 18px;overflow:auto;display:flex;flex-direction:column;gap:12px}.modal-f{display:flex;gap:8px;justify-content:flex-end;padding:12px 18px;border-top:1px solid var(--line2);flex-wrap:wrap}.x{border:0;background:none;font-size:22px;cursor:pointer;color:var(--ink3);line-height:1;width:32px;height:32px}.drawer{background:var(--panel);width:min(640px,100vw);height:100vh;display:flex;flex-direction:column;box-shadow:-10px 0 40px #0000001f}.drawer-b{padding:16px 20px 40px;overflow:auto;display:flex;flex-direction:column;gap:14px}.toasts{position:fixed;bottom:18px;left:50%;transform:translate(-50%);z-index:100;display:flex;flex-direction:column;gap:8px;width:min(440px,calc(100vw - 32px))}.toast{background:var(--ink);color:#fff;padding:10px 14px;border-radius:10px;font-weight:500;box-shadow:0 8px 24px #0003}.toast.err{background:var(--red)}.toast.ok{background:var(--green)}.empty{padding:30px 16px;text-align:center;display:flex;flex-direction:column;gap:4px}.err-box{background:var(--red-soft);color:var(--red);padding:10px 12px;border-radius:9px;font-weight:500}.warn-box{background:var(--amber-soft);color:#8a5c08;padding:10px 12px;border-radius:9px}.ai-box{background:var(--violet-soft);color:var(--violet);padding:10px 12px;border-radius:9px}.info-box{background:var(--blue-soft);color:var(--blue);padding:10px 12px;border-radius:9px}.spinner{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.list-item{display:flex;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line2)}.list-item:last-child{border-bottom:0}.attn{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:1px solid var(--line2);text-decoration:none}.attn .dotc{width:8px;height:8px;border-radius:50%;margin-top:6px;flex:none}.dotc.red{background:var(--red)}.dotc.amber{background:var(--amber)}.dotc.blue{background:var(--blue)}.dotc.green{background:var(--green)}.phase-row{display:grid;grid-template-columns:160px 1fr 44px;gap:12px;align-items:center;padding:6px 0}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.photo{position:relative;border-radius:10px;overflow:hidden;aspect-ratio:4/3;background:var(--line2);cursor:pointer}.photo img{width:100%;height:100%;object-fit:cover;display:block}.photo .tag{position:absolute;left:8px;bottom:8px;background:#ffffffeb;border-radius:12px;padding:1px 8px;font-size:11px;font-weight:600}.timeline{list-style:none}.timeline li{display:flex;gap:10px;padding:5px 0}.timeline li:before{content:"";width:9px;height:9px;border-radius:50%;background:var(--green);margin-top:5px;flex:none}.timeline li.pending:before{background:none;border:2px solid var(--amber)}.qr{width:200px;height:200px;margin:0 auto;display:block}.auth-page{min-height:100vh;display:grid;place-items:center;padding:16px}.auth-card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:28px 24px;display:flex;flex-direction:column;gap:14px;box-shadow:var(--shadow)}.steps{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.steps span{padding:4px 12px;border-radius:20px;background:var(--line2);font-weight:600;color:var(--ink3);font-size:12px}.steps span.on{background:var(--ink);color:#fff}.steps span.done{background:var(--green-soft);color:var(--green)}.proj-card{display:block;text-decoration:none}.proj-card .pc-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.proj-card .pc-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px;margin-top:10px;font-size:12px}.dark-card{background:var(--ink);color:#fff;border-color:var(--ink)}.dark-card .muted{color:#b9b5ab}.dropzone{border:2px dashed var(--line);border-radius:12px;padding:22px;text-align:center;color:var(--ink2);cursor:pointer;background:#fcfbf8}.dropzone.on{border-color:var(--accent);background:var(--accent-soft)}.split-row{display:grid;grid-template-columns:1fr 1fr 110px 30px;gap:8px;align-items:center}.note-line{padding:8px 10px;border-radius:8px;background:#faf9f5}.note-line.decision{background:var(--green-soft)}.split{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.split-r{grid-template-columns:minmax(0,1fr) minmax(0,1.6fr)}.split-l{grid-template-columns:minmax(170px,230px) minmax(0,1fr)}.ai-row{grid-template-columns:1fr 120px 130px auto;gap:6px;margin-top:8px}.gantt{display:grid;grid-template-columns:340px 1fr;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}.gantt-left{border-right:1px solid var(--line);min-width:0}.gantt-right{overflow-x:auto;position:relative}.g-head{height:40px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 12px;font-size:11px;color:var(--ink3);text-transform:uppercase;font-weight:600;background:#fbfaf7;position:sticky;top:0}.g-row{height:34px;border-bottom:1px solid var(--line2);display:flex;align-items:center;padding:0 12px;gap:8px;white-space:nowrap;overflow:hidden}.g-row.ph{background:#faf9f5;font-weight:650;cursor:pointer}.g-row .nm{overflow:hidden;text-overflow:ellipsis;flex:1}.g-row .who{color:var(--ink3);font-size:12px;max-width:110px;overflow:hidden;text-overflow:ellipsis}.g-canvas{position:relative}.g-scale{height:40px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fbfaf7;z-index:2}.g-scale span{position:absolute;top:12px;font-size:11px;color:var(--ink3);padding-left:4px;white-space:nowrap;border-left:1px solid var(--line2);height:28px}.g-line{position:absolute;top:0;bottom:0;border-left:1px solid var(--line2)}.g-today{position:absolute;top:0;bottom:0;border-left:2px solid var(--red);z-index:3}.g-trow{height:34px;border-bottom:1px solid var(--line2);position:relative}.g-trow.ph{background:#faf9f5}.g-bar{position:absolute;top:8px;height:18px;border-radius:5px;background:#f1d2c2;overflow:hidden;cursor:grab;display:flex;align-items:center;justify-content:flex-end;font-size:10px;font-weight:700;color:#8b3410;padding-right:4px;touch-action:none}.g-bar .done{position:absolute;left:0;top:0;bottom:0;background:var(--accent)}.g-bar span{position:relative}.g-bar.complete{background:var(--green);color:#fff}.g-bar.complete .done{background:var(--green)}.g-bar.behind{box-shadow:0 0 0 2px var(--red)}.g-bar.phase{background:var(--ink);height:8px;top:13px;cursor:default}.g-base{position:absolute;top:27px;height:3px;background:#c9c4b8;border-radius:2px}.g-ms{position:absolute;top:10px;width:13px;height:13px;transform:rotate(45deg);background:var(--ink);cursor:pointer}.g-ms.done{background:var(--green)}.g-ms.fail{background:var(--red)}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--ink2);margin-top:10px}.legend i{display:inline-block;width:16px;height:8px;border-radius:3px;margin-right:6px;vertical-align:middle}.day-strip{display:flex;gap:6px;overflow-x:auto;margin-bottom:12px}.day-strip button{min-width:54px;border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:6px;font-weight:600;cursor:pointer}.day-strip button.on{background:var(--ink);color:#fff}.task-card{border-left:4px solid var(--accent)}.task-card.late{border-left-color:var(--red)}.task-card.done{border-left-color:var(--green)}.task-card.Inspection{border-left-color:var(--amber)}@media (max-width: 900px){.g4,.g5{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:1fr}.gantt{grid-template-columns:180px 1fr}.g-row .who{display:none}}@media (max-width: 760px){body{font-size:14px}.app{grid-template-columns:1fr}.side{display:none}.top{padding:10px 14px}.top .crumbs{flex:1}.top .search,.top .hide-m{display:none}.page{padding:14px 14px 96px}.g2,.g4,.g5,.form-grid,.split,.split-r,.split-l,.ai-row{grid-template-columns:minmax(0,1fr)}.proj-card .pc-meta{grid-template-columns:auto 1fr}.form-grid .span2{grid-column:auto}.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kpi-v{font-size:20px}.bottom-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;background:var(--panel);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom));z-index:30}.bottom-nav a,.bottom-nav button{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--ink3);text-decoration:none;border:0;background:none;min-height:44px;justify-content:center;font-weight:600}.bottom-nav a.on{color:var(--accent)}.bottom-nav .plus{width:52px;height:52px;border-radius:16px;background:var(--accent);color:#fff;font-size:28px;margin:-18px auto 0;box-shadow:0 6px 16px #e2551b66}.btn{min-height:44px}.btn.sm{min-height:34px}.hide-m{display:none!important}.modal{max-height:96vh}.overlay{padding:8px;align-items:end}.drawer{width:100vw}.mcards>*+*{margin-top:10px}.phase-row{grid-template-columns:110px 1fr 40px}.split-row{grid-template-columns:1fr 100px 30px}.split-row .sr-proj{grid-column:span 3}table.mtable thead{display:none}table.mtable tr{display:block;border-bottom:1px solid var(--line2);padding:8px 0}table.mtable td{display:flex;justify-content:space-between;border:0;padding:3px 4px}table.mtable td[data-l]:before{content:attr(data-l);color:var(--ink3);font-size:12px;margin-right:10px}}@media (min-width: 761px){.show-m{display:none!important}}
