:root{--pink:#aaa8a1;--soft-pink:#c2c1bc;--light-pink:#dbdad7;--blue:#78756d;--soft-blue:#c2c1bc;--light-blue:#f3f3f2;--sage:#78756d;--light-sage:#dbdad7;--cream:#f3f3f2;--bg:#f8f8f7;--dark:#37352f;--medium:#5a5248;--gray:#9b9a97;--amber:#78756d;--light-amber:#dbdad7;--danger:#b5544a;--danger-bg:#fbedeb;--danger-border:#ebc9c4;--radius:14px;--radius-sm:8px;--shadow:0 1px 2px rgba(55,53,47,0.06),0 2px 8px rgba(55,53,47,0.06);--border:rgba(55,53,47,0.12);--border-soft:rgba(55,53,47,0.06)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Noto Sans TC,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--dark);-webkit-font-smoothing:antialiased;min-height:100vh}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px}.app{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--cream);border-right:1px solid rgba(55,53,47,.08);display:flex;flex-direction:column;padding:20px 12px;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto}.brand{font-weight:900;font-size:18px;padding:6px 10px 18px;color:var(--dark);display:flex;align-items:center;gap:8px}.brand .dot{width:10px;height:10px;border-radius:50%;background:var(--pink);display:inline-block}.nav-group{margin-bottom:6px}.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-sm);font-weight:500;font-size:14.5px;color:var(--medium);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s;border:none;background:transparent;width:100%;text-align:left}.nav-item .ico{font-size:16px;width:18px;text-align:center}.nav-item:hover{background:var(--light-pink)}.nav-item.active{background:var(--soft-pink);color:var(--dark);font-weight:700}.subnav{display:flex;flex-direction:column;gap:2px;margin:2px 0 10px 26px;border-left:2px solid var(--soft-pink);padding-left:10px}.subnav-item{padding:6px 8px;font-size:13px;color:var(--gray);border-radius:6px;cursor:pointer;background:none;border:none;text-align:left;font-family:inherit;display:block}.subnav-item:hover{color:var(--dark);background:var(--light-pink)}.subnav-item.active{color:var(--pink);font-weight:700;background:var(--light-pink)}.sidebar-footer{margin-top:auto;padding-top:12px;display:flex;flex-direction:column;gap:6px}.mini-btn{font-size:12.5px;padding:8px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:#fff;color:var(--medium);font-weight:500;text-align:center}.mini-btn:hover{border-color:var(--pink);color:var(--pink)}.main{flex:1 1;min-width:0;padding:26px 32px 60px}.page-header{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:20px}.page-title{font-size:22px;font-weight:900}.page-sub{font-size:13px;color:var(--gray);margin-top:4px}.header-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{padding:9px 16px;border-radius:999px;border:none;font-weight:700;font-size:13.5px;display:inline-flex;align-items:center;gap:6px;transition:transform .1s,opacity .15s}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--dark);color:#fff}.btn-primary:hover:not(:disabled){opacity:.88}.btn-soft{background:var(--light-pink);color:var(--dark)}.btn-soft:hover:not(:disabled){background:var(--soft-pink)}.btn-outline{background:#fff;border:1px solid rgba(55,53,47,.15);color:var(--medium)}.btn-outline:hover:not(:disabled){border-color:var(--pink);color:var(--pink)}.btn-ghost{background:transparent;color:var(--gray);padding:6px 10px}.btn-ghost:hover:not(:disabled){color:var(--dark)}.btn-sm{padding:6px 12px;font-size:12.5px}.btn-danger{background:#fff;color:var(--danger);border:1px solid var(--danger-border)}.btn-danger:hover:not(:disabled){background:var(--danger-bg)}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:14px;gap:14px;margin-bottom:24px}.stat-card{background:#fff;border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);border-top:3px solid var(--soft-pink)}.stat-card.blue{border-top-color:var(--soft-blue)}.stat-card.sage{border-top-color:var(--sage)}.stat-card.amber{border-top-color:var(--amber)}.stat-label{font-size:12.5px;color:var(--gray);font-weight:500;margin-bottom:8px}.stat-value{font-size:28px;font-weight:900;color:var(--dark)}.stat-hint{font-size:11.5px;color:var(--gray);margin-top:4px}.section-block{background:#fff;border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:20px}.section-title{font-size:15px;font-weight:700;margin-bottom:14px;justify-content:space-between}.section-title,.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.toolbar{margin-bottom:16px}.search-box{flex:1 1;min-width:180px;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--border);border-radius:999px;padding:8px 14px}.search-box input{border:none;outline:none;flex:1 1;background:transparent;font-size:13.5px}.filter-chip{padding:7px 13px;border-radius:999px;border:1px solid var(--border);background:#fff;font-size:12.5px;color:var(--medium);font-weight:500}.filter-chip.active{background:var(--dark);color:#fff;border-color:var(--dark)}select.filter-select{padding:8px 12px;border-radius:999px;border:1px solid var(--border);background:#fff;color:var(--medium)}.table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse}.data-table th{text-align:left;font-size:11.5px;letter-spacing:.03em;color:var(--gray);padding:8px 10px;border-bottom:1px solid rgba(55,53,47,.1);font-weight:700;white-space:nowrap}.data-table td{padding:12px 10px;border-bottom:1px solid var(--border-soft);font-size:13.5px;vertical-align:top}.data-table tr:hover td{background:var(--light-pink)}.data-table td.num,.data-table th.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.tag{display:inline-block;background:var(--light-sage);color:#3b3935;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:700;margin:2px 3px 2px 0}.tag.pink{background:var(--light-pink)}.tag.blue{background:var(--light-blue)}.tag.amber{background:var(--light-amber)}.badge{padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:700;display:inline-block}.badge.ongoing{background:var(--light-blue);color:#3b3935}.badge.done{background:var(--light-sage);color:#3b3935}.badge.draft,.badge.paused{background:#f0ede8;color:var(--gray)}.badge.low{background:var(--danger-bg);color:var(--danger)}.empty-state{text-align:center;padding:50px 20px;color:var(--gray)}.empty-state .big{font-size:34px;margin-bottom:8px}.material-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));grid-gap:14px;gap:14px}.material-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;transition:transform .12s,box-shadow .12s}.material-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(55,53,47,.12)}.material-card .thumb{height:110px;background:var(--light-pink);display:flex;align-items:center;justify-content:center;font-size:34px;position:relative;overflow:hidden}.material-card .thumb svg{display:block;width:100%;height:100%}.material-card .thumb img{width:100%;height:100%;object-fit:cover}.material-card .body{padding:12px 14px 14px;display:flex;flex-direction:column;gap:6px;flex:1 1}.material-card .name{font-weight:700;font-size:14.5px;line-height:1.35}.material-card .meta{font-size:11.5px;color:var(--gray)}.material-card .dots{font-size:11px;color:var(--medium);letter-spacing:1px}.material-card .tags{margin-top:auto;padding-top:4px}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:14px;gap:14px}.form-grid .full{grid-column:1/-1}.field label{display:block;font-size:12.5px;font-weight:700;color:var(--medium);margin-bottom:6px}.field input,.field select,.field textarea{width:100%;padding:9px 12px;border:1px solid rgba(55,53,47,.15);border-radius:var(--radius-sm);background:var(--bg);outline:none}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--pink);background:#fff}.field textarea{resize:vertical;min-height:60px}.field .hint{font-size:11px;color:var(--gray);margin-top:4px;line-height:1.6}.checkbox-row{display:flex;gap:10px;flex-wrap:wrap;padding-top:4px}.checkbox-row label{gap:5px;font-size:13px;color:var(--medium);font-weight:500;white-space:nowrap}.checkbox-row label,.range-row{display:flex;align-items:center}.range-row{gap:10px}.range-row input[type=range]{flex:1 1;accent-color:var(--pink)}.range-val{font-weight:700;font-size:13px;width:20px;text-align:center}.tag-picker{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border:1px solid rgba(55,53,47,.15);border-radius:var(--radius-sm);background:var(--bg);min-height:42px}.tag-toggle{background:#fff;border:1px solid var(--border);color:var(--medium);padding:4px 11px;border-radius:999px;font-size:12px;font-weight:500}.tag-toggle.on{background:var(--soft-pink);border-color:var(--soft-pink);color:#3b3935;font-weight:700}.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.overlay{position:fixed;inset:0;background:rgba(55,53,47,.4);display:flex;align-items:flex-start;justify-content:center;z-index:100;padding:30px 16px;overflow-y:auto}.modal{background:#fff;border-radius:var(--radius);width:100%;max-width:640px;padding:26px 26px 22px;box-shadow:0 10px 40px rgba(0,0,0,.18)}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.modal-title{font-size:17px;font-weight:900}.modal-close{background:none;border:none;font-size:20px;color:var(--gray);line-height:1}.modal-close:hover{color:var(--dark)}.calc-note{border:1px dashed var(--border);border-radius:var(--radius-sm);padding:0;margin-top:10px;background:var(--light-blue)}.calc-note summary{cursor:pointer;padding:9px 12px;font-size:12px;font-weight:700;color:var(--medium);list-style:none}.calc-note summary::-webkit-details-marker{display:none}.calc-note summary:before{content:"ⓘ "}.calc-note .content{padding:0 12px 12px;font-size:12px;line-height:1.85;color:var(--medium)}.calc-note code{background:#fff;padding:1px 5px;border-radius:4px;font-size:11.5px}.kv-row{display:flex;justify-content:space-between;gap:12px;font-size:13px;padding:5px 0}.kv-row.total{font-size:16px;margin-top:8px;padding-top:10px;border-top:1px dashed rgba(55,53,47,.2);font-weight:700}.kv-row .neg{color:var(--danger)}.alert{padding:12px 14px;border-radius:var(--radius-sm);font-size:12.5px;line-height:1.7;margin-bottom:14px}.alert.warn{background:var(--danger-bg);border:1px solid var(--danger-border);color:#7d3b34}.alert.info{background:var(--light-blue);border:1px solid var(--border);color:var(--medium)}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--dark);color:#fff;padding:11px 20px;border-radius:999px;font-size:13px;font-weight:500;z-index:200;box-shadow:0 6px 20px rgba(0,0,0,.2)}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:34px 30px;width:100%;max-width:400px}.mobile-topbar{display:none;align-items:center;justify-content:space-between;padding:14px 16px;background:var(--cream);border-bottom:1px solid rgba(55,53,47,.08);position:-webkit-sticky;position:sticky;top:0;z-index:50}.hamburger{background:none;border:none;font-size:20px;color:var(--dark);padding:4px 8px}@media (max-width:880px){.sidebar{position:fixed;left:-260px;top:0;z-index:90;width:240px;transition:left .2s;box-shadow:0 0 30px rgba(0,0,0,.15)}.sidebar.open{left:0}.mobile-topbar{display:flex}.main{padding:18px 14px 50px}.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.3);z-index:80}.form-grid{grid-template-columns:1fr}.page-title{font-size:19px}.material-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}}.formula-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:14px;gap:14px}.formula-card{background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;display:flex;flex-direction:column;gap:8px}.fc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.fc-name{font-weight:700;font-size:15px;line-height:1.35}.fc-name:hover{color:var(--pink)}.fc-meta{display:flex;flex-wrap:wrap;gap:2px}.fc-line{font-size:12px;color:var(--medium)}.fc-line.dim{color:var(--gray)}.fc-actions{display:flex;gap:6px;margin-top:auto;padding-top:8px;flex-wrap:wrap}.note-bar{display:flex;height:8px;border-radius:999px;overflow:hidden;background:var(--light-pink)}.note-bar .seg{height:100%}.note-bar .seg.top{background:#c8cfc2}.note-bar .seg.mid{background:#aaa8a1}.note-bar .seg.base{background:#78756d}.editor-layout{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);grid-gap:18px;gap:18px;align-items:start}@media (max-width:1100px){.editor-layout{grid-template-columns:1fr}}.item-row{display:grid;grid-template-columns:minmax(0,1fr) 92px 30px;grid-gap:8px;gap:8px;align-items:center;padding:6px 0;border-bottom:1px solid var(--border-soft)}.item-row .mat-name{font-size:13.5px;font-weight:500;min-width:0}.item-row .mat-sub{font-size:11px;color:var(--gray);margin-top:1px}.item-row input[type=number]{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:6px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.item-row .rm{background:none;border:none;color:var(--gray);font-size:15px;padding:4px}.item-row .rm:hover{color:var(--danger)}.total-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0 4px;font-weight:700;font-size:14px}.total-row .off{color:var(--danger)}.total-row .ok{color:#4a7c4e}.option-card{border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px;margin-bottom:12px;background:#fff;transition:border-color .15s}.option-card.selected{border-color:var(--pink);box-shadow:0 0 0 2px var(--light-pink)}.option-card .opt-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px}.option-card .opt-label{font-weight:700;font-size:14px}.option-card .opt-body{font-size:12.5px;color:var(--medium);line-height:1.75}.change-list{margin-top:10px;font-size:12px;border-top:1px dashed var(--border);padding-top:8px}.change-list .chg{padding:4px 0;display:flex;gap:6px;align-items:baseline}.change-list .chg .op{flex-shrink:0;font-weight:700;width:30px}.change-list .chg .op.add{color:#4a7c4e}.change-list .chg .op.remove{color:var(--danger)}.change-list .chg .op.adjust{color:var(--medium)}.task-add{display:grid;grid-template-columns:minmax(0,1fr) 150px 190px auto;grid-gap:10px;gap:10px;align-items:center}.task-add input,.task-add select{padding:9px 12px;border:1px solid rgba(55,53,47,.15);border-radius:var(--radius-sm);background:var(--bg);outline:none;width:100%}.task-add input:focus,.task-add select:focus{border-color:var(--pink);background:#fff}@media (max-width:880px){.task-add{grid-template-columns:1fr}}.task-row{display:flex;align-items:flex-start;gap:12px;padding:11px 2px;border-bottom:1px solid var(--border-soft)}.task-row:last-child{border-bottom:none}.task-row input[type=checkbox]{margin-top:3px;width:16px;height:16px;accent-color:var(--pink);flex-shrink:0}.task-body{flex:1 1;min-width:0}.task-title{font-size:14px;line-height:1.5}.task-title.done{text-decoration:line-through;color:var(--gray)}.task-meta{font-size:11.5px;color:var(--gray);margin-top:3px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}.task-meta .overdue{color:var(--danger);font-weight:700}.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-gap:1px;gap:1px;background:var(--border-soft);border:1px solid var(--border-soft);border-radius:var(--radius-sm);overflow:hidden}.cal-head{background:var(--light-blue);padding:8px 4px;text-align:center;font-size:12px;font-weight:700;color:var(--medium)}.cal-cell{background:#fff;min-height:96px;padding:5px 6px;display:flex;flex-direction:column;gap:3px}.cal-cell.outside{background:#fbfbfa}.cal-cell.outside .cal-date{color:#cfcecb}.cal-cell.today{background:var(--light-pink)}.cal-cell.today .cal-date{font-weight:900;color:var(--dark)}.cal-date{font-size:11.5px;color:var(--medium);font-weight:700;margin-bottom:1px}.cal-item{font-size:10.5px;line-height:1.35;padding:2px 5px;border-radius:4px;background:var(--light-blue);color:var(--medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.cal-item:hover{background:var(--soft-pink);color:var(--dark)}.cal-item.task{background:#e6e9e2}.cal-item.task.done{background:#f1f0ee;color:var(--gray);text-decoration:line-through}.cal-item.formula{background:var(--light-pink)}.cal-item.report{background:#ecebe6}.cal-more{font-size:10px;color:var(--gray);padding-left:5px}.cal-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--gray);margin-top:12px}@media (max-width:880px){.cal-cell{min-height:62px}.cal-item{font-size:9px}}.insp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:14px;gap:14px}.insp-card{background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;display:flex;flex-direction:column;gap:7px}.insp-title{font-weight:700;font-size:14.5px;line-height:1.4}.insp-body{font-size:12.5px;color:var(--medium);line-height:1.7}.insp-actions{display:flex;gap:6px;margin-top:auto;padding-top:8px;flex-wrap:wrap}.note-column{border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:12px;background:var(--bg)}.note-column h4{font-size:12.5px;color:var(--medium);margin-bottom:8px}.note-column .n-item{font-size:12px;padding:5px 0;border-bottom:1px dashed var(--border-soft);line-height:1.6}.note-column .n-item:last-child{border-bottom:none}.note-column .n-item .missing{color:var(--danger);font-size:11px}.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}.bar-label{width:96px;font-size:12.5px;color:var(--medium);flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-track{flex:1 1;background:var(--light-pink);border-radius:999px;height:12px;overflow:hidden}.bar-fill{height:100%;background:var(--pink);border-radius:999px}.bar-count{width:32px;text-align:right;font-size:12px;color:var(--gray);flex-shrink:0;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.skel{background:linear-gradient(90deg,#eeedea 25%,#f6f5f3 50%,#eeedea 75%);background-size:200% 100%;border-radius:6px;animation:skel-shimmer 1.4s ease-in-out infinite}@keyframes skel-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.spinner{display:inline-block;border:2px solid var(--light-pink);border-top-color:var(--pink);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(1turn)}}.ai-progress{margin-top:14px;padding:14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--light-blue)}.ai-progress .head{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:700;color:var(--medium)}.ai-progress .steps{margin-top:10px;font-size:12px;color:var(--gray);line-height:1.9}.ai-progress .steps .step{display:flex;align-items:center;gap:7px}.ai-progress .steps .step.done{color:var(--medium)}.ai-progress .steps .step.active{color:var(--dark);font-weight:700}.ai-progress .track{margin-top:12px;height:4px;border-radius:999px;background:var(--light-pink);overflow:hidden}.ai-progress .track .fill{height:100%;background:var(--pink);border-radius:999px;transition:width .6s ease}.ai-progress .elapsed{margin-top:8px;font-size:11px;color:var(--gray);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (prefers-reduced-motion:reduce){.ai-progress .track .fill,.skel,.spinner{animation:none;transition:none}}.material-card .thumb-badge{position:absolute;left:8px;bottom:8px;padding:2px 7px;border-radius:999px;font-size:10px;line-height:1.6;letter-spacing:.02em;color:#fff;background:rgba(30,28,26,.55);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);pointer-events:none}