:root{--ink:#183334;--muted:#6a7978;--line:#dce4e1;--paper:#f5f7f4;--white:#fff;--teal:#1f6c6b;--teal-dark:#143f42;--gold-soft:#f7ead6;--plum:#75546f;--blue:#456b8e;--shadow:0 18px 55px rgba(25,60,59,.09)}
*{box-sizing:border-box}html{min-width:320px;background:var(--paper)}body{margin:0;color:var(--ink);background:var(--paper);font-family:"Noto Sans TC",system-ui,sans-serif;font-size:16px;line-height:1.5}button,input,select,textarea{font:inherit}button{color:inherit;cursor:pointer}.app-shell{min-height:100vh}
.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;width:244px;display:flex;flex-direction:column;padding:28px 18px 22px;color:#eff8f5;background:var(--teal-dark)}.brand{display:flex;align-items:center;gap:13px;padding:0 10px 30px}.brand strong{display:block;font:700 1.5rem/1.1 "Shippori Mincho",serif;letter-spacing:.08em}.brand small{display:block;margin-top:4px;color:#bcd0cc;font-size:.74rem;letter-spacing:.08em}.brand-mark{width:38px;height:42px;display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:5px;border:1px solid #ffffff40;border-radius:2px}.brand-mark span{border:1px solid #d4a95a}.main-nav{display:grid;gap:8px}.nav-item{width:100%;display:flex;align-items:center;gap:14px;border:0;border-radius:5px;padding:13px 14px;color:#bdcdca;background:transparent;text-align:left;font-weight:500}.nav-item span{color:#799795;font-size:.72rem}.nav-item:hover,.nav-item.active{color:#fff;background:#ffffff1a}.nav-item.active span{color:#e0b96f}.sidebar-note{margin:auto 8px 18px;padding:14px;display:flex;gap:11px;border:1px solid #ffffff1c;background:#ffffff0b;border-radius:6px}.sidebar-note strong,.sidebar-note small{display:block}.sidebar-note strong{font-size:.78rem}.sidebar-note small{margin-top:2px;color:#9eb5b1;font-size:.68rem}.live-dot{width:7px;height:7px;margin-top:5px;flex:none;border-radius:50%;background:#7fc5a9;box-shadow:0 0 0 4px #7fc5a91f}.user-card{display:grid;grid-template-columns:36px 1fr auto;gap:10px;align-items:center;padding:12px 8px 0;border-top:1px solid #ffffff1f}.user-card strong,.user-card small{display:block}.user-card strong{font-size:.82rem}.user-card small{color:#9eb5b1;font-size:.7rem}.user-card button{border:0;color:#a5bab6;background:transparent;font-size:1.2rem}.avatar{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;color:var(--teal-dark);background:#e4c484;font-weight:700;font-size:.8rem}.avatar.teal{color:#fff;background:#4c8985}.avatar.gold{background:#e6c78d}.avatar.navy{color:#fff;background:#526f7e}
.main-content{min-height:100vh;margin-left:244px;padding:0 34px 48px}.topbar{min-height:112px;display:flex;align-items:center;gap:24px;border-bottom:1px solid var(--line)}.topbar h1{margin:2px 0 0;font:700 clamp(1.55rem,2vw,2rem)/1.2 "Shippori Mincho",serif}.eyebrow,.section-kicker{margin:0;color:var(--teal);font-size:.72rem;font-weight:700;letter-spacing:.14em}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:10px}.search-box{width:min(28vw,330px);height:42px;display:flex;align-items:center;gap:9px;padding:0 11px;border:1px solid var(--line);border-radius:5px;color:#7b8987;background:#fff}.search-box input{width:100%;min-width:0;border:0;outline:0;color:var(--ink);background:transparent;font-size:.83rem}.search-box kbd{padding:2px 6px;border:1px solid #d9dfdd;border-radius:3px;color:#8d9997;background:#f7f8f7;font:500 .64rem/1.5 sans-serif;white-space:nowrap}.primary-button,.ghost-button{min-height:42px;border-radius:4px;padding:0 16px;font-size:.83rem;font-weight:600;transition:.18s;white-space:nowrap}.primary-button{border:1px solid var(--teal-dark);color:#fff;background:var(--teal-dark);box-shadow:0 7px 18px #143f4229}.primary-button:hover{transform:translateY(-1px);background:#205659}.ghost-button{border:1px solid #cdd9d6;color:var(--ink);background:#fff}.ghost-button:hover{border-color:#94aaa6}.mobile-menu{display:none;border:0;background:transparent;font-size:1.35rem}
.view{display:none;padding-top:26px}.view.active{display:block}.metrics-grid{display:grid;grid-template-columns:1.1fr repeat(3,1fr);gap:14px}.metric-card{min-height:146px;padding:18px 19px;border:1px solid var(--line);border-radius:6px;background:#fff;box-shadow:0 7px 24px #18333409}.metric-card.featured{color:#fff;background:var(--teal);border-color:var(--teal)}.metric-heading{display:flex;align-items:center;justify-content:space-between;font-size:.76rem;color:var(--muted);font-weight:600}.featured .metric-heading{color:#d7e9e6}.metric-tag{padding:3px 7px;border-radius:20px;color:#d9eee8;background:#ffffff21;font-size:.62rem}.metric-icon{width:24px;height:24px;display:grid;place-items:center;border-radius:50%;font-size:.75rem;font-weight:700}.metric-icon.amber{color:#966321;background:var(--gold-soft)}.metric-icon.blue{color:var(--blue);background:#e6eef4}.metric-icon.plum{color:var(--plum);background:#efe8ed}.metric-value{display:flex;align-items:baseline;gap:5px;margin-top:13px}.metric-value strong{font:700 clamp(1.65rem,2.5vw,2.25rem)/1 "Shippori Mincho",serif}.metric-value small{opacity:.72;font-size:.72rem}.metric-card p{margin:10px 0 0;color:var(--muted);font-size:.72rem}.featured p{color:#c7ddda}.mini-bars{display:flex;align-items:end;gap:5px;height:17px;margin-top:9px}.mini-bars i{width:15px;height:35%;background:#ffffff42}.mini-bars i:nth-child(2),.mini-bars i:nth-child(5){height:65%}.mini-bars i:nth-child(3),.mini-bars i:nth-child(6){height:90%}.mini-bars i:nth-child(4){height:50%}.mini-bars i:nth-child(7){height:75%}
.workspace-grid{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(260px,.7fr);gap:14px;margin-top:14px}.panel{border:1px solid var(--line);border-radius:6px;background:#fff;box-shadow:var(--shadow)}.panel-head{min-height:78px;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:17px 20px;border-bottom:1px solid var(--line)}.panel-head h2{margin:0;font:700 1.04rem/1.35 "Shippori Mincho",serif}.panel-head p{margin:4px 0 0;color:var(--muted);font-size:.72rem}.date-switcher{display:flex;align-items:center;gap:9px;font-size:.74rem;white-space:nowrap}.date-switcher button{width:25px;height:25px;border:1px solid var(--line);border-radius:3px;background:#fff}.status-tabs{display:flex;gap:4px;padding:12px 16px 0;overflow-x:auto;border-bottom:1px solid var(--line)}.status-tabs button{position:relative;border:0;padding:8px 10px 12px;color:var(--muted);background:transparent;font-size:.74rem;white-space:nowrap}.status-tabs button.active{color:var(--teal-dark);font-weight:700}.status-tabs button.active:after{content:"";position:absolute;height:2px;inset:auto 8px -1px;background:var(--teal)}.status-tabs b{font-size:.68rem}.booking-list{padding:6px 16px 13px}.booking-row{display:grid;grid-template-columns:74px minmax(170px,1fr) minmax(165px,.9fr) auto;align-items:center;gap:16px;min-height:92px;border-bottom:1px solid #e8eeec;animation:row-in .24s ease both}@keyframes row-in{from{opacity:0;transform:translateY(4px)}}.booking-time strong{display:block;font:700 1rem/1.2 "Shippori Mincho",serif}.booking-time small{color:var(--muted);font-size:.66rem}.customer{min-width:0}.customer strong{display:flex;align-items:center;gap:8px;font-size:.84rem}.customer small,.job-info small{display:block;margin-top:5px;color:var(--muted);font-size:.69rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.job-code{padding:2px 5px;color:#60716f;background:#edf1f0;border-radius:2px;font:600 .61rem/1.4 monospace}.job-info b{display:block;font-size:.78rem}.job-info small{max-width:210px}.status-control{min-width:100px;border:1px solid transparent;border-radius:4px;padding:8px 10px;font-size:.71rem;font-weight:700}.status-control.pending{color:#8c5d21;background:var(--gold-soft);border-color:#eed6b5}.status-control.confirmed{color:#365e7d;background:#e6eef4}.status-control.progress{color:#1b6863;background:#def0eb}.status-control.done{color:#63716e;background:#edf1f0}.empty-state{padding:60px 20px;text-align:center}.empty-state h3{margin:13px 0 3px;font-size:.9rem}.empty-state p{margin:0;color:var(--muted);font-size:.74rem}
.outline-tag{padding:4px 8px;border:1px solid var(--line);border-radius:3px;color:var(--muted);font-size:.65rem}.timeline{padding:12px 18px 7px}.timeline-row{display:grid;grid-template-columns:42px 14px 1fr;gap:8px;min-height:62px}.timeline-row time{color:var(--muted);font-size:.67rem}.timeline-row>span{position:relative;width:7px;height:7px;margin-top:3px;border:2px solid #bcc9c6;border-radius:50%;background:#fff}.timeline-row>span:after{content:"";position:absolute;width:1px;height:49px;top:7px;left:1px;background:#dce4e1}.timeline-row:last-child>span:after{display:none}.timeline-row.active>span{border-color:var(--teal);background:var(--teal);box-shadow:0 0 0 4px #e3efec}.timeline-row.past>span{background:#6e837f}.timeline-row b,.timeline-row small{display:block}.timeline-row b{font-size:.75rem}.timeline-row small{color:var(--muted);font-size:.65rem}.crew-block{margin:0 18px 18px;padding-top:15px;border-top:1px solid var(--line)}.crew-head{display:flex;justify-content:space-between}.crew-head h3{margin:0;font-size:.77rem}.crew-head span{color:var(--muted);font-size:.65rem}.crew-row{display:grid;grid-template-columns:34px 1fr auto;gap:9px;align-items:center;padding:8px 0}.crew-row .avatar{width:32px;height:32px}.crew-row b,.crew-row small{display:block}.crew-row b{font-size:.72rem}.crew-row small,.availability{font-size:.62rem}.crew-row small{color:var(--muted)}.availability{color:#36715f;font-weight:700}.availability.busy{color:#9a6c2d}
.section-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding:8px 2px 24px}.section-toolbar h2{margin:4px 0 0;font:700 1.75rem/1.2 "Shippori Mincho",serif}.section-toolbar p{margin:7px 0 0;color:var(--muted);font-size:.78rem}.cash-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:14px}.cash-summary article{padding:20px;border:1px solid var(--line);border-radius:6px;background:#fff}.cash-summary span,.cash-summary small{display:block;color:var(--muted);font-size:.7rem}.cash-summary strong{display:block;margin:11px 0 8px;font:700 1.65rem/1 "Shippori Mincho",serif}.cash-summary .cash-balance{color:#fff;border-color:var(--teal);background:var(--teal)}.cash-summary .cash-balance span,.cash-summary .cash-balance small{color:#d2e6e2}.cash-table-panel .panel-head{border-bottom:0}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:.76rem}th{color:var(--muted);background:#f7f9f8;font-size:.66rem;text-align:left}th,td{padding:14px 20px;border-top:1px solid var(--line);white-space:nowrap}.money{text-align:right}.expense-state{padding:4px 8px;border-radius:20px;font-size:.64rem;font-weight:600}.expense-state.pending{color:#95611f;background:var(--gold-soft)}.expense-state.done{color:#2c6d5e;background:#e0efe9}
.permission-layout{display:grid;grid-template-columns:minmax(260px,.7fr) minmax(0,1.5fr);gap:14px}.role-list{padding:8px;align-self:start}.role-item{width:100%;display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:14px 12px;border:0;border-radius:5px;background:transparent;text-align:left}.role-item:hover,.role-item.active{background:#eef3f1}.role-item strong,.role-item small{display:block}.role-item strong{font-size:.8rem}.role-item small{color:var(--muted);font-size:.67rem}.role-symbol{width:40px;height:40px;display:grid;place-items:center;border-radius:4px;color:#fff;background:var(--teal-dark);font-size:.76rem;font-weight:700}.role-symbol.teal{background:#4d8884}.role-symbol.gold{color:#5d421c;background:#e4c17e}.role-symbol.plum{background:#80677b}.permission-group{padding:21px;border-bottom:1px solid var(--line)}.permission-group h3{margin:0 0 10px;color:var(--teal);font-size:.72rem}.permission-group label{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:center;padding:11px 0}.permission-group b,.permission-group small{display:block}.permission-group b{font-size:.78rem}.permission-group small{color:var(--muted);font-size:.68rem}.permission-group input{position:absolute;opacity:0}.switch{position:relative;width:38px;height:21px;border-radius:20px;background:#cfd8d5}.switch:after{content:"";position:absolute;top:3px;left:3px;width:15px;height:15px;border-radius:50%;background:#fff;transition:.2s}.permission-group input:checked+.switch{background:var(--teal)}.permission-group input:checked+.switch:after{transform:translateX(17px)}
