@import"https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@400;500;600&family=Noto+Sans+TC:wght@400;500;600;700&display=swap";@import"https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;600;700&family=Noto+Serif+TC:wght@400;600;700&display=swap";.fm-page{--primary: #1FAE9F;--primary-dark: #178478;--primary-soft: #D4F0EC;--accent: #2DC7B5;--bg: #F4F8F7;--card: #ffffff;--border: #DEE8E6;--text: #0E3B37;--text-mute: #6B8682;--shadow: 0 1px 3px rgba(20,80,70,.06), 0 1px 2px rgba(20,80,70,.04)}.fm-page *{box-sizing:border-box}.fm-page{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-touch-callout:none}.fm-page input,.fm-page textarea{-webkit-user-select:text;-moz-user-select:text;user-select:text}.fm-page img{-webkit-user-drag:none;user-drag:none;pointer-events:none}.fm-page{margin:0;font-family:Noto Sans TC,Microsoft JhengHei,PingFang TC,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.6}.fm-page header{background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff;padding:20px 0;box-shadow:var(--shadow)}.fm-page .container{max-width:1200px;margin:0 auto;padding:0 20px}.fm-page header .header-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.fm-page header .brand{display:flex;align-items:center;gap:12px}.fm-page header h1{font-size:24px;font-weight:600;margin:0}.fm-page header .subtitle{font-size:13px;opacity:.85;margin-top:4px}.fm-page .tabs{display:flex;gap:4px;background:#ffffff24;padding:4px;border-radius:30px}.fm-page .tabs button{padding:7px 18px;border:none;background:transparent;color:#fff;border-radius:26px;cursor:pointer;font-size:14px;font-weight:500;font-family:inherit;transition:background .15s}.fm-page .tabs button:hover{background:#ffffff1a}.fm-page .tabs button.active{background:#fff;color:var(--primary-dark)}.fm-page .logo-icon{width:56px;height:56px;border-radius:10px;background:#fff;padding:4px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000001f;overflow:hidden}.fm-page .logo-icon img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;border-radius:6px}.fm-page .search-hero{background:#fff;padding:32px 20px;border-bottom:1px solid var(--border)}.fm-page .search-box{max-width:800px;margin:0 auto;position:relative}.fm-page .search-box input{width:100%;font-size:16px;padding:14px 50px 14px 20px;border:2px solid var(--border);border-radius:30px;outline:none;transition:border-color .2s,box-shadow .2s;background:#fff}.fm-page .search-box input:focus{border-color:var(--primary);box-shadow:0 0 0 4px #1e60911a}.fm-page .search-box .search-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:42px;height:42px;border-radius:50%;border:none;background:var(--primary);color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center}.fm-page .hint{max-width:800px;margin:12px auto 0;font-size:13px;color:var(--text-mute);text-align:center}.fm-page main{padding:24px 20px}.fm-page .layout{display:grid;grid-template-columns:240px 1fr;gap:24px}@media (max-width: 768px){.fm-page .layout{grid-template-columns:1fr}}.fm-page aside{background:var(--card);border-radius:10px;box-shadow:var(--shadow);padding:0;position:sticky;top:20px;max-height:calc(100vh - 40px);display:flex;flex-direction:column;overflow:hidden}.fm-page aside h3{flex-shrink:0;font-size:14px;margin:0;color:var(--text-mute);text-transform:uppercase;letter-spacing:.5px;font-weight:600;padding:16px 16px 10px;border-bottom:1px solid var(--border);background:var(--card)}.fm-page .cat-scroll{overflow-y:auto;padding:8px;flex:1;scrollbar-width:thin;scrollbar-color:var(--primary-soft) transparent}.fm-page .cat-scroll::-webkit-scrollbar{width:6px}.fm-page .cat-scroll::-webkit-scrollbar-thumb{background:var(--primary-soft);border-radius:3px}.fm-page .cat-scroll::-webkit-scrollbar-thumb:hover{background:var(--primary)}.fm-page .cat-list{list-style:none;padding:0;margin:0}.fm-page .cat-list li{padding:8px 12px;border-radius:6px;cursor:pointer;font-size:14px;transition:background .15s}.fm-page .cat-list li:hover{background:#f1f5f9;background:var(--primary-soft)}.fm-page .cat-list li.active{background:var(--primary);color:#fff}.fm-page .cat-list li.active:hover{background:var(--primary-dark)}.fm-page .toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.fm-page .toolbar .count{font-size:14px;color:var(--text-mute)}.fm-page .toolbar .admin-link{font-size:13px;color:var(--text-mute);text-decoration:none;padding:6px 12px;border-radius:6px}.fm-page .toolbar .admin-link:hover{background:#fff;color:var(--primary)}.fm-page .drug-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.fm-page .drug-card{background:var(--card);border-radius:10px;overflow:hidden;box-shadow:var(--shadow);cursor:pointer;transition:transform .15s,box-shadow .15s;display:flex;flex-direction:column}.fm-page .drug-card:hover{transform:translateY(-2px);box-shadow:0 10px 20px #00000014}.fm-page .drug-card .photo{aspect-ratio:4/3;background:#f1f5f9;display:flex;align-items:center;justify-content:center;color:var(--text-mute);font-size:40px;overflow:hidden}.fm-page .drug-card .photo img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.fm-page .drug-card .info{padding:14px;flex:1}.fm-page .drug-card .info .name-row{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.fm-page .drug-card .info .name-code{font-size:18px;font-weight:700;color:var(--primary-dark);letter-spacing:.3px}.fm-page .drug-card .info .name-zh{font-weight:600;font-size:16px;color:var(--text)}.fm-page .drug-card .info .name-row.has-code .name-zh{font-size:14px;font-weight:500;color:var(--text-mute)}.fm-page .drug-card .info .name-en{font-size:13px;color:var(--text-mute);margin-top:2px}.fm-page .drug-card .info .meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.fm-page .chip{font-size:12px;background:var(--primary-soft);color:var(--primary-dark);padding:2px 8px;border-radius:12px}.fm-page .chip-code{background:#fff;color:var(--text-mute);border:1px solid var(--border);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.fm-page .chip-elite{background:#dc2626;color:#fff;font-weight:600;padding:2px 9px;font-size:12px;box-shadow:0 1px 3px #dc26264d;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fm-page .emp-login-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);display:flex;align-items:center;justify-content:center;padding:20px}.fm-page .emp-login-mask.hidden{display:none}.fm-page .emp-login-box{background:#fff;border-radius:14px;padding:38px 34px;width:100%;max-width:380px;box-shadow:0 20px 50px #00000040;text-align:center}.fm-page .emp-login-box .logo{width:110px;height:110px;border-radius:22px;margin:0 auto 16px;overflow:hidden;box-shadow:0 6px 18px #1fae9f40}.fm-page .emp-login-box .logo img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;display:block}.fm-page .emp-login-box h2{margin:0 0 4px;font-size:19px;color:var(--primary-dark);line-height:1.4}.fm-page .emp-login-box .sub{font-size:13px;color:var(--text-mute);margin-bottom:24px}.fm-page .emp-login-box input{width:100%;box-sizing:border-box;padding:11px 14px;margin-bottom:12px;border:1px solid var(--border);border-radius:8px;font-size:16px;outline:none;font-family:inherit}.fm-page .emp-login-box input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1fae9f1f}.fm-page .emp-login-box button{width:100%;padding:12px;border:none;border-radius:8px;background:var(--primary);color:#fff;font-size:16px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s}.fm-page .emp-login-box button:hover{background:var(--primary-dark)}.fm-page .emp-login-box button:disabled{opacity:.6;cursor:wait}.fm-page .emp-login-err{color:#dc2626;font-size:13px;min-height:20px;margin-top:10px}.fm-page .emp-logout{color:#fff;opacity:.85;font-size:13px;cursor:pointer;padding:4px 10px;border-radius:6px}.fm-page .emp-logout:hover{opacity:1;background:#ffffff1f}.fm-page .set-picker{max-width:800px;margin:12px auto 0;display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.fm-page .set-picker button{padding:8px 20px;border:1px solid var(--border);background:#fff;color:var(--text);border-radius:20px;cursor:pointer;font-size:14.5px;font-weight:600;font-family:inherit}.fm-page .set-picker button:hover{background:var(--primary-soft)}.fm-page .set-picker button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.fm-page .set-card{background:var(--card);border-radius:12px;box-shadow:var(--shadow);padding:24px 26px;max-width:1000px;margin:0 auto}.fm-page .set-head{display:flex;align-items:center;gap:14px;margin-bottom:4px;flex-wrap:wrap}.fm-page .set-head .set-badge{width:56px;height:56px;border-radius:12px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:800;letter-spacing:1px}.fm-page .set-head h2{margin:0;font-size:22px}.fm-page .set-head .set-en{color:var(--text-mute);font-size:13px;margin-top:2px}.fm-page .set-head .set-usage{margin-left:auto;text-align:right;font-size:12.5px;color:var(--text-mute);line-height:1.6}.fm-page .set-special{background:#fffbeb;border-left:4px solid #f59e0b;color:#92400e;padding:10px 14px;border-radius:6px;font-size:13.5px;margin:12px 0}.fm-page .set-table{width:100%;border-collapse:collapse;margin-top:14px}.fm-page .set-table th{background:var(--primary);color:#fff;text-align:left;padding:10px 12px;font-size:13px;font-weight:600}.fm-page .set-table th:first-child{border-radius:8px 0 0}.fm-page .set-table th:last-child{border-radius:0 8px 0 0}.fm-page .set-table td{padding:11px 12px;border-bottom:1px solid var(--border);font-size:14px;vertical-align:middle}.fm-page .set-table tr:nth-child(2n) td{background:#f7faf9}.fm-page .set-table .si-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;color:var(--primary-dark);font-size:14.5px}.fm-page .set-table .si-name{font-weight:600}.fm-page .set-table .si-generic{font-size:12px;color:var(--text-mute);margin-top:1px}.fm-page .set-table .si-freq{display:inline-block;background:var(--primary-soft);color:var(--primary-dark);padding:2px 10px;border-radius:12px;font-size:12.5px;font-weight:600}.fm-page .set-table .si-freq.prn{background:#ffedd5;color:#c2410c}.fm-page .set-table .si-class{display:inline-block;background:#eef4fa;color:#1e40af;padding:2px 10px;border-radius:12px;font-size:12.5px}.fm-page .prn-divider td{background:#f1f5f9!important;height:6px;padding:0!important;border-bottom:none}.fm-page .si-flag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:700;margin-left:6px;vertical-align:middle}.fm-page .si-flag.discontinued{background:#dc2626;color:#fff}.fm-page .si-flag.replaced{background:#2563eb;color:#fff}.fm-page .si-flag.notfound{background:#e2e8f0;color:#64748b}.fm-page tr.row-discontinued td{background:#fef2f2!important}.fm-page tr.row-discontinued .si-name,.fm-page tr.row-discontinued .si-code{color:#b91c1c;text-decoration:line-through}.fm-page .set-thinking{margin-top:22px;background:#f0faf7;border-radius:10px;padding:18px 20px}.fm-page .set-thinking h3{margin:0 0 10px;font-size:15px;color:var(--primary-dark)}.fm-page .set-thinking ol{margin:0;padding-left:22px}.fm-page .set-thinking li{font-size:13.5px;line-height:1.9;color:var(--text);margin-bottom:4px}@media (max-width: 768px){.fm-page .set-card{padding:16px 14px}.fm-page .set-head .set-usage{margin-left:0;text-align:left;width:100%}.fm-page .set-table th,.fm-page .set-table td{padding:8px;font-size:12.5px}.fm-page .set-table .si-generic{font-size:11px}}.fm-page .copyable{cursor:copy;border-bottom:1px dashed var(--primary);transition:background .15s,color .15s}.fm-page .copyable:hover{background:var(--primary-soft);color:var(--primary-dark)}.fm-page .copy-toast{position:fixed;bottom:30px;left:50%;transform:translate(-50%) translateY(80px);background:#16a34a;color:#fff;padding:10px 22px;border-radius:24px;font-size:14px;font-weight:600;box-shadow:0 8px 20px #16a34a59;transition:transform .25s ease-out;z-index:1000;pointer-events:none}.fm-page .copy-toast.show{transform:translate(-50%) translateY(0)}.fm-page .chip-spec{background:#f1f5f9;color:#475569;border:1px solid #e2e8f0}.fm-page .med-item.is-chronic{background:#fef2f2;border:1px solid #fecaca}.fm-page .med-item.is-chronic .code{color:#dc2626}.fm-page .med-item.is-chronic .name-block .name{color:#b91c1c}.fm-page .med-item.is-chronic .name-block .alt{color:#ef4444;opacity:.85}.fm-page .med-item.is-chronic .chip{background:#fee2e2;color:#b91c1c}.fm-page .med-item.is-chronic:hover{box-shadow:0 6px 16px #dc262626}.fm-page .chronic-badge{display:inline-block;margin-left:8px;background:#dc2626;color:#fff;font-weight:700;padding:3px 11px;font-size:13px;border-radius:14px;vertical-align:middle;letter-spacing:.5px;box-shadow:0 1px 4px #dc262659;font-family:Noto Sans TC,system-ui,sans-serif}.fm-page .chip-grind{background:#2563eb;color:#fff;font-weight:600;padding:2px 9px;font-size:12px;box-shadow:0 1px 3px #2563eb4d}.fm-page .elite-usage-box{background:linear-gradient(135deg,#fef2f2,#fff5f5);border-left:5px solid #dc2626;padding:14px 18px;border-radius:8px;margin-bottom:24px}.fm-page .elite-usage-box .elite-title{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#dc2626;margin-bottom:8px}.fm-page .elite-usage-box .elite-title:before{content:"⭐";font-size:14px}.fm-page .elite-usage-box .elite-content{color:#7f1d1d;white-space:pre-wrap;font-size:14.5px;line-height:1.75}.fm-page .tab-panel.hidden{display:none}.fm-page .source-toggle{max-width:800px;margin:12px auto 0;display:flex;gap:6px;justify-content:center}.fm-page .source-toggle button{padding:6px 16px;border:1px solid var(--border);background:#fff;color:var(--text-mute);border-radius:18px;cursor:pointer;font-size:13px;font-family:inherit;transition:background .15s,color .15s}.fm-page .source-toggle button:hover{background:var(--primary-soft)}.fm-page .source-toggle button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.fm-page .med-list{display:flex;flex-direction:column;gap:8px}.fm-page .med-item{background:var(--card);border-radius:10px;padding:14px 16px;box-shadow:var(--shadow);cursor:pointer;display:grid;grid-template-columns:190px 1fr auto;gap:16px;align-items:center;transition:transform .15s,box-shadow .15s}.fm-page .med-item:hover{transform:translateY(-1px);box-shadow:0 6px 16px #1450461a}.fm-page .med-item .code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;font-weight:700;color:var(--primary-dark);letter-spacing:.3px}.fm-page .med-item .name-block .name{font-size:15px;color:var(--text);font-weight:500}.fm-page .med-item .name-block .alt{font-size:12px;color:var(--text-mute);margin-top:2px}.fm-page .med-item .side{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.fm-page .med-item .price{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600;color:var(--text)}.fm-page .badge-src{font-size:11px;padding:1px 8px;border-radius:10px;background:var(--primary-soft);color:var(--primary-dark)}.fm-page .badge-src.lab{background:#fff4e5;color:#b45309}.fm-page .empty{text-align:center;padding:60px 20px;color:var(--text-mute)}.fm-page .empty-icon{font-size:48px;margin-bottom:12px;opacity:.4}.fm-page .modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a99;display:none;align-items:center;justify-content:center;z-index:100;padding:20px}.fm-page .modal-mask.show{display:flex}.fm-page .modal{background:#fff;border-radius:12px;max-width:900px;width:100%;max-height:90vh;overflow-y:auto;position:relative;animation:fm-slide .2s ease-out}.fm-page .modal-close{position:absolute;top:14px;right:14px;z-index:2;width:36px;height:36px;border-radius:50%;border:none;background:#0000000d;cursor:pointer;font-size:20px}.fm-page .modal-close:hover{background:#0000001a}.fm-page .modal-content{padding:30px}.fm-page .modal-header{display:grid;grid-template-columns:220px 1fr;gap:24px;padding-bottom:20px;border-bottom:1px solid var(--border)}@media (max-width: 600px){.fm-page .modal-header{grid-template-columns:1fr}}.fm-page .modal-photo{aspect-ratio:1;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;color:var(--text-mute)}.fm-page .modal-photo img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.fm-page .modal-title h2{margin:0 0 6px;font-size:24px}.fm-page .modal-title .sub{font-size:15px;color:var(--text-mute)}.fm-page .modal-title .codes{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.fm-page .modal-title .codes .chip{font-size:13px}.fm-page .sections{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:22px;margin-top:24px}.fm-page .section h4{display:inline-block;font-size:12.5px;color:var(--primary-dark);background:var(--primary-soft);padding:5px 14px;border-radius:16px;letter-spacing:.3px;margin:0 0 10px;font-weight:600;line-height:1.4}.fm-page .section p{margin:0;white-space:pre-wrap;font-size:14px;line-height:1.7}.fm-page .section.wide{grid-column:1 / -1}.fm-page footer{text-align:center;padding:30px 20px;color:var(--text-mute);font-size:13px;border-top:1px solid var(--border);margin-top:40px}.fm-page .loading{text-align:center;padding:40px;color:var(--text-mute)}.fm-page .spinner{display:inline-block;width:24px;height:24px;border:3px solid #e2e8f0;border-top-color:var(--primary);border-radius:50%;animation:fm-spin .8s linear infinite}@media (max-width: 1024px){.fm-page .layout{grid-template-columns:200px 1fr;gap:16px}.fm-page .drug-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}}@media (max-width: 768px){.fm-page header{padding:14px 0}.fm-page .container{padding:0 14px}.fm-page header .brand{gap:10px}.fm-page header h1{font-size:17px}.fm-page header .subtitle{font-size:11px}.fm-page .logo-icon{width:44px;height:44px;padding:3px}.fm-page .search-hero{padding:14px;position:sticky;top:0;z-index:50;box-shadow:0 2px 8px #1450460f}.fm-page .search-box input{font-size:16px;padding:12px 48px 12px 16px;border-radius:24px}.fm-page .search-box .search-btn{width:38px;height:38px;right:4px}.fm-page .hint{font-size:11px;margin-top:8px;line-height:1.4}.fm-page main{padding:12px 14px 80px}.fm-page .layout{grid-template-columns:1fr;gap:12px}.fm-page aside{padding:0;position:static;background:transparent;box-shadow:none;max-height:none;overflow:visible;display:block}.fm-page aside h3{display:none}.fm-page .cat-scroll{overflow:visible;padding:0}.fm-page .cat-list{display:flex;flex-wrap:wrap;gap:6px;padding:0;margin:0}.fm-page .cat-list li{flex:0 0 auto;padding:6px 12px;font-size:13px;background:var(--card);border:1px solid var(--border);border-radius:16px}.fm-page .cat-list li.active{border-color:var(--primary)}.fm-page .toolbar{margin-bottom:12px}.fm-page .toolbar .count{font-size:13px}.fm-page .toolbar .admin-link{font-size:12px}.fm-page .drug-grid{grid-template-columns:1fr;gap:8px}.fm-page .drug-card{flex-direction:row;align-items:stretch;border-radius:10px}.fm-page .drug-card .photo{width:92px;min-width:92px;height:92px;aspect-ratio:auto;font-size:28px;border-radius:10px 0 0 10px}.fm-page .drug-card .info{padding:10px 12px;flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center}.fm-page .drug-card .info .name-row{gap:6px}.fm-page .drug-card .info .name-code{font-size:15px}.fm-page .drug-card .info .name-zh{font-size:14.5px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.fm-page .drug-card .info .name-row.has-code .name-zh{font-size:12.5px}.fm-page .drug-card .info .name-en{font-size:11.5px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fm-page .drug-card .info .meta{gap:4px;margin-top:6px}.fm-page .drug-card .info .meta .chip{font-size:10.5px;padding:1px 7px}.fm-page .drug-card:hover{transform:none}.fm-page .header-row{flex-direction:column;align-items:flex-start;gap:10px}.fm-page .tabs{align-self:stretch;justify-content:center}.fm-page .tabs button{padding:6px 14px;font-size:13px}.fm-page .med-item{grid-template-columns:1fr;gap:4px;padding:12px 14px}.fm-page .med-item .code{font-size:14.5px}.fm-page .chronic-badge{font-size:11.5px;padding:2px 8px;margin-left:6px}.fm-page .med-item .name-block .name{font-size:14px}.fm-page .med-item .side{justify-content:flex-start;margin-top:4px}.fm-page .source-toggle button{padding:5px 12px;font-size:12.5px}.fm-page .modal-mask{padding:0;align-items:flex-end}.fm-page .modal{max-height:92vh;border-radius:18px 18px 0 0;animation:fm-slideUp .25s ease-out}@keyframes fm-slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.fm-page .modal:before{content:"";display:block;width:40px;height:4px;background:#cbd5d3;border-radius:2px;margin:8px auto 0}.fm-page .modal-close{top:8px;right:12px;width:32px;height:32px}.fm-page .modal-content{padding:18px 18px 30px}.fm-page .modal-header{grid-template-columns:100px 1fr;gap:14px;padding-bottom:14px}.fm-page .modal-photo{aspect-ratio:1;border-radius:6px}.fm-page .modal-title h2{font-size:18px;line-height:1.3}.fm-page .modal-title .sub{font-size:13px}.fm-page .modal-title .codes{gap:4px;margin-top:8px}.fm-page .sections{gap:14px;margin-top:18px;grid-template-columns:1fr}.fm-page .section h4{font-size:11.5px;padding:4px 11px;margin-bottom:8px}.fm-page .section p{font-size:13.5px;line-height:1.7}.fm-page footer{padding:20px 14px;font-size:12px}}@media (max-width: 360px){.fm-page .drug-card .photo{width:80px;min-width:80px;height:80px}.fm-page .drug-card .info{padding:8px 10px}.fm-page .drug-card .info .name-zh{font-size:13.5px}.fm-page .modal-header{grid-template-columns:1fr}.fm-page .modal-photo{max-width:180px;margin:0 auto}.fm-page .cat-list li{padding:5px 10px;font-size:12px}}.fm-admin{--primary: #1FAE9F;--primary-dark: #178478;--primary-soft: #D4F0EC;--danger: #dc2626;--success: #16a34a;--warning: #ea580c;--bg: #F4F8F7;--card: #fff;--border: #DEE8E6;--text: #0E3B37;--text-mute: #6B8682;--shadow: 0 1px 3px rgba(20,80,70,.06), 0 1px 2px rgba(20,80,70,.04)}.fm-admin *{box-sizing:border-box}.fm-admin{margin:0;font-family:Noto Sans TC,Microsoft JhengHei,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.5}.fm-admin button{font-family:inherit;cursor:pointer}.fm-admin input,.fm-admin select,.fm-admin textarea{font-family:inherit}.fm-admin .login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);padding:20px}.fm-admin .login-box{background:#fff;padding:36px 32px;border-radius:12px;box-shadow:0 20px 40px #00000026;width:100%;max-width:380px}@media (max-width: 480px){.fm-admin .login-wrap{padding:16px}.fm-admin .login-box{padding:28px 22px}.fm-admin .field input,.fm-admin .field select,.fm-admin .field textarea{font-size:16px}}.fm-admin .login-box h1{margin:0 0 8px;font-size:22px;text-align:center}.fm-admin .login-box .sub{text-align:center;color:var(--text-mute);margin-bottom:24px;font-size:13px}.fm-admin .login-box .logo{text-align:center;margin:-12px auto 12px;width:96px;height:96px;border-radius:50%;background:var(--primary);padding:8px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 20px #1fae9f40}.fm-admin .login-box .logo img{width:100%;height:100%}.fm-admin .login-box h1{color:var(--primary-dark)}.fm-admin .field{margin-bottom:16px}.fm-admin .field label{display:block;font-size:13px;color:var(--text-mute);margin-bottom:4px}.fm-admin .field input,.fm-admin .field select,.fm-admin .field textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:6px;font-size:14px;outline:none;transition:border-color .15s,box-shadow .15s;background:#fff}.fm-admin .field input:focus,.fm-admin .field select:focus,.fm-admin .field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1e60911a}.fm-admin .field textarea{resize:vertical;min-height:80px}.fm-admin .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 16px;border-radius:6px;border:1px solid transparent;font-size:14px;font-weight:500;background:#f1f5f9;color:var(--text)}.fm-admin .btn:hover{background:#e2e8f0}.fm-admin .btn-primary{background:var(--primary);color:#fff}.fm-admin .btn-primary:hover{background:var(--primary-dark)}.fm-admin .btn-danger{background:var(--danger);color:#fff}.fm-admin .btn-danger:hover{opacity:.9}.fm-admin .btn-ghost{background:transparent}.fm-admin .btn-ghost:hover{background:#f1f5f9}.fm-admin .btn-full{width:100%;padding:11px}.fm-admin .err{color:var(--danger);font-size:13px;margin-top:8px;min-height:18px}.fm-admin .app{display:none;min-height:100vh}.fm-admin .app.show{display:grid;grid-template-columns:220px 1fr}@media (max-width: 768px){.fm-admin .app.show{grid-template-columns:1fr}.fm-admin .sidebar{display:none}}.fm-admin .sidebar{background:linear-gradient(180deg,#0e3b37,#0a2b28);color:#b7d8d3;padding:20px 0;display:flex;flex-direction:column}.fm-admin .sidebar .brand{padding:0 20px 20px;border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:10px}.fm-admin .sidebar .brand .logo-mini{width:36px;height:36px;border-radius:50%;background:var(--primary);padding:3px;flex-shrink:0}.fm-admin .sidebar .brand .logo-mini img{width:100%;height:100%}.fm-admin .sidebar .brand h1{font-size:15px;color:#fff;margin:0;font-weight:600}.fm-admin .sidebar .brand .sub{font-size:11px;opacity:.6;margin-top:2px}.fm-admin .nav{flex:1;padding:16px 0}.fm-admin .nav a{display:block;padding:10px 20px;color:#cbd5e1;text-decoration:none;font-size:14px;border-left:3px solid transparent}.fm-admin .nav a:hover{background:#ffffff0a;color:#fff}.fm-admin .nav a.active{background:#ffffff0f;color:#fff;border-left-color:var(--primary)}.fm-admin .user-info{padding:14px 20px;border-top:1px solid rgba(255,255,255,.08);font-size:13px}.fm-admin .user-info .name{color:#fff;font-weight:500}.fm-admin .user-info .role{font-size:11px;opacity:.6;margin-top:2px}.fm-admin .user-info .actions{margin-top:10px;display:flex;gap:8px}.fm-admin .user-info .actions a{color:#cbd5e1;font-size:12px;cursor:pointer}.fm-admin .user-info .actions a:hover{color:#fff}.fm-admin .content{padding:24px 30px;overflow-y:auto}.fm-admin .page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}.fm-admin .page-header h2{margin:0;font-size:22px}.fm-admin .search-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap}.fm-admin .search-bar input,.fm-admin .search-bar select{padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-size:14px;outline:none;min-width:200px;background:#fff}.fm-admin .table-wrap{background:var(--card);border-radius:8px;box-shadow:var(--shadow);overflow:hidden}.fm-admin table{width:100%;border-collapse:collapse}.fm-admin th{text-align:left;padding:12px;background:#f8fafc;font-size:13px;color:var(--text-mute);font-weight:600;border-bottom:1px solid var(--border)}.fm-admin td{padding:12px;border-bottom:1px solid var(--border);font-size:14px}.fm-admin tr:last-child td{border-bottom:none}.fm-admin tr:hover td{background:#f8fafc}.fm-admin .photo-thumb{width:40px;height:40px;border-radius:4px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;font-size:18px;color:var(--text-mute)}.fm-admin .photo-thumb img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.fm-admin .badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:12px}.fm-admin .badge-active{background:#dcfce7;color:#166534}.fm-admin .badge-inactive{background:#fee2e2;color:#991b1b}.fm-admin .badge-role-super{background:#fef3c7;color:#92400e}.fm-admin .badge-role-editor{background:#dbeafe;color:#1e40af}.fm-admin .empty-state{text-align:center;padding:60px 20px;color:var(--text-mute)}.fm-admin .row-actions{display:flex;gap:6px}.fm-admin .row-actions button{padding:5px 10px;font-size:12px;border-radius:4px;border:1px solid var(--border);background:#fff}.fm-admin .row-actions button:hover{background:#f1f5f9}.fm-admin .row-actions .del{color:var(--danger)}.fm-admin .modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a99;display:none;align-items:flex-start;justify-content:center;z-index:100;padding:40px 20px;overflow-y:auto}.fm-admin .modal-mask.show{display:flex}.fm-admin .modal{background:#fff;border-radius:10px;width:100%;max-width:700px;animation:fm-slide .2s ease-out}@keyframes fm-slide{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.fm-admin .modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.fm-admin .modal-head h3{margin:0;font-size:18px}.fm-admin .modal-head .close{width:32px;height:32px;border-radius:50%;border:none;background:transparent;font-size:20px;color:var(--text-mute)}.fm-admin .modal-head .close:hover{background:#f1f5f9}.fm-admin .modal-body{padding:20px}.fm-admin .modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border)}.fm-admin .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.fm-admin .form-sec{font-size:13px;margin:20px 0 10px;color:var(--primary-dark);padding:6px 10px;background:var(--primary-soft);border-radius:4px;font-weight:600}.fm-admin .form-sec:first-of-type{margin-top:8px}@media (max-width: 600px){.fm-admin .grid-2{grid-template-columns:1fr}}.fm-admin .drop-zone{border:2px dashed var(--border);border-radius:8px;padding:20px;text-align:center;color:var(--text-mute);cursor:pointer;font-size:13px;background:#fafafa}.fm-admin .drop-zone:hover{border-color:var(--primary);background:#f0f7ff}.fm-admin .drop-zone.has-photo{padding:0;border-style:solid}.fm-admin .drop-zone img{width:100%;max-height:200px;-o-object-fit:contain;object-fit:contain;border-radius:6px}.fm-admin .toast{position:fixed;top:20px;right:20px;z-index:1000;background:#16a34a;color:#fff;padding:12px 20px;border-radius:6px;box-shadow:0 10px 20px #00000026;transform:translate(420px);transition:transform .25s}.fm-admin .toast.show{transform:translate(0)}.fm-admin .toast.err{background:var(--danger)}.fm-admin .toast.warn{background:var(--warning)}.fm-admin .loading-full{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#ffffffb3;align-items:center;justify-content:center;z-index:999}.fm-admin .loading-full.show{display:flex}.fm-admin .spinner{width:36px;height:36px;border:4px solid #e2e8f0;border-top-color:var(--primary);border-radius:50%;animation:fm-spin .8s linear infinite}@keyframes fm-spin{to{transform:rotate(360deg)}}.fm-admin .hidden{display:none!important}.fm-admin .menu-toggle{display:none;position:fixed;top:12px;left:12px;z-index:60;width:40px;height:40px;border-radius:8px;background:var(--primary);color:#fff;border:none;box-shadow:0 4px 12px #1fae9f4d;font-size:20px;cursor:pointer}.fm-admin .drawer-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;z-index:70;animation:fm-fadeIn .2s}.fm-admin .drawer-backdrop.show{display:block}@keyframes fm-fadeIn{0%{opacity:0}to{opacity:1}}@media (max-width: 1024px){.fm-admin .app.show{grid-template-columns:200px 1fr}.fm-admin .content{padding:20px}}@media (max-width: 768px){.fm-admin .menu-toggle{display:flex;align-items:center;justify-content:center}.fm-admin .app.show{grid-template-columns:1fr}.fm-admin .sidebar{display:flex;position:fixed;top:0;left:0;bottom:0;width:260px;z-index:80;transform:translate(-100%);transition:transform .25s ease-out;box-shadow:4px 0 16px #0003}.fm-admin .sidebar.open{transform:translate(0)}.fm-admin .content{padding:60px 14px 20px}.fm-admin .page-header{margin-bottom:14px}.fm-admin .page-header h2{font-size:18px}.fm-admin .page-header .btn{padding:7px 12px;font-size:13px}.fm-admin .search-bar{gap:8px}.fm-admin .search-bar input,.fm-admin .search-bar select{width:100%;min-width:0;padding:9px 12px;font-size:14px}.fm-admin .table-wrap{background:transparent;box-shadow:none}.fm-admin .table-wrap table{display:none}.fm-admin .mobile-cards{display:block}.fm-admin .mobile-cards .m-card{background:var(--card);border-radius:8px;padding:12px;box-shadow:var(--shadow);margin-bottom:10px;display:grid;grid-template-columns:60px 1fr;gap:12px}.fm-admin .mobile-cards .m-photo{width:60px;height:60px;border-radius:6px;background:#f1f5f9;display:flex;align-items:center;justify-content:center;overflow:hidden}.fm-admin .mobile-cards .m-photo img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.fm-admin .mobile-cards .m-info .m-name{font-weight:600;font-size:14px}.fm-admin .mobile-cards .m-info .m-en{font-size:12px;color:var(--text-mute);margin-top:1px}.fm-admin .mobile-cards .m-info .m-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px;font-size:11px;color:var(--text-mute)}.fm-admin .mobile-cards .m-info .m-actions{display:flex;gap:6px;margin-top:8px}.fm-admin .mobile-cards .m-info .m-actions button{flex:1;padding:6px;font-size:12px;border:1px solid var(--border);border-radius:4px;background:#fff}.fm-admin .mobile-cards .m-info .m-actions .del{color:var(--danger);border-color:#fecaca}.fm-admin #view-categories .table-wrap,.fm-admin #view-admins .table-wrap,.fm-admin #view-logs .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;background:var(--card)}.fm-admin #view-categories table,.fm-admin #view-admins table,.fm-admin #view-logs table{display:table;min-width:560px}.fm-admin #view-categories .mobile-cards,.fm-admin #view-admins .mobile-cards,.fm-admin #view-logs .mobile-cards{display:none}.fm-admin .modal-mask{padding:0;align-items:stretch}.fm-admin .modal{max-width:100%;height:100vh;max-height:100vh;border-radius:0;display:flex;flex-direction:column}.fm-admin .modal-head{padding:14px 16px;flex-shrink:0}.fm-admin .modal-body{padding:16px;flex:1;overflow-y:auto}.fm-admin .modal-foot{padding:12px 16px;flex-shrink:0;box-shadow:0 -2px 8px #0000000f;background:#fff}.fm-admin .modal-foot .btn{padding:11px 16px;font-size:14px;flex:1}.fm-admin .grid-2{grid-template-columns:1fr;gap:10px}.fm-admin .field input,.fm-admin .field select,.fm-admin .field textarea{font-size:16px;padding:10px 12px}.fm-admin .field label{font-size:12px}.fm-admin .btn{padding:10px 14px;min-height:40px}.fm-admin .row-actions button{padding:7px 10px;font-size:13px}.fm-admin .user-info{padding:12px 16px}.fm-admin .toast{top:auto;bottom:16px;right:16px;left:16px;transform:translateY(120px)}.fm-admin .toast.show{transform:translateY(0)}}.fm-admin .mobile-cards{display:none}.shop-page{--sage:#6B8F71;--sage-light:#A8C5AD;--sage-pale:#E8F2EA;--cream:#F9F5EE;--warm-white:#FEFCF8;--charcoal:#2C3E35;--soft-brown:#8B7355;--gold:#C9A84C;--red:#D4756A;--sh-sm:0 2px 8px rgba(44,62,53,.08);--sh-md:0 4px 20px rgba(44,62,53,.12);--r:14px;--r-sm:10px;--hh:60px;--sh:48px}.shop-page *{box-sizing:border-box;margin:0;padding:0}.shop-page{height:100%;overflow-x:hidden}.shop-page{font-family:Noto Sans TC,sans-serif;background:var(--cream);color:var(--charcoal)}.shop-page header{background:var(--charcoal);height:var(--hh);padding:0 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;box-shadow:0 2px 12px #00000040}.shop-page .brand{display:flex;align-items:center;gap:9px}.shop-page .brand-icon{width:30px;height:30px;background:var(--sage);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}.shop-page .brand h1{color:#fff;font-size:13px;font-weight:700;letter-spacing:1px;line-height:1.2}.shop-page .brand p{color:var(--sage-light);font-size:10px}.shop-page .header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.shop-page .header-date{color:var(--sage-light);font-size:11px}@media (max-width:480px){.shop-page .header-date{display:none}}.shop-page .doctor-badge{background:var(--sage);color:#fff;padding:3px 9px;border-radius:12px;font-size:10px;font-weight:500;white-space:nowrap;max-width:110px;overflow:hidden;text-overflow:ellipsis}.shop-page .steps-bar{background:var(--warm-white);border-bottom:1px solid #E0E8E2;padding:0 14px;display:flex;align-items:center;height:var(--sh);gap:0;overflow-x:auto;scrollbar-width:none}.shop-page .steps-bar::-webkit-scrollbar{display:none}.shop-page .step-item{display:flex;align-items:center;gap:5px;padding:0 8px 0 0;opacity:.4;transition:opacity .2s;flex-shrink:0}.shop-page .step-item.active{opacity:1}.shop-page .step-item.done{opacity:.65}.shop-page .step-num{width:20px;height:20px;border-radius:50%;border:2px solid var(--sage-light);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:var(--sage);background:#fff;flex-shrink:0}.shop-page .step-item.active .step-num{background:var(--sage);border-color:var(--sage);color:#fff}.shop-page .step-item.done .step-num{background:var(--sage-pale);border-color:var(--sage);color:var(--sage)}.shop-page .step-label{font-size:10px;font-weight:500;white-space:nowrap}.shop-page .step-arrow{color:var(--sage-light);font-size:10px;margin-right:8px;flex-shrink:0}.shop-page .layout{display:flex;flex-direction:column}.shop-page .content{padding:12px;flex:1}.shop-page .sidebar{background:var(--warm-white);border-top:2px solid #E0E8E2}.shop-page .sb-head{flex-shrink:0;padding:14px 16px 8px;border-bottom:1px solid #E8EEE9}.shop-page .order-list{flex:1;overflow-y:auto;padding:6px 8px;min-height:0}.shop-page .payment-panel{flex-shrink:0;padding:10px 14px 14px;border-top:1px solid #E8EEE9;background:var(--warm-white)}@media (min-width:768px){.shop-page .layout{flex-direction:row;min-height:calc(100vh - var(--hh) - var(--sh))}.shop-page .content{padding:18px 20px;overflow-y:auto}.shop-page .sidebar{width:290px;flex-shrink:0;border-top:none;border-left:2px solid #E0E8E2;display:flex;flex-direction:column;position:sticky;top:calc(var(--hh) + var(--sh));height:calc(100vh - var(--hh) - var(--sh));overflow:hidden;padding:0}}@media (min-width:1100px){.shop-page .sidebar{width:320px}}.shop-page .card{background:#fff;border-radius:var(--r);box-shadow:var(--sh-sm);margin-bottom:12px;overflow:visible;border:1px solid #E8EEE9}.shop-page .card-header{background:var(--sage-pale);padding:10px 14px;display:flex;align-items:center;gap:7px;border-bottom:1px solid #D8EAD9}.shop-page .card-header-icon{font-size:13px}.shop-page .card-header-title{font-size:11px;font-weight:700;letter-spacing:.5px}.shop-page .card-body{padding:13px}.shop-page .form-row{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:9px}.shop-page .form-row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:9px;margin-bottom:9px}@media (max-width:520px){.shop-page .form-row-3{grid-template-columns:1fr 1fr}.shop-page .form-row-3 .fg-full{grid-column:1/-1}}.shop-page .form-group{display:flex;flex-direction:column;gap:4px;position:relative}.shop-page .form-group label{font-size:10px;font-weight:700;color:var(--soft-brown);letter-spacing:.5px}.shop-page .fg-input{height:36px;border:1.5px solid #D8E8DA;border-radius:var(--r-sm);padding:0 10px;font-family:inherit;font-size:12px;color:var(--charcoal);background:var(--cream);outline:none;transition:border-color .2s,box-shadow .2s;-webkit-appearance:none;-moz-appearance:none;appearance:none}.shop-page .fg-input:focus{border-color:var(--sage);box-shadow:0 0 0 3px #6b8f7126;background:#fff}.shop-page select.fg-input{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='7'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236B8F71' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;padding-right:26px}.shop-page .search-dd{position:fixed;background:#fff;border:1.5px solid var(--sage);border-radius:12px;box-shadow:0 8px 32px #0000002e;z-index:99999;height:240px;overflow-y:scroll;display:none;margin-top:4px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y}.shop-page .search-dd.open{display:block}.shop-page .dd-item{padding:11px 14px;font-size:13px;cursor:pointer;border-bottom:1px solid #F0F4F1;transition:background .1s}.shop-page .dd-item:last-child{border-bottom:none}.shop-page .dd-item:hover,.shop-page .dd-item.sel{background:var(--sage-pale);color:var(--sage);font-weight:600}.shop-page .dd-empty{padding:7px 11px;font-size:10px;color:#aaa;text-align:center}.shop-page .tabs{display:flex;gap:5px;margin-bottom:12px;flex-wrap:wrap}.shop-page .tab{padding:5px 12px;border-radius:14px;border:1.5px solid #D0DEAD;background:#fff;font-family:inherit;font-size:11px;font-weight:500;color:var(--soft-brown);cursor:pointer;transition:all .2s;white-space:nowrap}.shop-page .tab:hover{border-color:var(--sage);color:var(--sage)}.shop-page .tab.active{background:var(--sage);border-color:var(--sage);color:#fff}.shop-page .promo-banner{background:#fff8e8;border:1px solid #ECD9A0;border-radius:8px;padding:9px 14px;margin-bottom:12px;font-size:13px;color:#8b6914}.shop-page .cat-desc{font-size:13px;color:#6b8f71;background:#f0f7f1;border-radius:8px;padding:10px 14px;margin-bottom:12px;line-height:1.6}.shop-page .product-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}@media (min-width:500px){.shop-page .product-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}}@media (min-width:900px){.shop-page .product-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}}.shop-page .product-card{background:#fff;border:1.5px solid #E8EEE9;border-radius:var(--r-sm);padding:14px 10px;cursor:pointer;transition:all .2s;text-align:center;position:relative}.shop-page .product-card:hover{border-color:var(--sage);box-shadow:var(--sh-sm);transform:translateY(-1px)}.shop-page .product-card.selected{border-color:var(--sage);background:var(--sage-pale)}.shop-page .product-emoji{font-size:26px;margin-bottom:6px;display:block}.shop-page .product-name{font-size:13px;font-weight:700;margin-bottom:3px;line-height:1.3}.shop-page .product-price{font-size:13px;font-weight:800;color:var(--sage)}.shop-page .product-detail{font-size:11px;color:#888;margin:3px 0 2px;line-height:1.4}.shop-page .product-badge{position:absolute;top:-4px;right:-4px;background:var(--gold);color:#fff;font-size:8px;font-weight:700;padding:2px 5px;border-radius:7px}.shop-page .qty-control{display:flex;align-items:center;justify-content:center;gap:5px;margin-top:6px}.shop-page .qty-btn{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--sage-light);background:#fff;color:var(--sage);font-size:13px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-weight:700;transition:all .15s;line-height:1;flex-shrink:0}.shop-page .qty-btn:hover{background:var(--sage);color:#fff;border-color:var(--sage)}.shop-page .qty-num{font-size:11px;font-weight:700;min-width:14px;text-align:center}.shop-page .qty-input{font-size:11px;font-weight:700;width:28px;text-align:center;border:none;background:transparent;color:var(--charcoal);padding:0;-moz-appearance:textfield}.shop-page .qty-input::-webkit-inner-spin-button,.shop-page .qty-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.shop-page .qty-input:focus{outline:1px solid var(--sage);border-radius:4px;background:#fff}.shop-page .package-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}@media (max-width:380px){.shop-page .package-grid{grid-template-columns:1fr}}.shop-page .pkg-card{border:2px solid #E8EEE9;border-radius:var(--r-sm);padding:12px;transition:all .2s;position:relative}.shop-page .pkg-card:hover{border-color:var(--sage)}.shop-page .pkg-card.selected{border-color:var(--gold);background:#fffbf0}.shop-page .pkg-name{font-size:15px;font-weight:700;margin-bottom:3px}.shop-page .pkg-detail{font-size:12px;color:#888;margin-bottom:6px}.shop-page .pkg-price{font-size:18px;font-weight:900;color:var(--sage)}.shop-page .pkg-price span{font-size:12px;font-weight:400;color:#999}.shop-page .empty-product{text-align:center;padding:24px;color:#aaa;font-size:11px}.shop-page .sb-head{padding:11px 13px 9px;border-bottom:1px solid #E8EEE9}.shop-page .sb-head h2{font-size:12px;font-weight:700;margin-bottom:1px}.shop-page .sb-head p{font-size:10px;color:#888}.shop-page .order-list{flex:1;overflow-y:auto;padding:9px 11px}.shop-page .order-item{display:flex;align-items:center;gap:7px;padding:7px 0;border-bottom:1px solid #F0F4F1}.shop-page .order-item:last-child{border-bottom:none}.shop-page .oi-emoji{font-size:17px;flex-shrink:0}.shop-page .oi-info{flex:1;min-width:0}.shop-page .oi-name{font-size:10px;font-weight:600}.shop-page .oi-sub{font-size:9px;color:#888;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.shop-page .oi-price{font-size:10px;font-weight:700;color:var(--sage);flex-shrink:0}.shop-page .empty-cart{text-align:center;padding:24px 12px;color:#bcc9be}.shop-page .empty-cart .icon{font-size:28px;margin-bottom:6px}.shop-page .empty-cart p{font-size:10px}.shop-page .payment-panel{border-top:1px solid #E8EEE9;padding:10px 12px}.shop-page .sub-row{display:flex;justify-content:space-between;padding:2px 0;font-size:10px;color:#666}.shop-page .total-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0 0;border-top:1px solid #E8EEE9;margin-top:5px}.shop-page .total-label{font-size:11px;font-weight:700}.shop-page .total-amount{font-size:18px;font-weight:900;color:var(--sage)}.shop-page .pay-methods{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin:8px 0}.shop-page .pay-btn{padding:7px;border:2px solid #E8EEE9;border-radius:var(--r-sm);background:#fff;font-family:inherit;font-size:10px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;transition:all .2s}.shop-page .pay-btn:hover{border-color:var(--sage);color:var(--sage)}.shop-page .pay-btn.active{border-color:var(--sage);background:var(--sage-pale);color:var(--sage)}.shop-page .input-cash{width:100%;height:36px;border:1.5px solid #D8E8DA;border-radius:var(--r-sm);padding:0 9px;font-family:inherit;font-size:13px;font-weight:700;background:var(--cream);outline:none;margin-top:5px;text-align:right}.shop-page .input-cash:focus{border-color:var(--sage);background:#fff}.shop-page .change-display{text-align:right;font-size:10px;font-weight:600;margin-top:2px;min-height:13px}.shop-page .checkout-btn{width:100%;height:42px;background:var(--sage);color:#fff;border:none;border-radius:var(--r-sm);font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;letter-spacing:2px;transition:all .2s;box-shadow:0 4px 12px #6b8f714d;margin-top:3px}.shop-page .checkout-btn:hover:not(:disabled){background:#5a7b60;transform:translateY(-1px)}.shop-page .checkout-btn:disabled{opacity:.4;cursor:not-allowed;transform:none;box-shadow:none}.shop-page .cart-fab{display:none;position:fixed;bottom:18px;right:18px;z-index:90;width:54px;height:54px;border-radius:50%;background:var(--sage);color:#fff;border:none;font-size:21px;cursor:pointer;box-shadow:0 4px 16px #6b8f7180;align-items:center;justify-content:center;transition:transform .2s}.shop-page .cart-fab:hover{transform:scale(1.08)}.shop-page .cart-fab .fab-badge{position:absolute;top:-3px;right:-3px;background:var(--gold);color:#fff;font-size:9px;font-weight:700;border-radius:10px;padding:1px 5px;min-width:17px;text-align:center}@media (max-width:767px){.shop-page .cart-fab{display:flex}}.shop-page .cart-drawer{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.shop-page .cart-drawer.open{display:flex;align-items:flex-end}.shop-page .cart-inner{background:#fff;width:100%;max-height:82vh;border-radius:18px 18px 0 0;display:flex;flex-direction:column;animation:shop-page-sUp .3s ease}@keyframes shop-page-sUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.shop-page .cart-inner-head{padding:13px 15px 10px;border-bottom:1px solid #E8EEE9;display:flex;align-items:center;justify-content:space-between}.shop-page .cart-inner-head h3{font-size:13px;font-weight:700}.shop-page .cart-close-btn{background:none;border:none;font-size:22px;cursor:pointer;color:#aaa;line-height:1;padding:0}.shop-page .modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:300;display:none;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:14px}.shop-page .modal-overlay.open{display:flex}.shop-page .mutex-role-btn{flex:1;padding:7px 0;border:1.5px solid #D0DEAD;background:#fff;border-radius:10px;font-family:inherit;font-size:12px;font-weight:600;color:var(--brown);cursor:pointer;transition:all .15s}.shop-page .mutex-role-btn.active{background:var(--sage);border-color:var(--sage);color:#fff}.shop-page .modal{background:#fff;border-radius:18px;padding:22px 20px;width:100%;max-width:420px;box-shadow:0 20px 60px #00000040;animation:shop-page-mIn .3s ease}@keyframes shop-page-mIn{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.shop-page .modal-icon{font-size:38px;text-align:center;margin-bottom:10px}.shop-page .modal h2{font-size:16px;font-weight:700;text-align:center;margin-bottom:5px}.shop-page .modal p{font-size:11px;color:#666;text-align:center;margin-bottom:14px;line-height:1.6}.shop-page .modal-receipt{background:var(--cream);border-radius:var(--r-sm);padding:11px;margin-bottom:13px;font-size:11px}.shop-page .receipt-row{display:flex;justify-content:space-between;padding:3px 0;border-bottom:1px dashed #DDD}.shop-page .receipt-row:last-child{border-bottom:none;font-weight:700;font-size:12px}.shop-page .modal-close{width:100%;height:40px;background:var(--sage);color:#fff;border:none;border-radius:var(--r-sm);font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;letter-spacing:1px}.shop-page .modal-close:hover{background:#5a7b60}.shop-page .toast-wrap{position:fixed;top:68px;right:12px;z-index:400;display:flex;flex-direction:column;gap:5px;pointer-events:none}.shop-page .toast{background:var(--charcoal);color:#fff;padding:8px 13px;border-radius:var(--r-sm);font-size:11px;font-weight:500;box-shadow:var(--sh-md);animation:shop-page-tIn .3s ease,tOut .3s ease 2.5s forwards;pointer-events:all}@keyframes shop-page-tIn{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:translate(0)}}@keyframes shop-page-tOut{0%{opacity:1}to{opacity:0}}@keyframes shop-page-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.shop-page #_printArea{display:none}@media print{@page{size:58mm auto;margin:0}.shop-page>*:not(#_printArea){display:none!important}.shop-page #_printArea{display:block!important;font-family:Noto Sans TC,Microsoft JhengHei,sans-serif;width:58mm;padding:3mm;margin:0;font-size:11pt;color:#000;line-height:1.5;-webkit-print-color-adjust:exact;print-color-adjust:exact}.shop-page #_printArea .receipt-title{text-align:center;font-size:15pt;font-weight:900;letter-spacing:1px;margin-bottom:1mm}.shop-page #_printArea .receipt-subtitle{text-align:center;font-size:9pt;color:#555;margin-bottom:2mm}.shop-page #_printArea .receipt-divider{border:none;border-top:1px dashed #000;margin:2mm 0}.shop-page #_printArea .receipt-row{display:flex;justify-content:space-between;padding:1mm 0;font-size:11pt;line-height:1.4}.shop-page #_printArea .receipt-row.total{font-size:14pt;font-weight:900;border-top:1px solid #000;padding-top:2mm;margin-top:1mm}.shop-page #_printArea .receipt-item-name{font-size:11pt;font-weight:700}.shop-page #_printArea .receipt-item-sub{font-size:9pt;color:#444;padding-left:2mm;line-height:1.4}.shop-page #_printArea .receipt-discount{font-size:10pt;color:#000}.shop-page #_printArea .receipt-footer{text-align:center;font-size:9pt;color:#555;margin-top:3mm;line-height:1.6}.shop-page #_printArea #syncStatus{display:none!important}}@media print{@page{size:58mm auto;margin:0}body *{visibility:hidden!important}#_printArea,#_printArea *{visibility:visible!important}#_printArea{display:block!important;position:absolute;left:0;top:0;font-family:Noto Sans TC,Microsoft JhengHei,sans-serif;width:58mm;padding:3mm;margin:0;font-size:11pt;color:#000;line-height:1.5;-webkit-print-color-adjust:exact;print-color-adjust:exact}}#_printArea{display:none}.roster-page{--teal-900:#0f4f4d;--teal-800:#176e6b;--teal-700:#1f8a86;--teal-600:#2aa39e;--teal-500:#3fb8b3;--teal-100:#d4eeec;--teal-50:#eaf6f5;--cream:#f7f1e3;--cream-2:#f1e9d2;--paper:#fbf8f0;--ink:#1a2f2e;--muted:#6a7a78;--line:#e3dcc6;--A:#a9c8b6;--A-bg:#e9f1ea;--A-fg:#3a6b50;--B:#a8c4d6;--B-bg:#e7eff5;--B-fg:#345d7a;--C:#d6b89a;--C-bg:#f4ead9;--C-fg:#7a5532;--D:#b8a4d4;--D-bg:#e8e0f3;--D-fg:#5a4480;--p2-A-bg:#dceee2;--p2-A-fg:#2d6047;--p2-B-bg:#dde9f4;--p2-B-fg:#264f70;--p4-A-bg:#e6efe8;--p4-A-fg:#3a6b50;--p4-B-bg:#e3edf4;--p4-B-fg:#345d7a;--p4-C-bg:#f3ebde;--p4-C-fg:#7a5532;--p4-D-bg:#e8e0f3;--p4-D-fg:#5a4480;--shadow-sm: 0 2px 6px rgba(15,79,77,.06);--shadow-md: 0 8px 24px rgba(15,79,77,.1);--shadow-lg: 0 24px 60px rgba(15,79,77,.18)}.roster-page *{box-sizing:border-box}.roster-page{margin:0;padding:0}.roster-page{font-family:Noto Sans TC,-apple-system,BlinkMacSystemFont,sans-serif;color:var(--ink);font-size:18px;line-height:1.65;background:radial-gradient(1200px 600px at 10% -10%,rgba(63,184,179,.08),transparent 60%),radial-gradient(1000px 500px at 110% 10%,rgba(247,241,227,.4),transparent 60%),linear-gradient(180deg,#faf6ec,#f5f8f6 60%,#f0f5f3);min-height:100vh}.roster-page header.app-header{position:sticky;top:0;z-index:50;background:#fbf8f0d9;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid rgba(15,79,77,.08)}.roster-page .header-inner{max-width:1400px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:10px 28px;gap:20px}.roster-page .brand{display:flex;align-items:center;gap:12px;cursor:pointer}.roster-page .brand-logo{width:52px;height:52px;border-radius:50%;overflow:hidden;flex-shrink:0;background:#fff;box-shadow:var(--shadow-sm);display:flex;align-items:center;justify-content:center}.roster-page .brand-logo img,.roster-page .brand-logo svg{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.roster-page .brand-text{text-align:center;line-height:1.05}.roster-page .brand-text .zh{display:block;font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-900);font-size:28px;letter-spacing:2px;line-height:1.05}.roster-page .brand-text .en{display:block;font-family:Cormorant Garamond,serif;font-style:italic;color:var(--teal-700);font-size:16px;letter-spacing:3px;margin-top:4px;line-height:1}.roster-page .header-right{display:flex;align-items:center;gap:14px}.roster-page .header-pill{display:flex;align-items:center;gap:10px;padding:11px 20px;border-radius:999px;background:var(--teal-700);color:#fff;font-size:16px;font-weight:500;box-shadow:var(--shadow-sm)}.roster-page .header-pill .dot{width:7px;height:7px;border-radius:50%;background:#a4ebca;box-shadow:0 0 0 3px #a4ebca4d}.roster-page .hero{max-width:1400px;margin:0 auto;padding:56px 28px 28px;text-align:center;position:relative}.roster-page .hero:before{content:"";position:absolute;left:50%;top:34px;transform:translate(-50%);width:120px;height:1px;background:var(--teal-700);opacity:.4}.roster-page .hero .eyebrow{font-family:Cormorant Garamond,serif;font-style:italic;color:var(--teal-700);letter-spacing:6px;text-transform:uppercase;font-size:13px;margin-bottom:14px}.roster-page .hero h1{font-family:"Noto Serif TC",serif;font-weight:600;font-size:clamp(32px,5vw,52px);color:var(--teal-900);margin:8px 0 6px;letter-spacing:6px}.roster-page .hero .subtitle{font-family:Cormorant Garamond,serif;font-size:22px;font-style:italic;color:var(--teal-700);letter-spacing:3px;margin-bottom:8px}.roster-page .hero .system-name{color:var(--muted);font-size:14px;letter-spacing:4px;font-weight:300}.roster-page .hero .ornament{margin:22px auto 0;display:flex;align-items:center;justify-content:center;gap:14px;color:var(--teal-700)}.roster-page .hero .ornament .line{height:1px;width:60px;background:currentColor;opacity:.5}.roster-page .hero .ornament .dia{width:6px;height:6px;background:currentColor;transform:rotate(45deg)}.roster-page .tabs{max-width:1400px;margin:0 auto;display:flex;justify-content:center;gap:6px;padding:8px 28px 0}.roster-page .tab{padding:13px 28px;border:1px solid transparent;background:transparent;color:var(--muted);border-radius:999px;font-family:Noto Sans TC,sans-serif;font-weight:500;cursor:pointer;font-size:17px;letter-spacing:1px;transition:all .25s ease}.roster-page .tab:hover{color:var(--teal-800);background:#ffffff80}.roster-page .tab.active{background:var(--teal-700);color:#fff;box-shadow:var(--shadow-sm)}.roster-page .branch-section{max-width:1400px;margin:0 auto;padding:36px 28px 80px}.roster-page .section-title{display:flex;align-items:baseline;gap:14px;margin-bottom:24px}.roster-page .section-title .zh{font-family:"Noto Serif TC",serif;font-weight:500;color:var(--teal-900);font-size:22px;letter-spacing:3px}.roster-page .section-title .en{font-family:Cormorant Garamond,serif;font-style:italic;color:var(--teal-700);letter-spacing:2px;font-size:14px}.roster-page #homeRecords .section-title .zh{font-size:32px;font-weight:700;letter-spacing:5px}.roster-page #homeRecords .section-title .en{font-size:18px;letter-spacing:3px}.roster-page .records-stats{margin-bottom:24px;background:#fff9;border-radius:14px;padding:18px 20px;border:1px solid var(--line)}.roster-page .records-stats-title{font-family:"Noto Serif TC",serif;font-size:18px;font-weight:700;color:var(--teal-900);letter-spacing:2px;margin-bottom:14px}.roster-page .records-stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.roster-page .stat-card{padding:14px 16px;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.roster-page .stat-card .stat-label{font-size:13px;letter-spacing:2px;font-weight:600;margin-bottom:4px}.roster-page .stat-card .stat-name{font-family:"Noto Serif TC",serif;font-size:18px;font-weight:600;color:var(--teal-900);margin-bottom:6px}.roster-page .stat-card .stat-value{font-family:Noto Sans TC,sans-serif;font-size:30px;font-weight:700;line-height:1}.roster-page .stat-card .stat-unit{font-size:14px;font-weight:400;color:var(--muted);margin-left:4px}.roster-page .stat-card .stat-meta{font-size:12px;color:var(--muted);margin-top:8px;letter-spacing:1px}.roster-page .branch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px}.roster-page .branch-card{position:relative;padding:38px 24px;border-radius:18px;background:linear-gradient(180deg,#fff,#fafaf2);border:1px solid rgba(15,79,77,.08);cursor:pointer;transition:all .3s cubic-bezier(.2,.7,.2,1);overflow:hidden;display:flex;align-items:center;justify-content:space-between}.roster-page .branch-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--teal-600)}.roster-page .branch-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--teal-700),var(--teal-500));opacity:0;transition:opacity .3s ease}.roster-page .branch-card:hover:before{opacity:1}.roster-page .branch-card .name{font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-900);font-size:30px;letter-spacing:6px}.roster-page .branch-card .arrow{color:var(--teal-700);font-size:22px;transition:transform .3s ease;flex-shrink:0}.roster-page .branch-card:hover .arrow{transform:translate(6px)}.roster-page .branch-view{display:none}.roster-page .branch-view.active{display:block}.roster-page .branch-toolbar{max-width:1400px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;padding:0 28px 14px}.roster-page .branch-toolbar>.crumb{flex:1 1 auto;min-width:0}.roster-page .branch-toolbar>.branch-actions{flex:0 0 auto;display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}.roster-page .crumb{display:flex;align-items:center;gap:12px;font-size:18px;color:var(--muted)}.roster-page .crumb a{color:var(--teal-700);cursor:pointer;text-decoration:none;font-weight:500}.roster-page .crumb a:hover{text-decoration:underline}.roster-page .crumb .sep{opacity:.5;font-size:20px}.roster-page .crumb .current{font-family:"Noto Serif TC",serif;color:var(--teal-900);font-weight:700;letter-spacing:3px;font-size:22px;display:inline-flex;align-items:center}.roster-page .branch-pills{display:grid;grid-template-columns:repeat(6,max-content);gap:6px 8px;align-items:center}@media (max-width: 1100px){.roster-page .branch-pills{grid-template-columns:repeat(4,max-content)}}@media (max-width: 720px){.roster-page .branch-pills{grid-template-columns:repeat(3,max-content)}}.roster-page .branch-pill{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid var(--line);background:#fff;color:var(--teal-800);border-radius:999px;padding:8px 18px;font-family:"Noto Serif TC",serif;font-size:18px;letter-spacing:2px;font-weight:500;cursor:pointer;transition:all .15s ease;line-height:1.2}.roster-page .branch-pill:hover{border-color:var(--teal-600);color:var(--teal-900);background:var(--teal-50)}.roster-page .branch-pill.active{background:var(--teal-700);color:#fff;border-color:var(--teal-700);box-shadow:var(--shadow-sm);font-weight:700;cursor:default}.roster-page .branch-pill.active:hover{background:var(--teal-700);color:#fff}.roster-page .position-bar{max-width:1400px;margin:0 auto;padding:0 28px 24px;display:flex;gap:10px;flex-wrap:wrap}.roster-page .pos-btn{padding:13px 30px;border-radius:999px;background:#fff;border:1px solid var(--line);color:var(--ink);cursor:pointer;font-size:18px;letter-spacing:2px;font-family:"Noto Serif TC",serif;transition:all .2s ease}.roster-page .pos-btn:hover{border-color:var(--teal-600);color:var(--teal-800)}.roster-page .pos-btn.active{background:var(--teal-700);color:#fff;border-color:var(--teal-700);box-shadow:var(--shadow-sm)}.roster-page .pos-vis-wrap{position:relative;align-self:center}.roster-page .pos-vis-btn{width:42px;height:42px;border-radius:50%;background:#fff;border:1px solid var(--line);color:var(--muted);font-size:18px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.roster-page .pos-vis-btn:hover{border-color:var(--teal-600);color:var(--teal-800);background:var(--teal-50)}.roster-page .pos-vis-panel{display:none;position:absolute;top:calc(100% + 8px);right:0;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-md);padding:14px 18px;min-width:200px;z-index:50}.roster-page .pos-vis-panel.show{display:block}.roster-page .pos-vis-title{font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-800);letter-spacing:2px;font-size:14px;margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--line)}.roster-page .pos-vis-sub{font-size:11px;color:var(--muted);font-weight:400;letter-spacing:1px}.roster-page .pos-vis-item{display:flex;align-items:center;gap:8px;padding:6px 4px;cursor:pointer;font-size:14px;border-radius:6px}.roster-page .pos-vis-item:hover{background:var(--teal-50)}.roster-page .pos-vis-item input[type=checkbox]{width:auto;min-width:auto;margin:0;cursor:pointer}.roster-page .pos-vis-hint{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:11px;color:var(--muted);line-height:1.5}.roster-page .action-toolbar{max-width:1400px;margin:0 auto;padding:0 28px 16px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}.roster-page .btn{padding:12px 24px;border-radius:10px;border:1px solid var(--line);background:#fff;cursor:pointer;font-size:16px;letter-spacing:1px;color:var(--ink);display:inline-flex;align-items:center;gap:6px;transition:all .2s ease;font-family:inherit}.roster-page .btn:hover{border-color:var(--teal-600);color:var(--teal-800)}.roster-page .btn.primary{background:var(--teal-700);color:#fff;border-color:var(--teal-700)}.roster-page .btn.primary:hover{background:var(--teal-800);color:#fff}.roster-page .btn.subtle{background:transparent}.roster-page .summary-row{max-width:1400px;margin:0 auto;padding:0 28px 18px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.roster-page .summary-seg-head{grid-column:1 / -1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px;padding:6px 4px 2px;border-top:1px dashed var(--line)}.roster-page .summary-seg-head:first-child{border-top:none;margin-top:0}.roster-page .summary-seg-head .seg-idx{font-family:"Noto Serif TC",serif;font-weight:700;font-size:13px;color:var(--teal-800);background:var(--teal-50);border-radius:6px;padding:2px 10px;letter-spacing:1px}.roster-page .summary-seg-head .seg-range{font-weight:600;font-size:14px;color:var(--ink)}.roster-page .summary-seg-head .seg-rule{font-size:12px;color:var(--muted);letter-spacing:1px}.roster-page .summary-card{position:relative;padding:16px 20px;border-radius:14px;background:#fff;border:1px solid var(--line);display:flex;flex-direction:column;gap:6px;box-shadow:var(--shadow-sm);overflow:hidden}.roster-page .summary-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--teal-700);opacity:.35}.roster-page .summary-card.A:before{background:var(--A-fg)}.roster-page .summary-card.B:before{background:var(--B-fg)}.roster-page .summary-card.C:before{background:var(--C-fg)}.roster-page .summary-card.D:before{background:var(--D-fg)}.roster-page .summary-card.empty-slot:before{background:#cfc7ad;opacity:.6}.roster-page .summary-card.empty-slot{background:repeating-linear-gradient(135deg,#fff 0,#fff 8px,#faf6e8 8px,#faf6e8 16px)}.roster-page .summary-card .lbl{font-size:13px;letter-spacing:2px;color:var(--muted);font-weight:500}.roster-page .summary-card .val{font-family:"Noto Serif TC",serif;font-size:20px;font-weight:600;color:var(--teal-900);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.roster-page .summary-card .val .emp-name{font-size:20px}.roster-page .summary-card .val .days{font-family:Noto Sans TC,sans-serif;font-weight:700;font-size:36px;line-height:1;font-style:normal}.roster-page .summary-card .val .day-unit{font-size:14px;color:var(--muted);font-family:Noto Sans TC,sans-serif;font-weight:400}.roster-page .summary-card.A .val .days{color:var(--A-fg)}.roster-page .summary-card.B .val .days{color:var(--B-fg)}.roster-page .summary-card.C .val .days{color:var(--C-fg)}.roster-page .summary-card.D .val .days{color:var(--D-fg)}.roster-page .summary-card.empty-slot .val .days{color:#ba8}.roster-page .summary-card .meta{font-size:11px;color:var(--muted);letter-spacing:1px}.roster-page .summary-card.meta-card{background:linear-gradient(180deg,#fff,#f4f7eb)}.roster-page .summary-card.meta-card:before{background:var(--teal-700);opacity:.6}.roster-page .summary-card .big-num{font-family:Noto Sans TC,sans-serif;font-weight:700;font-size:34px;color:var(--teal-800);letter-spacing:1px;line-height:1.05;font-style:normal}.roster-page .summary-card .leave-add{display:inline-block;background:#fde6e6;color:#a83838;font-size:14px;font-weight:700;padding:2px 8px;border-radius:6px;margin-left:4px;align-self:center;line-height:1.4;cursor:pointer;transition:all .15s ease}.roster-page .summary-card .leave-add:hover{background:#fbd5d5;transform:translateY(-1px);box-shadow:0 2px 4px #a8383833}.roster-page .summary-card .leave-add.minus{background:#e3f0ec;color:#0f4f4d}.roster-page .summary-warn{background:#fff8e1;border:1px solid #f5cf72;color:#5e4914;padding:12px 18px;border-radius:10px;margin:10px 28px 0;font-size:15px;line-height:1.7;letter-spacing:1px}.roster-page .summary-warn>div+div{margin-top:4px}.roster-page .schedule-wrap{max-width:1400px;margin:0 auto;padding:0 28px 60px}.roster-page .schedule-card{background:linear-gradient(180deg,#fffefa,#faf6e8);border-radius:18px;padding:26px 30px 30px;box-shadow:var(--shadow-md);border:1px solid rgba(15,79,77,.06)}.roster-page .schedule-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:18px}.roster-page .schedule-head .title{font-family:"Noto Serif TC",serif;color:var(--teal-900);font-weight:700;font-size:22px;letter-spacing:3px}.roster-page .schedule-head .sub{color:var(--muted);font-size:12px;letter-spacing:2px}.roster-page .sheets-link{color:var(--teal-700);font-size:12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer;border:1px solid rgba(31,138,134,.3);border-radius:999px;padding:6px 12px}.roster-page .sheets-link:hover{background:var(--teal-50)}.roster-page table.schedule{width:100%;border-collapse:separate;border-spacing:0;font-size:17px;table-layout:fixed}.roster-page table.schedule thead th{font-family:"Noto Serif TC",serif;font-weight:700;color:var(--teal-800);font-size:18px;padding:14px 4px;letter-spacing:3px;text-align:center}.roster-page table.schedule thead th.first{text-align:left;padding-left:10px;width:60px}.roster-page table.schedule thead th.shift{width:50px}.roster-page table.schedule tbody tr.week-block td:first-child{background:var(--teal-50);font-family:"Noto Serif TC",serif;color:var(--teal-800);font-weight:600;font-size:16px;border-radius:12px 0 0 12px;text-align:center}.roster-page table.schedule td{padding:3px 4px;text-align:center;background:#fff;border-bottom:1px solid rgba(15,79,77,.06)}.roster-page table.schedule tr.shift-row-last td{border-bottom:none}.roster-page table.schedule tr.week-block td:nth-child(2){color:var(--muted);font-size:12px;letter-spacing:1px;background:#fff;border-left:1px solid var(--line)}.roster-page table.schedule tr.week-block td:last-child{border-radius:0 12px 12px 0;border-right:1px solid var(--line)}.roster-page table.schedule tr.shift-row-早 td:first-child{color:var(--A-fg)!important;font-weight:600}.roster-page table.schedule tr.shift-row-午 td:first-child{color:#9a6a1f!important;font-weight:600}.roster-page table.schedule tr.shift-row-晚 td:first-child{color:var(--B-fg)!important;font-weight:600}.roster-page table.schedule .date-row td{background:transparent!important;border:none!important;color:var(--teal-900);font-size:17px;padding:8px 4px 4px;font-weight:700;letter-spacing:1px}.roster-page table.schedule .date-row td.week-cell{border-radius:12px 0 0 12px!important;vertical-align:middle!important;text-align:center!important;padding:0!important}.roster-page .name-pill{display:inline-block;padding:6px 14px;border-radius:8px;font-family:"Noto Serif TC",serif;font-size:18px;font-weight:500;letter-spacing:1px;cursor:pointer;transition:all .15s ease;min-width:70px;max-width:100%;box-sizing:border-box;word-break:break-word;line-height:1.3}@media (max-width:1100px){.roster-page .name-pill{min-width:50px;padding:5px 8px;font-size:16px}}@media (max-width:720px){.roster-page .name-pill{min-width:0;padding:4px 6px;font-size:14px;letter-spacing:0}}.roster-page .name-pill.A{background:var(--A-bg);color:var(--A-fg)}.roster-page .name-pill.B{background:var(--B-bg);color:var(--B-fg)}.roster-page .name-pill.C{background:var(--C-bg);color:var(--C-fg)}.roster-page .name-pill.D{background:var(--D-bg);color:var(--D-fg)}.roster-page .palette-2 .name-pill.A,.roster-page .palette-2 .summary-card.A .val .days{background:var(--p2-A-bg);color:var(--p2-A-fg)}.roster-page .palette-2 .name-pill.B,.roster-page .palette-2 .summary-card.B .val .days{background:var(--p2-B-bg);color:var(--p2-B-fg)}.roster-page .palette-2 .summary-card.A:before{background:var(--p2-A-fg)}.roster-page .palette-2 .summary-card.B:before{background:var(--p2-B-fg)}.roster-page .palette-2 .summary-card.A .val .days,.roster-page .palette-2 .summary-card.B .val .days{background:transparent}.roster-page .palette-4 .name-pill.A{background:var(--p4-A-bg);color:var(--p4-A-fg)}.roster-page .palette-4 .name-pill.B{background:var(--p4-B-bg);color:var(--p4-B-fg)}.roster-page .palette-4 .name-pill.C{background:var(--p4-C-bg);color:var(--p4-C-fg)}.roster-page .palette-4 .name-pill.D{background:var(--p4-D-bg);color:var(--p4-D-fg)}.roster-page .schedule td.cell-A{box-shadow:inset 3px 0 0 var(--A-fg)}.roster-page .schedule td.cell-B{box-shadow:inset 3px 0 0 var(--B-fg)}.roster-page .schedule td.cell-C{box-shadow:inset 3px 0 0 var(--C-fg)}.roster-page .schedule td.cell-D{box-shadow:inset 3px 0 0 var(--D-fg)}.roster-page .name-pill.empty{background:#f5f0e2;color:#ba8;font-style:italic}.roster-page table.schedule td.shift-na{background:#f7f3e8}.roster-page table.schedule td.shift-na .shift-na-mark{color:#cfc6ad;font-size:13px}.roster-page .name-pill:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}.roster-page .name-pill.leave{text-decoration:line-through;opacity:.55;position:relative}.roster-page .name-pill.support{background:#fff3da;color:#9a6a1f;border:1px dashed #d6a44a}.roster-page .modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1e1e8c;z-index:100;display:none;align-items:center;justify-content:center;padding:20px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.roster-page .modal-back.show{display:flex}.roster-page .modal{background:#fbf8f0;border-radius:18px;width:100%;max-width:760px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);border:1px solid rgba(15,79,77,.1)}.roster-page .modal-head{padding:22px 28px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.roster-page .modal-head h3{margin:0;font-family:"Noto Serif TC",serif;color:var(--teal-900);font-size:26px;letter-spacing:2px;font-weight:600}.roster-page .modal-close{border:none;background:transparent;font-size:22px;color:var(--muted);cursor:pointer}.roster-page .modal-body{padding:22px 28px}.roster-page .modal-foot{padding:14px 28px 22px;display:flex;justify-content:flex-end;gap:10px;border-top:1px solid var(--line)}.roster-page .form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.roster-page .form-row label{font-size:15px;color:var(--muted);letter-spacing:2px}.roster-page .form-row input:not([type=checkbox]):not([type=radio]),.roster-page .form-row select,.roster-page .form-row textarea{padding:13px 18px;border-radius:10px;border:1px solid var(--line);background:#fff;font-size:17px;font-family:inherit;color:var(--ink);width:100%;max-width:100%;box-sizing:border-box;min-width:0}.roster-page .form-row input:focus,.roster-page .form-row select:focus,.roster-page .form-row textarea:focus{outline:none;border-color:var(--teal-600);box-shadow:0 0 0 3px #3fb8b32e}.roster-page .form-row input[type=checkbox],.roster-page .form-row input[type=radio]{width:auto;flex-shrink:0}.roster-page .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.roster-page .form-grid-3{grid-template-columns:1fr 1fr 1fr}.roster-page .form-grid>.form-row,.roster-page .form-grid-3>.form-row{min-width:0}.roster-page .split-segment{border:1px solid var(--line);border-radius:10px;padding:12px 14px 14px;background:#fbf8f0;margin-bottom:10px}.roster-page .split-segment-head{font-family:"Noto Serif TC",serif;color:var(--teal-800);letter-spacing:3px;font-size:14px;font-weight:600;margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--line)}@media (max-width: 620px){.roster-page .split-segment .form-grid-3{grid-template-columns:1fr 1fr}.roster-page .split-segment .form-grid-3>.form-row:last-child{grid-column:span 2}}.roster-page .section-h{margin:28px 0 6px;font-family:"Noto Serif TC",serif;color:var(--teal-800);letter-spacing:3px;font-size:20px;font-weight:600;padding-bottom:8px;border-bottom:1px solid var(--line)}.roster-page .section-desc{font-size:15px;color:var(--muted);line-height:1.7;margin-bottom:14px}.roster-page .section-desc code{background:var(--teal-50);color:var(--teal-800);padding:1px 7px;border-radius:4px;font-size:12px;font-family:"Noto Serif TC",serif}.roster-page .cycle-pattern{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}.roster-page .cycle-cell{display:flex;flex-direction:column;align-items:center;gap:4px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 10px 10px;min-width:62px}.roster-page .cycle-cell .cyc-idx{font-family:Noto Sans TC,sans-serif;font-weight:600;color:var(--teal-700);font-size:13px}.roster-page .cycle-cell select{border:none;background:transparent;font-family:"Noto Serif TC",serif;font-size:15px;font-weight:600;text-align:center;color:var(--ink);padding:2px 4px;cursor:pointer;outline:none}.roster-page .cycle-cell.s-早{background:var(--A-bg)}.roster-page .cycle-cell.s-午{background:#fff5e0}.roster-page .cycle-cell.s-晚{background:var(--B-bg)}.roster-page .cycle-cell.s-出勤{background:#e3f0ec}.roster-page .cycle-cell.s-休{background:#f3f0e8}.roster-page .employee-start-row{display:grid;grid-template-columns:50px 1fr 110px 1fr;gap:12px;align-items:center;margin-bottom:8px;padding:8px 10px;background:#fff;border-radius:10px;border:1px solid var(--line)}.roster-page .employee-start-row .group-tag{text-align:center;font-weight:600;padding:6px 0;border-radius:6px;font-family:"Noto Serif TC",serif;font-size:14px}.roster-page .employee-start-row .preview{display:flex;gap:3px;flex-wrap:wrap;font-size:11px}.roster-page .preview-pill{padding:2px 6px;border-radius:4px;font-family:"Noto Serif TC",serif;background:#f5f0e2;color:var(--muted)}.roster-page .preview-pill.s-早{background:var(--A-bg);color:var(--A-fg)}.roster-page .preview-pill.s-午{background:#fff5e0;color:#9a6a1f}.roster-page .preview-pill.s-晚{background:var(--B-bg);color:var(--B-fg)}.roster-page .preview-pill.s-出勤{background:#e3f0ec;color:var(--teal-800)}.roster-page .preview-pill.s-休{background:#e8e3d3;color:#7a7560}.roster-page .pill-tag{display:inline-block;padding:4px 10px;border-radius:6px;font-size:12px;letter-spacing:1px;font-family:"Noto Serif TC",serif;margin:0 4px 0 0}.roster-page .pill-tag.A{background:var(--A-bg);color:var(--A-fg)}.roster-page .pill-tag.B{background:var(--B-bg);color:var(--B-fg)}.roster-page .pill-tag.C{background:var(--C-bg);color:var(--C-fg)}.roster-page .pill-tag.D{background:var(--D-bg);color:var(--D-fg)}.roster-page .employee-row{display:grid;grid-template-columns:60px 1fr 100px 50px;gap:10px;align-items:center;margin-bottom:10px}.roster-page .group-tag{text-align:center;font-weight:600;padding:8px;border-radius:8px;font-family:"Noto Serif TC",serif}.roster-page .icon-btn{background:transparent;border:1px solid var(--line);border-radius:8px;padding:6px 10px;cursor:pointer;color:var(--muted)}.roster-page .icon-btn:hover{color:#c14a4a;border-color:#e0aaaa}.roster-page .records-wrap{max-width:1400px;margin:0 auto;padding:0 28px 60px}.roster-page .records-list{background:#fff;border-radius:18px;padding:16px;border:1px solid var(--line)}.roster-page .records-filter-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 18px;margin-bottom:16px}.roster-page .records-filter-bar .rf-item{display:flex;flex-direction:column;gap:4px;flex:1 1 160px;min-width:140px}.roster-page .records-filter-bar .rf-item label{font-size:12px;letter-spacing:1.5px;color:var(--muted);font-weight:500}.roster-page .records-filter-bar .rf-item select{padding:8px 12px;border-radius:8px;border:1px solid var(--line);background:#fff;font-size:14px;font-family:inherit;color:var(--ink);width:100%;box-sizing:border-box;min-width:0;cursor:pointer}.roster-page .records-filter-bar .rf-item select:focus{outline:none;border-color:var(--teal-600);box-shadow:0 0 0 3px #3fb8b32e}.roster-page .records-filter-bar .rf-reset{flex-shrink:0}@media (max-width: 720px){.roster-page .records-filter-bar .rf-item{flex:1 1 calc(50% - 6px)}}.roster-page .records-pager{display:flex;align-items:center;justify-content:center;gap:14px;padding:18px 14px 6px;flex-wrap:wrap}.roster-page .records-pager .pager-btn{padding:8px 18px;font-size:14px}.roster-page .records-pager .pager-btn[disabled]{opacity:.4;cursor:not-allowed}.roster-page .records-pager .pager-info{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--ink)}.roster-page .records-pager .pager-jump{width:60px;padding:6px 8px;border-radius:6px;border:1px solid var(--line);text-align:center;font-size:14px;font-family:inherit;box-sizing:border-box;min-width:0}.roster-page .records-pager .pager-jump:focus{outline:none;border-color:var(--teal-600);box-shadow:0 0 0 2px #3fb8b32e}.roster-page .records-pager .pager-meta{color:var(--muted);font-size:12px;margin-left:6px}.roster-page .records-pager-meta{text-align:center;color:var(--muted);font-size:13px;padding:14px 0 6px}.roster-page .record-item{display:grid;grid-template-columns:90px 70px 80px 90px 90px 60px 1fr 1fr 130px;gap:12px;align-items:center;padding:12px 14px;border-radius:12px;transition:background .2s ease;font-size:14px}.roster-page .record-item:hover{background:var(--teal-50)}.roster-page .record-item>div{overflow:hidden;text-overflow:ellipsis;word-break:break-word}.roster-page .record-item .type-tag{padding:4px 10px;border-radius:6px;font-size:12px;text-align:center;letter-spacing:1px}.roster-page .type-tag.leave{background:#fdecec;color:#a83838}.roster-page .type-tag.support{background:#fff3da;color:#9a6a1f}.roster-page .status-tag{padding:4px 10px;border-radius:6px;font-size:12px;text-align:center}.roster-page .status-tag.pending{background:#f3eedb;color:#7a6328}.roster-page .status-tag.approved{background:#e0f0e3;color:#3a6b50}.roster-page .status-tag.rejected{background:#f1e3e3;color:#8a3838}.roster-page table.ptc-template-table{width:100%;border-collapse:collapse;margin-bottom:14px;background:#fff;border-radius:10px;overflow:hidden;box-shadow:var(--shadow-sm)}.roster-page table.ptc-template-table th{background:var(--teal-50);color:var(--teal-900);padding:10px 8px;font-family:"Noto Serif TC",serif;font-size:14px;letter-spacing:2px;border-bottom:1px solid var(--line)}.roster-page table.ptc-template-table td{padding:8px 10px;border-bottom:1px solid #f0ece2;vertical-align:middle;text-align:center}.roster-page table.ptc-template-table td:first-child{font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-900);background:#faf6e8;width:80px}.roster-page table.ptc-template-table .ptc-shift-cell{display:flex;align-items:center;justify-content:center;gap:6px}.roster-page table.ptc-template-table .ptc-shift-cell input[type=checkbox]{width:18px;height:18px;cursor:pointer}.roster-page table.ptc-template-table .ptc-shift-cell input[type=number]{width:54px;padding:5px 6px;text-align:center;border:1px solid var(--line);border-radius:6px}.roster-page table.ptc-template-table .ptc-shift-cell input[type=number]:disabled{background:#f5f5f5;color:#aaa}.roster-page .pattern-choice-btn{background:#fff;border:1.5px solid var(--line);transition:all .15s ease;cursor:pointer}.roster-page .pattern-choice-btn:hover{border-color:var(--teal-700);background:var(--teal-50);transform:translateY(-1px);box-shadow:var(--shadow-sm)}.roster-page .name-pill.ptc-multi{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 10px;line-height:1.3}.roster-page .name-pill.ptc-single{font-size:16px;padding:7px 18px}.roster-page .ptc-name-line{display:block;font-size:13px}.roster-page .ptc-bulk-toolbar{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 16px;margin-bottom:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.roster-page .ptc-bulk-info{font-family:"Noto Serif TC",serif;font-size:14px;color:var(--teal-800);letter-spacing:1px;margin-right:6px}.roster-page .ptc-bulk-dow{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:#f7f3e8;border:1px solid var(--line);border-radius:8px;cursor:pointer;font-size:13px;transition:all .15s ease}.roster-page .ptc-bulk-dow:has(input:checked){background:var(--teal-700);color:#fff;border-color:var(--teal-700)}.roster-page .ptc-staff-pool{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin-bottom:14px;position:sticky;top:8px;z-index:20;box-shadow:0 2px 8px #0000000f}@media (max-width: 720px){.roster-page .ptc-staff-pool{position:static;box-shadow:none}}.roster-page .ptc-staff-pool-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;gap:12px}.roster-page .ptc-staff-pool-title{font-family:"Noto Serif TC",serif;font-size:14px;color:var(--teal-800);letter-spacing:1.5px}.roster-page .ptc-staff-pool-hint{font-size:11px;color:var(--muted);font-family:Noto Sans TC,sans-serif;letter-spacing:1px;font-weight:400;margin-left:6px}.roster-page .ptc-staff-chips{display:flex;flex-wrap:wrap;gap:8px}.roster-page .ptc-staff-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:#f0e6d6;border:1px solid #d4c8a8;border-radius:18px;font-size:14px;color:var(--teal-900);cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .15s ease}.roster-page .ptc-staff-chip:hover{background:#e6d8b8;transform:translateY(-1px);box-shadow:0 2px 6px #0000001a}.roster-page .ptc-staff-chip:active{cursor:grabbing}.roster-page .ptc-staff-chip.dragging{opacity:.5}.roster-page .ptc-staff-name{font-weight:500}.roster-page .ptc-staff-del{background:transparent;border:none;color:#a83838;cursor:pointer;font-size:16px;line-height:1;padding:0 2px;border-radius:50%;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.roster-page .ptc-staff-del:hover{background:#fde6e6}.roster-page table.schedule td.ptc-drop-target{background:#e8f5e9!important;box-shadow:inset 0 0 0 2px var(--teal-700)}.roster-page table.ptc-hours-table{width:100%;border-collapse:separate;border-spacing:0;margin-bottom:18px;background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;table-layout:fixed}.roster-page table.ptc-hours-table th{background:#f7f3e8;padding:8px 0;font-family:"Noto Serif TC",serif;color:var(--teal-800);font-size:14px;letter-spacing:2px;border-bottom:1px solid var(--line);font-weight:600}.roster-page table.ptc-hours-table td.ptc-hours-cell{text-align:center;padding:0;font-family:Noto Sans TC,sans-serif;font-size:14px;color:var(--ink);background:#fff;border-right:1px solid #f4ead9;transition:background .15s ease;height:72px;vertical-align:middle}.roster-page table.ptc-hours-table td.ptc-hours-cell:last-child{border-right:none}.roster-page table.ptc-hours-table td.ptc-hours-cell.editable{cursor:pointer}.roster-page table.ptc-hours-table td.ptc-hours-cell.editable:hover{background:var(--teal-50)}.roster-page .ptc-hours-line{height:36px;line-height:36px;padding:0 6px;border-bottom:1px dashed #f4ead9;font-size:13px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.roster-page .ptc-hours-line:last-child{border-bottom:none}.roster-page .ptc-hours-empty{color:#bbb;font-size:18px;line-height:36px}.roster-page table.schedule td.ptc-out-of-month{background:repeating-linear-gradient(135deg,#fafafa 0,#fafafa 6px,#f4f4f0 6px,#f4f4f0 12px)!important;color:#ccc;border-color:transparent}.roster-page table.schedule td.ptc-cell-rest{background:#fdecec!important;color:#a83838;font-family:"Noto Serif TC",serif}.roster-page .ptc-rest-text{font-size:18px;font-weight:600;letter-spacing:2px}.roster-page .parttime-cal-toolbar{margin-bottom:12px;padding:10px 16px;background:#fef3c7;border:1px solid #d4a83a;border-radius:10px;color:#5e4914;font-size:14px;letter-spacing:1px}.roster-page table.parttime-cal{width:100%;border-collapse:separate;border-spacing:6px;table-layout:fixed}.roster-page table.parttime-cal th{padding:10px 0;background:transparent;color:var(--teal-900);font-family:"Noto Serif TC",serif;font-size:18px;font-weight:600;letter-spacing:3px}.roster-page table.parttime-cal td{background:#fff;border:1px solid var(--line);border-radius:10px;vertical-align:top;padding:6px;height:120px}.roster-page table.parttime-cal td.ptc-empty{background:transparent;border:none}.roster-page .ptc-date{font-family:Noto Sans TC,sans-serif;color:var(--teal-700);font-size:14px;font-weight:600;margin-bottom:4px;padding-left:4px;display:flex;align-items:center;justify-content:space-between}.roster-page .ptc-tweak-btn{background:transparent;border:1px solid transparent;color:#bbb;font-size:14px;cursor:pointer;padding:0 6px;border-radius:4px;transition:all .15s ease;font-family:inherit}.roster-page .ptc-tweak-btn:hover{color:var(--teal-800);background:var(--teal-50);border-color:var(--teal-700)}.roster-page .ptc-ov-mark{color:#d4a83a;font-size:14px;margin-left:4px;font-weight:700}.roster-page td.ptc-day.ptc-ov{background:#fffbf0}.roster-page .ptc-slot-rest{text-align:center;color:#a83838;font-family:"Noto Serif TC",serif;font-size:18px;font-weight:600;padding:14px 0;background:#fdecec;border-radius:6px;margin-top:4px;letter-spacing:2px}.roster-page .ptc-slot{display:flex;align-items:center;justify-content:space-between;background:var(--teal-50);border:1px dashed transparent;border-radius:6px;padding:5px 8px;margin-top:3px;cursor:pointer;transition:all .15s ease;min-height:30px}.roster-page .ptc-slot:hover{background:#d8eae6;border-color:var(--teal-700)}.roster-page .ptc-slot-empty{background:#faf6e8;border:1px dashed #d4c8a8;color:#a99d80}.roster-page .ptc-slot-lbl{font-size:11px;color:var(--muted);letter-spacing:1px}.roster-page .ptc-slot-name{font-family:"Noto Serif TC",serif;font-size:14px;font-weight:600;color:var(--teal-900);padding:2px 10px;border-radius:6px;background:#e9f1ea}.roster-page .ptc-slot-empty .ptc-slot-name{color:#bbb;background:transparent;font-size:18px;font-weight:400}@media (max-width:900px){.roster-page table.parttime-cal td{height:80px;padding:4px}.roster-page .ptc-date{font-size:12px}.roster-page .ptc-slot{padding:3px 5px}.roster-page .ptc-slot-lbl{font-size:10px}.roster-page .ptc-slot-name{font-size:12px}}.roster-page .loading-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#fbf8f0eb;display:flex;align-items:center;justify-content:center;z-index:200;flex-direction:column;gap:14px}.roster-page .loading-overlay.hide{display:none}.roster-page .spinner{width:42px;height:42px;border:3px solid var(--teal-100);border-top-color:var(--teal-700);border-radius:50%;animation:roster-page-spin .9s linear infinite}@keyframes roster-page-spin{to{transform:rotate(360deg)}}.roster-page .loading-text{font-family:"Noto Serif TC",serif;color:var(--teal-800);letter-spacing:3px}.roster-page .toast-stack{position:fixed;top:24px;right:24px;z-index:300;display:flex;flex-direction:column;gap:10px}.roster-page .toast{background:#fff;border-left:4px solid var(--teal-600);padding:12px 18px;border-radius:8px;box-shadow:var(--shadow-md);font-size:14px;min-width:240px;animation:roster-page-slideIn .3s ease}.roster-page .toast.error{border-left-color:#c14a4a}.roster-page .toast.warn{border-left-color:#d68a3a}@keyframes roster-page-slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:none}}.roster-page .swap-context{background:var(--teal-50);border-radius:12px;padding:14px 18px;margin-bottom:18px;display:flex;flex-direction:column;gap:6px}.roster-page .swap-context-row{display:flex;align-items:baseline;gap:14px}.roster-page .swap-context-lbl{font-size:13px;letter-spacing:2px;color:var(--muted);min-width:90px}.roster-page .swap-context-val{font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-900);font-size:18px;letter-spacing:1px}.roster-page .swap-color-hint{padding:10px 16px;border-radius:10px;font-size:14px;font-weight:500;margin:0 0 18px;text-align:center;letter-spacing:2px}.roster-page .pending-tag{display:inline-block;margin-left:6px;padding:2px 8px;background:#fef3c7;color:#5e4914;border-radius:6px;font-size:12px;font-weight:600;letter-spacing:1px}.roster-page .record-item.pending{background:linear-gradient(90deg,rgba(255,243,204,.4),transparent);border-left:3px solid #d4a83a;padding-left:12px}.roster-page .swap-partner-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px;min-height:50px;padding:10px;background:var(--teal-50);border-radius:10px;border:1px dashed var(--teal-700)}.roster-page .swap-partner-pills:empty:before,.roster-page .swap-partner-pills .empty-msg{content:""}.roster-page .swap-partner-pills .empty-msg{color:#a83838;font-size:14px;padding:8px 12px;letter-spacing:1px}.roster-page .partner-pill{padding:9px 18px;border-radius:999px;border:1.5px solid var(--line);background:#fff;font-family:"Noto Serif TC",serif;font-size:16px;font-weight:500;letter-spacing:1px;cursor:pointer;color:var(--ink);transition:all .15s ease;display:inline-flex;align-items:center;gap:6px}.roster-page .partner-pill .group-tag{font-size:11px;padding:1px 6px;border-radius:4px;background:var(--teal-50);color:var(--teal-800);font-weight:600;letter-spacing:0}.roster-page .partner-pill:hover{border-color:var(--teal-700);color:var(--teal-800)}.roster-page .partner-pill.active{background:#3b6e63;color:#fff;border-color:#3b6e63;box-shadow:var(--shadow-sm)}.roster-page .partner-pill.active .group-tag{background:#ffffff40;color:#fff}.roster-page .apply-banner{background:#eaf6f5;border:1px solid var(--teal-700);color:var(--teal-800);padding:12px 16px;border-radius:10px;margin-bottom:18px;font-size:14px;letter-spacing:1px;line-height:1.6}.roster-page .apply-context{background:linear-gradient(135deg,#eaf6f5,#f5f1e6);border:1.5px solid var(--teal-700);border-radius:12px;padding:14px 18px;margin-bottom:20px}.roster-page .apply-context .ac-row{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.roster-page .apply-context .ac-cell{text-align:center;padding:4px 6px;border-right:1px dashed rgba(63,184,179,.3)}.roster-page .apply-context .ac-cell:last-child{border-right:none}.roster-page .apply-context .ac-label{font-size:11px;color:var(--muted);letter-spacing:2px;margin-bottom:4px}.roster-page .apply-context .ac-val{font-family:"Noto Serif TC",serif;font-size:16px;font-weight:600;color:var(--teal-900);letter-spacing:1px}.roster-page .apply-context .ac-val.ac-name{color:#3b6e63;font-size:18px}@media (max-width:600px){.roster-page .apply-context .ac-row{grid-template-columns:repeat(2,1fr);gap:8px 12px}.roster-page .apply-context .ac-cell{border-right:none;border-bottom:1px dashed rgba(63,184,179,.3);padding-bottom:8px}}.roster-page .unsaved-banner{position:fixed;bottom:20px;left:20px;transform:translate(-120%);z-index:90;background:#fff;border:2px solid #d4a83a;box-shadow:0 8px 22px #0000001f;border-radius:12px;padding:10px 14px;display:flex;align-items:center;gap:14px;transition:transform .35s cubic-bezier(.5,0,.3,1);max-width:380px}.roster-page .unsaved-banner.show{transform:translate(0)}.roster-page .unsaved-banner.idle{border-color:#cfc7ad;background:#fdfaf0;opacity:.85}.roster-page .unsaved-banner.idle:hover{opacity:1}.roster-page .unsaved-banner.idle .ub-dot{background:#a99d80;box-shadow:none;animation:none}.roster-page .unsaved-banner.idle .ub-title{color:#7a6c4e}.roster-page .unsaved-banner.idle .btn.primary{opacity:.5;cursor:not-allowed}.roster-page .unsaved-banner .ub-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.roster-page .unsaved-banner .ub-title{font-size:13px;font-weight:600;color:var(--teal-900);white-space:nowrap}.roster-page .unsaved-banner .ub-sub{display:none}.roster-page .unsaved-banner .ub-actions{display:flex;gap:6px;flex-shrink:0}.roster-page .unsaved-banner .ub-actions .btn{padding:5px 10px;font-size:12px}@media (max-width: 720px){.roster-page .unsaved-banner{top:auto;bottom:16px;right:16px;left:16px;max-width:none}}.roster-page .unsaved-banner .ub-info{display:flex;align-items:center;gap:12px;flex:1}.roster-page .unsaved-banner .ub-dot{width:12px;height:12px;border-radius:50%;background:#d4a83a;box-shadow:0 0 0 4px #d4a83a40;animation:roster-page-pulse 1.5s ease-in-out infinite}@keyframes roster-page-pulse{0%,to{box-shadow:0 0 0 4px #d4a83a40}50%{box-shadow:0 0 0 8px #d4a83a0d}}.roster-page .unsaved-banner .ub-title{font-family:"Noto Serif TC",serif;font-size:16px;font-weight:600;color:var(--teal-900);letter-spacing:1px}.roster-page .unsaved-banner .ub-title span{color:#a83838;font-size:18px;font-weight:700;margin:0 2px}.roster-page .unsaved-banner .ub-sub{font-size:12px;color:var(--muted);letter-spacing:1px;margin-top:2px}.roster-page .unsaved-banner .ub-actions{display:flex;gap:8px;flex-shrink:0}.roster-page .resolved-applicant{padding:14px 18px;border-radius:10px;background:var(--teal-50);color:var(--teal-900);font-family:"Noto Serif TC",serif;font-size:18px;font-weight:600;letter-spacing:2px;border:1.5px solid var(--teal-700)}.roster-page .resolved-applicant.empty{background:#f5f1e6;color:#a99d80;border:1.5px dashed #d4c8a8;font-style:italic;font-weight:400;font-size:15px}.roster-page .resolved-applicant.not-found{background:#fdecec;color:#a83838;border-color:#c14a4a;font-size:15px;font-weight:500}.roster-page .reason-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.roster-page .reason-pill{padding:9px 18px;border-radius:999px;border:1.5px solid var(--line);background:#fff;font-family:"Noto Serif TC",serif;font-size:16px;font-weight:500;letter-spacing:1px;cursor:pointer;color:var(--ink);transition:all .15s ease}.roster-page .reason-pill:hover{border-color:var(--teal-700);color:var(--teal-800)}.roster-page .reason-pill.active{background:var(--teal-700);color:#fff;border-color:var(--teal-700);box-shadow:var(--shadow-sm)}.roster-page .reason-pill[data-mode=leave].active{background:#a83838;border-color:#a83838}.roster-page .reason-pill[data-mode=support].active{background:#c4922a;border-color:#c4922a}.roster-page .swap-color-hint.h-gray{background:#e8e6df;color:#3a3a3a}.roster-page .swap-color-hint.h-yellow{background:#fef3c7;color:#5e4914}.roster-page .swap-color-hint.h-red{background:#fde6e6;color:#a83838}.roster-page .name-pill.mode-swap{background:#dcd9d0!important;color:#2a2a2a!important;border:1px solid #b8b4a8;text-decoration:none!important;opacity:1!important}.roster-page .name-pill.mode-support{background:#fef3c7!important;color:#5e4914!important;border:1px solid #e8d28a;text-decoration:none!important;opacity:1!important;line-height:1.25}.roster-page .name-pill.mode-support .cover-branch{display:block;font-size:.72em;color:#8a6e2a;font-weight:400;letter-spacing:1px;margin-top:2px;font-family:Noto Sans TC,sans-serif;word-break:break-word;white-space:normal;line-height:1.3}.roster-page .name-pill.mode-leave{background:#fde6e6!important;color:#a83838!important;border:1px solid #d6a4a4;text-decoration:none!important;opacity:1!important;line-height:1.25}.roster-page .name-pill.mode-leave .cover-branch{display:block;font-size:.72em;color:#b96363;font-weight:400;letter-spacing:1px;margin-top:2px;font-family:Noto Sans TC,sans-serif;word-break:break-word;white-space:normal;line-height:1.3}.roster-page .name-pill .reason-badge{display:block;font-size:11px;font-weight:400;margin-top:2px;letter-spacing:1px;opacity:.85}.roster-page .name-pill .cell-note{display:block;font-size:10px;font-weight:400;margin-top:3px;line-height:1.3;letter-spacing:.5px;opacity:.9;padding-top:2px;border-top:1px dashed currentColor;word-break:break-word;white-space:normal}.roster-page .name-pill .split-period{display:inline-block;font-size:10px;font-weight:700;padding:1px 4px;margin-right:3px;border-radius:3px;background:#00000014;letter-spacing:1px}.roster-page .name-pill .split-sep{display:block;height:0;margin:3px 0;border-top:1px dashed currentColor;opacity:.4}.roster-page .cell-menu{position:fixed;z-index:120;background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);border:1px solid rgba(15,79,77,.1);padding:8px;min-width:240px;animation:roster-page-cellPop .18s ease-out}@keyframes roster-page-cellPop{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:none}}.roster-page .cell-menu-head{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:6px}.roster-page .cell-menu-title{font-size:11px;letter-spacing:2px;color:var(--muted)}.roster-page .cell-menu-name{font-family:"Noto Serif TC",serif;font-size:16px;font-weight:600;color:var(--teal-900);margin-top:2px}.roster-page .cell-menu-btn{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:13px;font-family:inherit;color:var(--ink);text-align:left;transition:background .15s ease}.roster-page .cell-menu-btn:hover{background:var(--teal-50)}.roster-page .cell-menu-btn .ic{font-size:16px}.roster-page .cell-menu-btn.close{margin-top:4px;border-top:1px solid var(--line);padding-top:10px;color:var(--muted);justify-content:center;border-radius:0 0 8px 8px}.roster-page .a4-portrait{width:794px;min-height:1123px;background:#fbf8f0;padding:36px 40px;box-sizing:border-box;font-family:Noto Sans TC,sans-serif;color:var(--ink)}.roster-page .a4-portrait table.schedule{font-size:11px}.roster-page .a4-portrait .name-pill{font-size:11px;padding:3px 6px;min-width:auto}.roster-page .empty-state{text-align:center;padding:40px 20px;color:var(--muted)}.roster-page .empty-state .ico{font-size:42px;margin-bottom:10px;opacity:.6}.roster-page .empty-state .msg{font-family:"Noto Serif TC",serif;letter-spacing:2px;font-size:15px}.roster-page .setup-screen{max-width:720px;margin:80px auto;background:linear-gradient(180deg,#fffefa,#faf6e8);padding:44px 48px;border-radius:22px;box-shadow:var(--shadow-md);border:1px solid rgba(15,79,77,.08)}.roster-page .setup-screen h2{font-family:"Noto Serif TC",serif;color:var(--teal-900);margin:0 0 8px;letter-spacing:3px}.roster-page .setup-screen .desc{color:var(--muted);font-size:14px;line-height:1.7;margin-bottom:24px}.roster-page .setup-screen .step{background:#fff;padding:14px 18px;border-radius:12px;margin-bottom:10px;border:1px solid var(--line);font-size:13px;line-height:1.7}.roster-page .setup-screen .step b{color:var(--teal-800)}.roster-page .setup-screen code{background:var(--teal-50);padding:2px 6px;border-radius:4px;font-size:12px;color:var(--teal-800)}.roster-page .period-banner{background:linear-gradient(90deg,var(--teal-700),var(--teal-600));color:#fff;padding:12px 22px;border-radius:14px;margin:0 0 14px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;box-shadow:var(--shadow-sm)}.roster-page .period-banner .lbl{font-family:Cormorant Garamond,serif;font-style:italic;letter-spacing:3px;opacity:.85;font-size:13px}.roster-page .period-banner .vals{font-weight:600;letter-spacing:2px;font-size:15px}.roster-page .period-nav{margin-left:auto;display:flex;align-items:center;gap:8px;background:#ffffff26;border:1px solid rgba(255,255,255,.3);border-radius:10px;padding:4px 6px}.roster-page .period-arrow{background:transparent;border:none;color:#fff;font-size:24px;line-height:1;width:34px;height:34px;border-radius:8px;cursor:pointer;font-family:serif;transition:background .15s ease}.roster-page .period-arrow:hover:not(:disabled){background:#fff3}.roster-page .period-arrow:disabled{opacity:.3;cursor:not-allowed}.roster-page .period-range{color:#fff;font-size:14px;font-weight:600;letter-spacing:1px;min-width:175px;text-align:center;padding:0 6px}.roster-page .login-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500;display:flex;align-items:center;justify-content:center;padding:20px;background:radial-gradient(900px 500px at 20% 10%,rgba(63,184,179,.18),transparent 60%),radial-gradient(700px 400px at 80% 90%,rgba(247,241,227,.7),transparent 60%),linear-gradient(180deg,#f3ede0,#ecf4f2)}.roster-page .login-overlay.hide{display:none}.roster-page .login-card{width:100%;max-width:440px;background:linear-gradient(180deg,#fffefa,#faf6e8);padding:44px 40px;border-radius:24px;box-shadow:var(--shadow-lg);border:1px solid rgba(15,79,77,.08)}.roster-page .login-brand{display:flex;flex-direction:column;align-items:center;gap:14px;margin-bottom:28px}.roster-page .login-brand .logo{width:72px;height:72px;border-radius:50%;box-shadow:0 6px 20px #0f4f4d2e}.roster-page .login-brand .logo svg{width:100%;height:100%}.roster-page .login-brand .zh{font-family:"Noto Serif TC",serif;font-weight:600;color:var(--teal-900);font-size:26px;letter-spacing:6px}.roster-page .login-brand .en{font-family:Cormorant Garamond,serif;font-style:italic;color:var(--teal-700);font-size:14px;letter-spacing:4px}.roster-page .login-brand .sys{color:var(--muted);font-size:11px;letter-spacing:4px}.roster-page .login-divider{display:flex;align-items:center;gap:12px;color:var(--teal-700);margin:14px 0 22px}.roster-page .login-divider .line{flex:1;height:1px;background:currentColor;opacity:.3}.roster-page .login-divider .dia{width:5px;height:5px;background:currentColor;transform:rotate(45deg)}.roster-page .login-form .form-row{margin-bottom:14px}.roster-page .login-form input{padding:12px 16px;font-size:15px}.roster-page .login-actions{display:flex;flex-direction:column;gap:10px;margin-top:18px}.roster-page .login-btn{width:100%;padding:13px;border-radius:12px;background:var(--teal-700);color:#fff;border:none;cursor:pointer;font-family:"Noto Serif TC",serif;font-size:15px;letter-spacing:4px;font-weight:500;transition:all .2s ease}.roster-page .login-btn:hover{background:var(--teal-800);transform:translateY(-1px);box-shadow:var(--shadow-md)}.roster-page .login-hint{text-align:center;font-size:12px;color:var(--muted);margin-top:14px;line-height:1.7}.roster-page .login-hint code{background:var(--teal-50);padding:2px 6px;border-radius:4px;color:var(--teal-800);font-size:11px}.roster-page .login-error{background:#fdecec;color:#a83838;padding:10px 14px;border-radius:10px;font-size:13px;margin-bottom:14px;text-align:center;display:none}.roster-page .login-error.show{display:block}.roster-page .role-badge{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;background:var(--teal-50);color:var(--teal-800);font-size:12px;letter-spacing:2px;font-family:"Noto Serif TC",serif;border:1px solid rgba(31,138,134,.2)}.roster-page .role-badge.admin{background:#fff3da;color:#9a6a1f;border-color:#e8c97a}.roster-page .role-badge.employee{background:var(--teal-50);color:var(--teal-800);border-color:#1f8a8640}.roster-page .role-badge .who{font-weight:600}.roster-page .role-badge .title{opacity:.85}.roster-page[data-role=staff] .admin-only,.roster-page[data-role=employee] .admin-only,.roster-page[data-role=guest] .admin-only{display:none!important}.roster-page .manager-scope-banner{max-width:1400px;padding:10px 18px;background:#fff8e6;border:1px solid #e8c97a;border-radius:10px;color:#7a5a0e;font-size:14px;line-height:1.5;margin:-4px 28px 14px}.roster-page .manager-scope-banner .ico{font-size:18px;margin-right:6px}.roster-page .manager-scope-banner b{color:#9a6a1f}.roster-page .quick-swap-banner{max-width:1400px;margin:-4px 28px 14px;padding:14px 22px;background:linear-gradient(135deg,#d6eef0,#b8e1e3);border:2px solid var(--teal-700);border-radius:12px;color:var(--teal-900);display:flex;align-items:center;justify-content:space-between;gap:16px;box-shadow:0 4px 14px #3fb8b333;animation:roster-page-qsPulse 2s ease-in-out infinite}@keyframes roster-page-qsPulse{0%,to{box-shadow:0 4px 14px #3fb8b333}50%{box-shadow:0 4px 22px #3fb8b373}}.roster-page .quick-swap-banner .qs-info{display:flex;align-items:center;gap:14px}.roster-page .quick-swap-banner .qs-icon{font-size:32px;color:var(--teal-700);background:#fff;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.roster-page .quick-swap-banner .qs-title{font-family:"Noto Serif TC",serif;font-size:17px;font-weight:600;letter-spacing:2px;color:var(--teal-900)}.roster-page .quick-swap-banner .qs-sub{font-size:13px;color:var(--teal-800);margin-top:2px;letter-spacing:1px}.roster-page.quickswap-mode table.schedule td{cursor:pointer}.roster-page.quickswap-mode .name-pill.qs-selected{outline:3px solid var(--teal-700);outline-offset:2px;box-shadow:0 0 0 6px #3fb8b340,0 4px 14px #3fb8b380;transform:scale(1.05);z-index:5;position:relative}.roster-page.quickswap-mode .name-pill:hover{outline:2px dashed var(--teal-600);outline-offset:2px}.roster-page[data-role=admin] .guest-only,.roster-page[data-role=manager] .guest-only,.roster-page[data-role=employee] .guest-only{display:none!important}.roster-page:not([data-role=employee]) .employee-only{display:none!important}@media (max-width: 800px){.roster-page .header-inner{padding:12px 16px}.roster-page .hero{padding:36px 16px 18px}.roster-page .branch-section,.roster-page .branch-toolbar,.roster-page .position-bar,.roster-page .action-toolbar,.roster-page .summary-row,.roster-page .schedule-wrap,.roster-page .records-wrap{padding-left:16px;padding-right:16px}.roster-page .schedule-card{padding:18px}.roster-page table.schedule{font-size:12px}.roster-page .name-pill{font-size:11px;padding:4px 6px;min-width:auto}.roster-page .form-grid{grid-template-columns:1fr}.roster-page .record-item{grid-template-columns:1fr 1fr;gap:8px}}.inj-page{--ink:#0f1923;--ink2:#3d4f5c;--ink3:#7a8f9e;--line:#e2e8ed;--line2:#f0f4f7;--bg:#f5f7fa;--w:#fff;--teal:#0d9488;--tl:#f0fdfa;--tm:#ccfbf1;--td:#0f766e;--amber:#d97706;--al:#fffbeb;--am:#fde68a;--red:#dc2626;--rl:#fef2f2;--purple:#7c3aed;--pl:#f5f3ff;--pm:#ddd6fe;--r8:8px;--r12:12px;--r16:16px;--sh:0 1px 3px rgba(0,0,0,.08)}.inj-page *{box-sizing:border-box;margin:0;padding:0}.inj-page{font-family:Noto Sans TC,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.6}.inj-page .hd{background:var(--ink);padding:0 20px;height:56px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}.inj-page .hd-logo{display:flex;align-items:center;gap:10px}.inj-page .hd-dot{width:8px;height:8px;border-radius:50%;background:var(--teal);box-shadow:0 0 0 3px #0d948840}.inj-page .hd-title{font-size:16px;font-weight:700;color:#fff;letter-spacing:.5px}.inj-page .hd-st{display:flex;align-items:center;gap:7px;font-size:12px;color:#fff9}.inj-page .sdot{width:7px;height:7px;border-radius:50%;background:#475569}.inj-page .sdot.ok{background:#34d399}.inj-page .sdot.err{background:#f87171}.inj-page .sdot.spin{background:#94a3b8;animation:inj-page-rot .8s linear infinite}@keyframes inj-page-rot{to{transform:rotate(360deg)}}.inj-page main{max-width:1100px;margin:0 auto;padding:20px 16px 80px}.inj-page .card{background:var(--w);border:1px solid var(--line);border-radius:var(--r16);padding:20px;margin-bottom:14px;box-shadow:var(--sh)}.inj-page .card-hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.inj-page .card-title{font-size:15px;font-weight:700}.inj-page .badge{font-size:11.5px;font-weight:600;padding:3px 10px;border-radius:20px}.inj-page .badge-t{background:var(--tm);color:var(--td)}.inj-page .badge-p{background:var(--pm);color:var(--purple)}.inj-page .mode-sw{display:flex;gap:8px;margin-bottom:18px}.inj-page .mbtn{flex:1;padding:11px;border-radius:var(--r12);border:2px solid var(--line);background:var(--w);font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit;color:var(--ink3);transition:all .15s;text-align:center}.inj-page .mbtn.on{border-color:var(--teal);background:var(--tl);color:var(--td)}.inj-page .mbtn:hover:not(.on){border-color:#c8d3db;background:var(--line2)}.inj-page .sg{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:flex-end}@media (max-width:500px){.inj-page .sg{grid-template-columns:1fr 1fr}.inj-page .sg .btn{grid-column:1/-1}}.inj-page .pcard{display:none;margin-top:12px;background:var(--tl);border:1px solid var(--tm);border-radius:var(--r12);padding:14px 16px;animation:inj-page-fu .2s ease}.inj-page .pcard.on{display:flex;gap:12px;align-items:center}@keyframes inj-page-fu{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.inj-page .av{width:44px;height:44px;border-radius:50%;background:var(--teal);color:#fff;font-size:18px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.inj-page .pn{font-size:16px;font-weight:700;color:var(--td)}.inj-page .pm{font-size:12.5px;color:var(--ink3);margin-top:2px}.inj-page .ptag{display:inline-block;background:var(--tm);color:var(--td);font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px;margin-top:4px}.inj-page .nfbox{display:none;margin-top:12px;background:var(--rl);border:1px solid #fecaca;border-radius:var(--r12);padding:13px 16px;font-size:13px;color:var(--red);animation:inj-page-fu .2s ease}.inj-page .nfbox.on{display:block}.inj-page .fg2{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}.inj-page .fg3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px 14px}@media (max-width:560px){.inj-page .fg2{grid-template-columns:1fr}.inj-page .fg3{grid-template-columns:1fr 1fr}.inj-page .bal-summary{grid-template-columns:repeat(2,1fr)}}@media (max-width:360px){.inj-page .fg3{grid-template-columns:1fr}}.inj-page .s2{grid-column:1/-1}.inj-page .field{display:flex;flex-direction:column;gap:5px}.inj-page .field label{font-size:11.5px;font-weight:700;color:var(--ink3);letter-spacing:.3px}.inj-page .req{color:var(--red);margin-left:1px}.inj-page input,.inj-page select,.inj-page textarea{border:1.5px solid var(--line);border-radius:var(--r8);padding:10px 12px;font-size:14px;color:var(--ink);font-family:inherit;outline:none;width:100%;background:var(--w);-webkit-appearance:none;transition:border-color .15s,box-shadow .15s}.inj-page input:focus,.inj-page select:focus,.inj-page textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px #0d94881f}.inj-page select{cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239aa0a6' stroke-width='1.8' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:32px}.inj-page textarea{resize:vertical;min-height:72px}.inj-page .dr{display:flex;gap:8px}.inj-page .dr input[type=date]{flex:2}.inj-page .dr input[type=time]{flex:1.4}.inj-page .tbtn{flex-shrink:0;padding:10px 12px;font-size:12px;font-weight:700;background:var(--tl);color:var(--td);border:1.5px solid var(--tm);border-radius:var(--r8);cursor:pointer;font-family:inherit;white-space:nowrap}.inj-page .tbtn:hover{background:var(--tm)}.inj-page .rem{border:1.5px solid var(--pm);border-radius:var(--r8);padding:12px 14px;background:var(--pl);min-height:44px;display:flex;align-items:center;font-size:15px;font-weight:700;color:var(--purple)}.inj-page .rem.warn{color:var(--amber);border-color:var(--am);background:var(--al)}.inj-page .rem.danger{color:var(--red);border-color:#fecaca;background:var(--rl)}.inj-page .rem.empty{color:var(--ink3);font-weight:400;font-size:13px}.inj-page .div{border:none;border-top:1px solid var(--line2);margin:18px 0}.inj-page .slbl{font-size:11px;font-weight:700;letter-spacing:1px;color:var(--ink3);text-transform:uppercase;margin-bottom:10px}.inj-page .btn{display:inline-flex;align-items:center;gap:7px;padding:11px 22px;border-radius:var(--r12);border:none;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s}.inj-page .btn-t{background:var(--teal);color:#fff;box-shadow:0 2px 8px #0d94884d}.inj-page .btn-t:hover{background:var(--td)}.inj-page .btn-t:active{transform:scale(.98)}.inj-page .btn-g{background:var(--w);color:var(--ink2);border:1.5px solid var(--line)}.inj-page .btn-g:hover{background:var(--line2)}.inj-page .btn-p{background:var(--purple);color:#fff}.inj-page .btn-p:hover{background:#6d28d9}.inj-page .btn-sm{padding:8px 14px;font-size:12.5px;border-radius:var(--r8)}.inj-page .btn-full{width:100%;justify-content:center}.inj-page .bal-summary{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:0}.inj-page .bc{border-radius:var(--r12);padding:14px 16px;border:1.5px solid var(--pm);background:var(--pl);width:100%}.inj-page .bc.warn{border-color:var(--am);background:var(--al)}.inj-page .bc-tag{font-size:10px;font-weight:700;letter-spacing:.5px;color:var(--purple);text-transform:uppercase;margin-bottom:3px}.inj-page .bc.warn .bc-tag{color:var(--amber)}.inj-page .bc-type{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:8px;line-height:1.3}.inj-page .bc-rows{display:grid;grid-template-columns:auto 1fr;gap:3px 8px;font-size:12.5px}.inj-page .bk{color:var(--ink3)}.inj-page .bv{font-weight:700}.inj-page .ok{color:var(--td);font-weight:700}.inj-page .warn-v{color:var(--amber);font-weight:700}.inj-page .danger-v{color:var(--red);font-weight:700}.inj-page .tscroll{overflow-x:auto;border-radius:var(--r12);border:1px solid var(--line)}.inj-page table{width:100%;border-collapse:collapse;font-size:13px}.inj-page thead{background:var(--line2)}.inj-page th{padding:10px 14px;text-align:left;font-size:11.5px;font-weight:700;color:var(--ink3);letter-spacing:.3px;border-bottom:1px solid var(--line);white-space:nowrap}.inj-page td{padding:10px 14px;border-bottom:1px solid var(--line2);vertical-align:middle;color:var(--ink2);white-space:nowrap}.inj-page tr:last-child td{border-bottom:none}.inj-page tbody tr:hover td{background:var(--tl)}.inj-page .chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:12px;font-weight:600;white-space:nowrap}.inj-page .ct{background:var(--tm);color:var(--td)}.inj-page .cp{background:var(--pm);color:var(--purple)}.inj-page .cg{background:var(--line);color:var(--ink3)}.inj-page .ck{background:var(--ink);color:#fff}.inj-page .empty{display:flex;align-items:center;justify-content:center;padding:28px;color:var(--ink3);font-size:13px}.inj-page .loader{display:flex;align-items:center;gap:10px;padding:24px;color:var(--ink3);font-size:13px}.inj-page .sp{width:20px;height:20px;border:2.5px solid var(--line);border-top-color:var(--teal);border-radius:50%;animation:inj-page-rot .7s linear infinite;flex-shrink:0}.inj-page .edit-modal-bg{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:300;align-items:center;justify-content:center;padding:16px}.inj-page .edit-modal-bg.on{display:flex}.inj-page .edit-modal{background:var(--w);border-radius:var(--r16);padding:24px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px #0003}.inj-page .edit-modal h3{font-size:15px;font-weight:700;margin-bottom:18px;display:flex;align-items:center;gap:8px}.inj-page .edit-footer{display:flex;gap:8px;margin-top:18px}.inj-page .edit-footer .btn{flex:1;justify-content:center}.inj-page .edited-tag{font-size:11px;color:var(--ink3);margin-top:4px}.inj-page .toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%) translateY(12px);background:var(--ink);color:#fff;padding:12px 24px;border-radius:var(--r12);font-size:13.5px;font-weight:500;z-index:9999;opacity:0;transition:opacity .22s,transform .22s;pointer-events:none;white-space:nowrap;max-width:92vw;box-shadow:0 4px 16px #00000040}.inj-page .toast.on{opacity:1;transform:translate(-50%) translateY(0)}.inj-page .toast.ok{background:#065f46}.inj-page .toast.err{background:#991b1b}.inj-page .toast.warn{background:#92400e}@media (max-width:600px){.inj-page main{padding:16px 12px 80px}.inj-page .card{padding:16px}.inj-page .btn{padding:11px 18px}}.pp-page{font-family:Noto Sans TC,system-ui,sans-serif;background:#f5f0e8;font-size:14px;color:#2c2c2c;min-height:100vh}.pp-page .top-header{display:flex;align-items:center;justify-content:space-between;padding:14px 2rem;background:#ffffffd9;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid rgba(26,140,106,.12);position:sticky;top:0;z-index:100}.pp-page .th-left{display:flex;align-items:center;gap:12px}.pp-page .th-logo{width:44px;height:44px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid rgba(26,140,106,.3)}.pp-page .th-name{font-size:16px;font-weight:700;color:#1a1a1a;letter-spacing:.04em}.pp-page .th-sub{font-size:11px;color:#1a8c6a;font-weight:500;letter-spacing:.1em;text-transform:uppercase}.pp-page .th-right{display:flex;align-items:center;gap:10px}.pp-page .th-tab-btn{padding:8px 18px;font-size:13px;font-weight:500;cursor:pointer;background:none;border:none;color:#888;border-radius:99px;transition:all .15s;font-family:inherit;letter-spacing:.03em}.pp-page .th-tab-btn.on{background:#1a8c6a;color:#fff}.pp-page .th-tab-btn:hover:not(.on){background:#eae6de;color:#333}.pp-page .hero{text-align:center;padding:3rem 1.5rem 2.5rem;background:linear-gradient(160deg,#f5f0e8,#ebf5f0,#f5f0e8);position:relative;overflow:hidden}.pp-page .hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 60% 80% at 50% 0%,rgba(26,140,106,.06) 0%,transparent 70%)}.pp-page .hero-eyebrow{font-size:11px;font-weight:600;color:#1a8c6a;letter-spacing:.18em;text-transform:uppercase;margin-bottom:.8rem}.pp-page .hero-title{font-family:"Noto Serif TC",serif;font-size:28px;font-weight:500;color:#1a1a1a;letter-spacing:.06em;margin-bottom:.5rem}.pp-page .hero-title span{color:#1a8c6a}.pp-page .hero-divider{width:40px;height:2.5px;background:linear-gradient(90deg,#1a8c6a,#5dc9a0);border-radius:2px;margin:.8rem auto}.pp-page .hero-desc{font-size:13px;color:#888;letter-spacing:.05em}.pp-page .pg{display:none;padding:1.5rem;max-width:740px;margin:0 auto}.pp-page .pg.on{display:block}.pp-page .card{background:#ffffffeb;border:1px solid rgba(234,230,222,.8);border-radius:14px;padding:1.3rem 1.5rem;margin-bottom:1rem;box-shadow:0 2px 12px #0000000a}.pp-page .ct{font-size:15px;font-weight:600;margin-bottom:1rem;color:#1a1a1a;letter-spacing:.03em}.pp-page .fg{margin-bottom:.9rem;position:relative}.pp-page label{display:block;font-size:12px;color:#777;margin-bottom:5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.pp-page .req{color:#c0392b;margin-left:2px}.pp-page select,.pp-page input[type=text],.pp-page input[type=number],.pp-page input[type=date],.pp-page input[type=month],.pp-page input[type=password]{width:100%;padding:10px 13px;border:1.5px solid #DDD9D0;border-radius:9px;font-size:14px;background:#fafaf8;color:#1a1a1a;transition:all .15s;font-family:inherit;letter-spacing:.02em}.pp-page select:focus,.pp-page input:focus{outline:none;box-shadow:0 0 0 3px #1a8c6a1a;border-color:#1a8c6a;background:#fff}.pp-page .field-err{border-color:#c0392b!important;box-shadow:0 0 0 3px #c0392b14!important}.pp-page .err-msg{font-size:12px;color:#c0392b;margin-top:4px;display:none}.pp-page .err-msg.show{display:block}.pp-page .combo{position:relative}.pp-page .combo-input{width:100%;padding:10px 13px;border:1.5px solid #DDD9D0;border-radius:9px;font-size:14px;background:#fafaf8;color:#1a1a1a;transition:all .15s;font-family:inherit}.pp-page .combo-input:focus{outline:none;box-shadow:0 0 0 3px #1a8c6a1a;border-color:#1a8c6a;background:#fff}.pp-page .combo-input.field-err{border-color:#c0392b!important}.pp-page .combo-drop{position:absolute;top:calc(100% + 5px);left:0;right:0;background:#fff;border:1.5px solid #DDD9D0;border-radius:11px;z-index:200;max-height:200px;overflow-y:auto;display:none;box-shadow:0 10px 30px #0000001a}.pp-page .combo-drop.open{display:block}.pp-page .combo-opt{padding:10px 13px;font-size:14px;cursor:pointer;color:#1a1a1a;transition:background .1s}.pp-page .combo-opt:hover,.pp-page .combo-opt.selected{background:#eaf6f1;color:#0a5c47}.pp-page .combo-empty{padding:10px 13px;font-size:13px;color:#bbb}.pp-page .seg{background:#fafaf8;border:1.5px solid #EAE6DE;border-radius:11px;padding:1rem 1.1rem;margin-bottom:.75rem}.pp-page .seg-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:.85rem}.pp-page .seg-title{font-size:12px;font-weight:700;color:#666;letter-spacing:.08em;text-transform:uppercase}.pp-page .seg-del{background:none;border:none;cursor:pointer;font-size:12.5px;color:#c0392b;padding:3px 8px;border-radius:5px;font-weight:500}.pp-page .seg-del:hover{background:#fdecea}.pp-page .time-grid{display:grid;grid-template-columns:1fr 22px 1fr;gap:8px;align-items:end;margin-bottom:.8rem}.pp-page .time-arrow{text-align:center;padding-bottom:11px;color:#ccc;font-size:15px}.pp-page .assist-row{display:flex;gap:8px}.pp-page .rb{flex:1;padding:9px;border:1.5px solid #DDD9D0;border-radius:8px;font-size:13px;cursor:pointer;background:#fff;color:#888;text-align:center;transition:all .15s;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-weight:500;letter-spacing:.03em}.pp-page .rb.on{background:#eaf6f1;border-color:#1a8c6a;color:#0a5c47;font-weight:700}.pp-page .add-seg-btn{width:100%;padding:9px;border:1.5px dashed #CCC8BF;border-radius:9px;background:transparent;cursor:pointer;font-size:13px;color:#aaa;margin-bottom:.9rem;transition:all .15s;font-weight:500;letter-spacing:.03em;font-family:inherit}.pp-page .add-seg-btn:hover{border-color:#1a8c6a;color:#1a8c6a;background:#1a8c6a0a}.pp-page .day-summary{background:linear-gradient(120deg,#0a5c47,#1a8c6a);border-radius:12px;padding:1rem 1.4rem;margin:.9rem 0;display:none;justify-content:space-between;align-items:center;box-shadow:0 4px 16px #0a5c4733}.pp-page .sum-lbl{font-size:12px;color:#ffffffb3;font-weight:500;letter-spacing:.06em}.pp-page .sum-val{font-size:24px;font-weight:700;color:#fff}.pp-page .btn-main{width:100%;padding:13px;background:linear-gradient(120deg,#0a5c47,#1a8c6a);color:#fff;border:none;border-radius:10px;font-size:15px;font-weight:600;cursor:pointer;transition:opacity .15s,transform .1s;letter-spacing:.04em;font-family:inherit;box-shadow:0 3px 12px #0a5c4740}.pp-page .btn-main:hover{opacity:.9;transform:translateY(-1px)}.pp-page .btn-main:active{transform:translateY(0)}.pp-page .btn-main:disabled{background:#c5c2bb;cursor:not-allowed;box-shadow:none;transform:none}.pp-page .btn-ghost{width:100%;padding:13px;background:#fff;color:#666;border:1.5px solid #DDD9D0;border-radius:10px;font-size:15px;font-weight:500;cursor:pointer;transition:all .15s;font-family:inherit}.pp-page .btn-ghost:hover{background:#f7f5f0;border-color:#c0bdb6}.pp-page .btn-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.pp-page .toast{border-radius:9px;padding:10px 14px;font-size:14px;margin-top:10px;display:none;font-weight:500}.pp-page .toast.ok{background:#eaf6f1;border:1.5px solid #5DC9A0;color:#0a5c47}.pp-page .toast.err{background:#fdecea;border:1.5px solid #E74C3C;color:#c0392b}.pp-page .receipt{background:#fff;border:1px solid #EAE6DE;border-radius:16px;overflow:hidden;margin-bottom:1rem;box-shadow:0 4px 20px #00000012}.pp-page .rh-hdr{background:linear-gradient(120deg,#0a5c47,#1a8c6a);padding:1.5rem;text-align:center}.pp-page .rh-title{font-family:"Noto Serif TC",serif;font-size:18px;font-weight:500;color:#fff;margin-bottom:3px;letter-spacing:.08em}.pp-page .rh-sub{font-size:11.5px;color:#ffffffa6;letter-spacing:.06em}.pp-page .rh-body{padding:1.4rem 1.5rem}.pp-page .rr{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid #F5F2EC}.pp-page .rr:last-of-type{border-bottom:none}.pp-page .rl{font-size:12.5px;color:#999;font-weight:500;letter-spacing:.04em}.pp-page .rv{font-size:14px;font-weight:600;text-align:right;color:#1a1a1a}.pp-page .rdiv{height:1px;background:#eee;margin:.6rem 0}.pp-page .seg-line{display:flex;justify-content:space-between;padding:5px 0;font-size:13px;align-items:center;gap:8px}.pp-page .sl-l{color:#999;flex:1}.pp-page .sl-r{font-weight:500;white-space:nowrap;color:#444}.pp-page .rtotal-box{background:linear-gradient(135deg,#eaf6f1cc,#f0fbf7cc);border:1.5px solid #C3E8D8;border-radius:10px;padding:1.1rem 1.2rem;margin:1rem 0 .5rem}.pp-page .rtotal-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0}.pp-page .rtotal-lbl{font-size:13px;color:#666;letter-spacing:.03em}.pp-page .rtotal-val{font-size:14px;font-weight:600;color:#0a5c47}.pp-page .rtotal-grand{border-top:1px solid #C3E8D8;margin-top:9px;padding-top:9px;display:flex;justify-content:space-between;align-items:center}.pp-page .rtotal-grand-lbl{font-size:14px;font-weight:600;color:#0a5c47;letter-spacing:.04em}.pp-page .rtotal-grand-val{font-size:26px;font-weight:700;color:#0a5c47}.pp-page .confirm-note{font-size:12px;color:#bbb;text-align:center;margin-bottom:.9rem;letter-spacing:.04em}.pp-page .badge{display:inline-block;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:600;letter-spacing:.04em}.pp-page .by{background:#eaf6f1;color:#0a5c47}.pp-page .bn{background:#fef3e2;color:#b7580a}.pp-page .sync-dot{font-size:11.5px;padding:4px 11px;border-radius:99px;display:inline-flex;align-items:center;gap:5px;font-weight:600;letter-spacing:.04em}.pp-page .s-ok{background:#eaf6f1;color:#0a5c47}.pp-page .s-err{background:#fdecea;color:#c0392b}.pp-page .s-ing{background:#fef9e7;color:#b7830a}.pp-page .lock-wrap{position:absolute;top:0;right:0;bottom:0;left:0;background:#fffffff7;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;z-index:10;border-radius:12px;min-height:400px}.pp-page .lock-inner{width:260px;display:flex;flex-direction:column;gap:10px}.pp-page .pw-err-msg{color:#c0392b;font-size:13px;display:none}.pp-page .tab-strip{display:flex;gap:6px;margin-bottom:1rem;align-items:center;flex-wrap:wrap}.pp-page .tab-btn{padding:7px 16px;border:1.5px solid #DDD9D0;border-radius:99px;font-size:13px;cursor:pointer;color:#888;background:#fff;font-weight:500;transition:all .15s;letter-spacing:.03em;font-family:inherit}.pp-page .tab-btn.on{background:#1a8c6a;color:#fff;border-color:#1a8c6a;box-shadow:0 2px 8px #1a8c6a40}.pp-page .tab-btn:hover:not(.on){background:#f7f5f0}.pp-page .stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:1rem}.pp-page .stat-card{background:#fff;border:1px solid #EAE6DE;border-radius:11px;padding:.9rem 1rem}.pp-page .stat-lbl{font-size:10.5px;color:#aaa;margin-bottom:5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.pp-page .stat-val{font-size:20px;font-weight:700;color:#1a1a1a}.pp-page .filter-row{display:flex;gap:8px;margin-bottom:1rem;align-items:flex-end;flex-wrap:wrap}.pp-page .filter-row .fg{flex:1;margin:0;min-width:100px}.pp-page .btn-sm{padding:9px 13px;border:1.5px solid #DDD9D0;border-radius:8px;font-size:13px;cursor:pointer;background:#fff;color:#666;white-space:nowrap;font-weight:500;font-family:inherit;letter-spacing:.02em}.pp-page .btn-sm:hover{background:#f7f5f0}.pp-page .btn-sm.p{background:linear-gradient(120deg,#0a5c47,#1a8c6a);color:#fff;border-color:transparent;box-shadow:0 2px 8px #0a5c4733}.pp-page .btn-sm.p:hover{opacity:.9}.pp-page table{width:100%;border-collapse:collapse;font-size:12px}.pp-page th{text-align:left;padding:8px 9px;font-weight:700;color:#aaa;border-bottom:1.5px solid #EAE6DE;white-space:nowrap;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em}.pp-page td{padding:8px 9px;border-bottom:1px solid #F5F2EC;color:#1a1a1a;vertical-align:top}.pp-page tr:hover td{background:#fafaf8}.pp-page .del-btn{background:none;border:none;cursor:pointer;color:#e74c3c;font-size:13px;padding:2px 5px;border-radius:4px}.pp-page .del-btn:hover{background:#fdecea}.pp-page .empty-msg{text-align:center;padding:2.5rem;color:#ccc;font-size:14px}.pp-page .segs-cell{font-size:12px;color:#999;line-height:1.8}.pp-page .analytics-stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:1rem}.pp-page .bar-chart{display:flex;flex-direction:column;gap:9px;margin-top:.9rem}.pp-page .bar-row{display:flex;align-items:center;gap:10px}.pp-page .bar-lbl{width:56px;text-align:right;color:#aaa;flex-shrink:0;font-size:11px;font-weight:500}.pp-page .bar-bg{flex:1;background:#ede9e0;border-radius:5px;height:24px;overflow:hidden}.pp-page .bar-fill{height:100%;background:linear-gradient(90deg,#0a5c47,#1a8c6a);border-radius:5px;display:flex;align-items:center;padding-left:8px;color:#fff;font-size:11px;font-weight:700;white-space:nowrap;min-width:4px}.pp-page .assist-bar{display:flex;height:30px;border-radius:8px;overflow:hidden;margin-bottom:.7rem}.pp-page .legend-row{display:flex;gap:1.2rem;font-size:12px;margin-top:.4rem}.pp-page .legend-dot{width:10px;height:10px;border-radius:2px;display:inline-block;margin-right:4px}.pp-page .sheet-note{background:#fffbf0;border:1.5px solid #F0D080;border-radius:9px;padding:.9rem 1.1rem;font-size:13px;color:#8a6a00;margin-bottom:1rem;line-height:1.6}.pp-page input[type=time]{width:100%;padding:10px 13px;border:1.5px solid #DDD9D0;border-radius:9px;font-size:14px;background:#fafaf8;color:#1a1a1a;transition:all .15s;font-family:inherit;-webkit-appearance:none}.pp-page input[type=time]::-webkit-datetime-edit-ampm-field{display:none!important}.pp-page input[type=time]::-webkit-calendar-picker-indicator{display:none}.pp-page input[type=time]:focus{outline:none;box-shadow:0 0 0 3px #1a8c6a1a;border-color:#1a8c6a;background:#fff}:root{--teal-deep: #1B7678;--teal: #2A9D9F;--teal-light: #4FB8BA;--teal-soft: #9FD9DA;--cream: #FDF8F0;--cream-deep: #F5EDDC;--gold: #D4AF37;--gold-deep: #B8860B;--brown: #2C5254;--brown-light: #5B7B7D;--text: #263B3C;--text-muted: #7A9091;--white: #FFFFFF;--err: #C0392B;--ok: #2E7D32;--shadow: 0 4px 20px rgba(42,157,159,.12);--shadow-hover: 0 12px 40px rgba(42,157,159,.22);--radius: 14px}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:Noto Sans TC,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:var(--text);background:linear-gradient(135deg,#fdf8f0,#f5eddc,#f0e4c8);min-height:100vh;overflow-x:hidden}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle at 15% 20%,rgba(42,157,159,.1) 0%,transparent 40%),radial-gradient(circle at 85% 80%,rgba(212,175,55,.08) 0%,transparent 45%);pointer-events:none;z-index:0}.serif{font-family:"Noto Serif TC",serif}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:40px 20px;position:relative;z-index:10}.login-card{width:100%;max-width:420px;background:var(--white);border-radius:20px;padding:44px 36px 36px;box-shadow:var(--shadow);border:1px solid rgba(212,175,55,.25);position:relative;overflow:hidden;animation:fadeUp .5s cubic-bezier(.2,.8,.2,1) both}.login-card:before{content:"";position:absolute;top:0;left:0;right:0;height:6px;background:linear-gradient(90deg,var(--teal-deep),var(--teal),var(--teal-light))}.logo-wrap{text-align:center;margin-bottom:28px}.logo-mark{width:96px;height:96px;margin:0 auto 14px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 22px #2a9d9f4d;position:relative;overflow:hidden;background:var(--white)}.logo-mark img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.logo-title{font-family:"Noto Serif TC",serif;font-size:24px;font-weight:700;letter-spacing:2px;color:var(--brown);margin-bottom:4px}.logo-sub{font-size:13px;color:var(--teal);letter-spacing:4px;font-weight:500}.form-group{margin-bottom:16px}.form-label{display:block;font-size:13px;font-weight:500;color:var(--brown);margin-bottom:6px;letter-spacing:.5px}.form-input{width:100%;padding:12px 14px;border:1.5px solid #D5E5E5;border-radius:10px;font-size:15px;color:var(--text);background:var(--cream);font-family:inherit;transition:all .2s;outline:none}.form-input:focus{border-color:var(--teal);background:var(--white);box-shadow:0 0 0 3px #2a9d9f26}.btn-primary{width:100%;padding:13px;border:none;border-radius:10px;background:linear-gradient(135deg,var(--teal),var(--teal-deep));color:var(--white);font-size:15px;font-weight:500;letter-spacing:2px;cursor:pointer;transition:all .25s;font-family:inherit;box-shadow:0 4px 14px #2a9d9f59}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px #2a9d9f73}.btn-primary:active{transform:translateY(0)}.btn-primary:disabled{opacity:.6;cursor:default}.btn-secondary{width:100%;padding:11px;border:1.5px solid var(--teal);border-radius:10px;background:var(--white);color:var(--teal-deep);font-size:14px;font-weight:500;letter-spacing:1px;cursor:pointer;font-family:inherit;transition:all .2s}.btn-secondary:hover{background:var(--teal);color:var(--white)}.btn-ghost{background:none;border:none;color:var(--teal-deep);font-size:13px;cursor:pointer;font-family:inherit;text-decoration:underline}.btn-ghost:hover{color:var(--teal)}.msg{min-height:20px;margin-top:14px;font-size:13px;text-align:center;color:var(--err)}.msg.ok{color:var(--ok)}.info-notice{margin-top:18px;padding:12px 14px;background:#2a9d9f14;border:1px solid rgba(42,157,159,.22);border-radius:10px;display:flex;gap:10px;align-items:flex-start;font-size:12.5px;line-height:1.6;color:var(--brown)}.info-notice-icon{flex-shrink:0;width:18px;height:18px;border-radius:50%;background:var(--teal);color:var(--white);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;font-family:serif;line-height:1;margin-top:1px}.info-notice strong{color:var(--teal-deep);font-weight:700}.login-foot{margin-top:24px;text-align:center;font-size:12px;color:var(--text-muted);letter-spacing:1px}.topbar{background:#ffffffe6;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid rgba(42,157,159,.2);padding:14px 32px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:5}.topbar-brand{display:flex;align-items:center;gap:12px}.topbar-logo{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px #2a9d9f40;overflow:hidden;background:var(--white)}.topbar-logo img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.topbar-title{font-family:"Noto Serif TC",serif;font-size:18px;font-weight:700;color:var(--brown);letter-spacing:1.5px}.topbar-sub{font-size:11px;color:var(--text-muted);letter-spacing:2px}.topbar-user{display:flex;align-items:center;gap:14px}.user-chip{display:flex;align-items:center;gap:10px;padding:6px 14px 6px 6px;border-radius:30px;background:var(--cream-deep);font-size:13px;cursor:pointer;transition:all .2s;border:1.5px solid transparent}.user-chip:hover{background:var(--white);border-color:var(--teal-soft);box-shadow:0 3px 10px #2a9d9f26}.user-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--teal),var(--teal-deep));color:var(--white);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}.user-name{font-weight:500;color:var(--brown)}.user-role{font-size:11px;color:var(--teal-deep);margin-left:4px;padding:2px 8px;background:var(--white);border-radius:10px}.btn-logout{background:transparent;border:1.5px solid #C5D9DA;color:var(--brown);padding:7px 16px;border-radius:8px;font-size:13px;cursor:pointer;font-family:inherit;transition:all .2s}.btn-logout:hover{background:var(--teal-deep);color:var(--white);border-color:var(--teal-deep)}.btn-dash{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border:none;border-radius:10px;font-family:inherit;font-size:13px;font-weight:600;letter-spacing:1.5px;color:var(--white);cursor:pointer;background:linear-gradient(112deg,var(--teal-deep) 0%,var(--teal) 38%,var(--gold-deep) 92%,var(--gold) 100%);background-size:160% 100%;background-position:0% 0%;box-shadow:0 3px 16px #2a9d9f6b,0 0 0 1px #d4af3759,inset 0 1px #ffffff47;text-shadow:0 1px 2px rgba(0,0,0,.18);transition:transform .18s ease,box-shadow .18s ease,background-position .45s ease}.btn-dash:hover{transform:translateY(-2px);background-position:100% 0%;box-shadow:0 10px 30px #2a9d9f80,0 0 26px #d4af377a,0 0 0 1px #d4af3799,inset 0 1px #ffffff5c}.btn-dash:active{transform:translateY(0)}.btn-dash:focus-visible{outline:2px solid var(--gold);outline-offset:3px}.btn-dash:after{content:"";position:absolute;top:-60%;left:-75%;width:45%;height:220%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.42),transparent);transform:skew(-22deg);animation:dash-sheen 5s ease-in-out infinite}.btn-dash:hover:after{animation-duration:1.6s}@keyframes dash-sheen{0%,62%{left:-75%}92%,to{left:125%}}.btn-dash .bar{animation:dash-bar 2.4s ease-in-out infinite;transform-origin:bottom}.btn-dash .bar:nth-child(2){animation-delay:.25s}.btn-dash .bar:nth-child(3){animation-delay:.5s}@keyframes dash-bar{0%,to{transform:scaleY(.62)}50%{transform:scaleY(1)}}@media (prefers-reduced-motion: reduce){.btn-dash:after,.btn-dash .bar{animation:none}.btn-dash:after{left:-75%}.btn-dash:hover{transform:none}.btn-dash{transition:box-shadow .18s ease}}@media (max-width: 560px){.btn-dash{padding:8px 12px;letter-spacing:.5px}.btn-dash .btn-dash-text{display:none}}.hero{padding:48px 32px 24px;text-align:center}.hero-welcome{font-size:14px;color:var(--text-muted);letter-spacing:3px;margin-bottom:8px}.hero-title{font-family:"Noto Serif TC",serif;font-size:32px;font-weight:700;color:var(--brown);letter-spacing:3px;margin-bottom:10px}.hero-divider{width:60px;height:3px;margin:0 auto 12px;background:linear-gradient(90deg,transparent,var(--teal),transparent)}.hero-desc{font-size:14px;color:var(--text-muted);letter-spacing:1px}.section-label{max-width:1200px;margin:20px auto 18px;padding:0 32px;display:flex;align-items:center;gap:12px}.section-label:before,.section-label:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(42,157,159,.3),transparent)}.section-label span{font-family:"Noto Serif TC",serif;font-size:15px;color:var(--brown);letter-spacing:4px}.cards-grid{max-width:1200px;margin:0 auto;padding:0 32px 48px;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:22px}.sys-card{background:var(--white);border-radius:var(--radius);padding:28px 24px 24px;box-shadow:var(--shadow);border:1px solid rgba(42,157,159,.15);display:flex;flex-direction:column;position:relative;overflow:hidden;cursor:pointer;transition:all .3s cubic-bezier(.2,.8,.2,1);text-decoration:none;color:inherit}.sys-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--teal-light),var(--teal));transform:scaleX(0);transform-origin:left;transition:transform .4s}.sys-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-hover);border-color:var(--teal-soft)}.sys-card:hover:before{transform:scaleX(1)}.sys-card-icon{width:56px;height:56px;border-radius:14px;background:linear-gradient(135deg,#e5f4f4,#b8e0e1);display:flex;align-items:center;justify-content:center;margin-bottom:18px;transition:all .3s}.sys-card:hover .sys-card-icon{background:linear-gradient(135deg,var(--teal-light),var(--teal));transform:rotate(-5deg) scale(1.05)}.sys-card-icon svg{width:28px;height:28px;color:var(--teal-deep);transition:color .3s}.sys-card:hover .sys-card-icon svg{color:var(--white)}.sys-card-title{font-family:"Noto Serif TC",serif;font-size:19px;font-weight:700;color:var(--brown);margin-bottom:8px;letter-spacing:1px}.sys-card-desc{font-size:13.5px;color:var(--text-muted);line-height:1.7;margin-bottom:20px;flex:1;letter-spacing:.3px}.sys-card-foot{display:flex;align-items:center;justify-content:space-between;padding-top:14px;border-top:1px dashed rgba(42,157,159,.25)}.sys-card-tag{font-size:11px;color:var(--teal-deep);background:#e5f4f4;padding:3px 10px;border-radius:10px;letter-spacing:1px}.sys-card-cta{font-size:13px;color:var(--teal-deep);font-weight:500;letter-spacing:1px;display:flex;align-items:center;gap:4px;transition:all .3s}.sys-card:hover .sys-card-cta{gap:8px}.celebrations{max-width:1200px;margin:8px auto 0;padding:0 32px;display:flex;flex-direction:column;gap:6px}.celebrations-bar{background:linear-gradient(135deg,#d4af371a,#2a9d9f14);border:1px solid rgba(212,175,55,.35);border-radius:12px;padding:8px 14px;display:flex;align-items:center;gap:12px;overflow:hidden}.celebrations-bar.bday{background:linear-gradient(135deg,#ffb6c12e,#ffd2b41f);border-color:#e88c8c66}.celebrations-bar.anniv{background:linear-gradient(135deg,#d4af3724,#b8860b0f);border-color:#b8860b66}.celebrations-label{flex-shrink:0;font-size:13px;font-weight:700;color:var(--brown);letter-spacing:1px;padding-right:12px;border-right:1px solid rgba(0,0,0,.1);white-space:nowrap}.celebrations-bar.bday .celebrations-label{color:#b85c5c}.celebrations-bar.anniv .celebrations-label{color:var(--gold-deep)}.celebrations-chips{flex:1;min-width:0;display:flex;align-items:center;gap:8px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:thin}.celebrations-chips::-webkit-scrollbar{height:4px}.celebrations-chips::-webkit-scrollbar-thumb{background:#2a9d9f40;border-radius:2px}.celebration-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;background:var(--white);border:1px solid rgba(212,175,55,.35);border-radius:20px;font-size:12.5px;color:var(--brown);flex-shrink:0}.celebrations-bar.bday .celebration-chip{border-color:#e88c8c66}.celebration-chip.today{background:linear-gradient(135deg,var(--gold),#E8C766);border-color:var(--gold-deep);color:#5a3f08;font-weight:700;box-shadow:0 3px 10px #d4af3759}.celebrations-bar.bday .celebration-chip.today{background:linear-gradient(135deg,#ff9e9e,#ffb6b6);border-color:#c04040;color:#fff;box-shadow:0 3px 10px #e8505059}.celebration-chip-emoji{font-size:14px}.celebration-chip-name{font-weight:500}.celebration-chip-date{color:var(--text-muted);font-size:11.5px;margin-left:2px}.celebration-chip.today .celebration-chip-date{color:inherit;opacity:.85}.anns-section{max-width:1200px;margin:8px auto 0;padding:0 32px}.anns-header{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}.anns-header-title{font-family:"Noto Serif TC",serif;font-size:17px;color:var(--brown);font-weight:700;letter-spacing:2px;display:flex;align-items:center;gap:8px}.anns-header-title svg{width:20px;height:20px;color:var(--teal)}.anns-badge{background:#c0392b;color:var(--white);font-size:11px;padding:2px 9px;border-radius:12px;font-weight:700;letter-spacing:.5px;box-shadow:0 2px 6px #c0392b40}.anns-badge.zero{background:var(--text-muted);box-shadow:none}.anns-tabs{display:flex;gap:4px;margin-bottom:10px}.anns-tab{background:transparent;border:1.5px solid transparent;color:var(--text-muted);padding:4px 14px;border-radius:14px;cursor:pointer;font-size:12.5px;font-family:inherit;transition:all .15s;letter-spacing:.5px}.anns-tab:hover{color:var(--brown)}.anns-tab.active{background:var(--white);border-color:var(--teal-soft);color:var(--teal-deep);font-weight:700}.anns-tab .count{display:inline-block;background:#c0392b26;color:#c0392b;font-size:10.5px;padding:1px 7px;border-radius:9px;margin-left:4px;font-weight:700}.anns-tab .count.zero{display:none}.anns-tab.active .count{background:#2a9d9f26;color:var(--teal-deep)}.anns-list{display:flex;flex-direction:column;gap:10px}.ann-item{background:var(--white);border:1px solid rgba(42,157,159,.18);border-left:4px solid var(--teal);border-radius:10px;padding:14px 18px;cursor:pointer;transition:all .2s;position:relative;display:flex;align-items:flex-start;gap:14px}.ann-item:hover{border-color:var(--teal);box-shadow:0 4px 14px #2a9d9f1f;transform:translateY(-1px)}.ann-item.urgent{border-left-color:#c0392b}.ann-item.important{border-left-color:#e67e22}.ann-item.unread{background:linear-gradient(90deg,#2a9d9f0a,#fff 30%)}.ann-item.unread:before{content:"";position:absolute;top:16px;right:16px;width:9px;height:9px;border-radius:50%;background:#c0392b;box-shadow:0 0 0 3px #c0392b26}.ann-level{font-size:11px;padding:2px 8px;border-radius:10px;background:#e5f4f4;color:var(--teal-deep);font-weight:500;letter-spacing:.5px;flex-shrink:0;margin-top:1px}.ann-level.urgent{background:#fbe9e6;color:#c0392b}.ann-level.important{background:#fdf2e5;color:#b36410}.ann-body{flex:1;min-width:0;padding-right:16px}.ann-title{font-size:14.5px;font-weight:700;color:var(--brown);margin-bottom:4px;letter-spacing:.5px}.ann-summary{font-size:13px;color:var(--text-muted);line-height:1.5;overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.ann-meta{margin-top:6px;font-size:11.5px;color:var(--text-muted);letter-spacing:.5px}.anns-empty{text-align:center;padding:30px 20px;color:var(--text-muted);font-size:13px;background:#ffffff80;border-radius:10px;border:1px dashed rgba(42,157,159,.2)}.anns-toggle-all{text-align:center;margin-top:6px}.anns-toggle-all button{background:transparent;border:none;color:var(--teal-deep);font-size:12.5px;cursor:pointer;padding:6px 14px;border-radius:6px;transition:background .2s;font-family:inherit;letter-spacing:.5px}.anns-toggle-all button:hover{background:#2a9d9f1a}.tasks-section{max-width:1200px;margin:18px auto 0;padding:0 32px}.tasks-header{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.tasks-header-title{font-family:"Noto Serif TC",serif;font-size:17px;color:var(--brown);font-weight:700;letter-spacing:2px;display:flex;align-items:center;gap:8px}.tasks-header-title svg{width:20px;height:20px;color:var(--teal)}.tasks-tabs{display:flex;gap:4px;margin-left:6px}.tasks-tab{background:transparent;border:1.5px solid transparent;color:var(--text-muted);padding:4px 12px;border-radius:16px;cursor:pointer;font-size:12.5px;font-family:inherit;transition:all .2s;letter-spacing:.5px}.tasks-tab.active{background:var(--white);border-color:var(--teal-soft);color:var(--teal-deep);font-weight:700}.tasks-tab:hover:not(.active){color:var(--brown)}.tasks-tab .count{display:inline-block;background:#c0392b;color:var(--white);font-size:10px;padding:1px 6px;border-radius:10px;margin-left:4px;font-weight:700}.tasks-tab.active .count{background:var(--teal)}.tasks-tab .count.zero{display:none}.tasks-list{display:flex;flex-direction:column;gap:8px}.task-item{background:var(--white);border:1px solid rgba(42,157,159,.18);border-left:4px solid var(--teal-soft);border-radius:10px;padding:10px 14px;display:flex;align-items:flex-start;gap:12px;transition:all .2s}.task-item:hover{border-color:var(--teal-soft);box-shadow:0 3px 10px #2a9d9f1a}.task-item.done{opacity:.55;border-left-color:#2a9d9f4d}.task-item.done .task-title{text-decoration:line-through}.task-item.overdue:not(.done){border-left-color:#c0392b;background:linear-gradient(90deg,rgba(192,57,43,.04),var(--white) 30%)}.task-check{flex-shrink:0;width:22px;height:22px;border-radius:6px;border:2px solid var(--teal-soft);background:var(--white);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;margin-top:1px}.task-check:hover{border-color:var(--teal)}.task-check.checked{background:var(--teal);border-color:var(--teal)}.task-check.checked:after{content:"✓";color:var(--white);font-size:14px;font-weight:700}.task-body{flex:1;min-width:0}.task-title{font-size:14px;color:var(--brown);font-weight:600;margin-bottom:4px;word-break:break-word}.task-meta{font-size:11.5px;color:var(--text-muted);display:flex;flex-wrap:wrap;gap:10px;align-items:center;letter-spacing:.3px}.task-due{display:inline-flex;align-items:center;gap:4px}.task-due.overdue{color:#c0392b;font-weight:700}.task-due.today{color:#b36410;font-weight:700}.ref-check{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.ref-check input[type=checkbox]{width:16px;height:16px;accent-color:#B8860B;cursor:pointer}.task-item.done .ref-check span{color:var(--text-muted)}.meta-label{color:var(--text-muted);font-weight:500}.task-item.done .meta-label{color:var(--text-muted)}.task-empty{text-align:center;padding:24px 20px;color:var(--text-muted);font-size:13px;background:#ffffff80;border-radius:10px;border:1px dashed rgba(42,157,159,.2)}.kudos-section{max-width:1200px;margin:18px auto 0;padding:0 32px}.kudos-header{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.kudos-header-title{font-family:"Noto Serif TC",serif;font-size:17px;color:var(--brown);font-weight:700;letter-spacing:2px;display:flex;align-items:center;gap:8px}.kudos-header-title svg{width:20px;height:20px;color:var(--gold-deep)}.kudos-badge{background:linear-gradient(135deg,var(--gold),var(--gold-deep));color:#fff;font-size:11px;padding:2px 10px;border-radius:12px;font-weight:700;letter-spacing:.5px;box-shadow:0 2px 6px #d4af3759}.kudos-badge.zero{background:var(--text-muted);box-shadow:none}.kudos-leaderboard{background:linear-gradient(135deg,#d4af371f,#2a9d9f0f);border:1px solid rgba(212,175,55,.3);border-radius:12px;padding:12px 16px;margin-bottom:14px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}.kudos-lb-title{font-size:13px;color:var(--brown);font-weight:700;letter-spacing:1px;flex-shrink:0;display:flex;align-items:center;gap:4px}.kudos-lb-list{display:flex;flex-wrap:wrap;gap:8px;flex:1}.kudos-lb-item{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:var(--white);border:1px solid rgba(212,175,55,.3);border-radius:14px;font-size:12px;color:var(--brown)}.kudos-lb-rank{font-weight:700;color:var(--gold-deep);margin-right:2px}.kudos-lb-count{font-size:11px;color:var(--gold-deep);background:#d4af372e;padding:1px 6px;border-radius:8px;margin-left:2px}.kudos-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}.kudos-item{background:var(--white);border:1px solid rgba(212,175,55,.25);border-radius:12px;padding:14px 16px;position:relative;transition:all .2s}.kudos-item:hover{box-shadow:0 4px 14px #d4af372e;border-color:var(--gold);transform:translateY(-1px)}.kudos-from-to{font-size:12.5px;color:var(--brown);margin-bottom:6px;line-height:1.5;word-break:break-word}.kudos-from-to .arr{color:var(--gold-deep);margin:0 4px;font-weight:700}.kudos-from-to .anon{color:var(--text-muted);font-style:italic}.kudos-message{font-size:14px;color:var(--text);line-height:1.6;margin:8px 0 10px;word-break:break-word}.kudos-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:8px;border-top:1px dashed rgba(212,175,55,.3);flex-wrap:wrap}.kudos-tag{font-size:11px;color:var(--gold-deep);background:#d4af3726;padding:2px 8px;border-radius:8px;letter-spacing:.5px}.kudos-time{font-size:11px;color:var(--text-muted)}.kudos-empty{grid-column:1 / -1;text-align:center;padding:30px 20px;color:var(--text-muted);font-size:13px;background:#ffffff80;border-radius:10px;border:1px dashed rgba(212,175,55,.3)}.kb-section{max-width:1200px;margin:18px auto 0;padding:0 32px 8px}.kb-header{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.kb-header-title{font-family:"Noto Serif TC",serif;font-size:17px;color:var(--brown);font-weight:700;letter-spacing:2px;display:flex;align-items:center;gap:8px}.kb-header-title svg{width:20px;height:20px;color:var(--teal)}.btn-kb-sop{flex-shrink:0;padding:6px 14px;border:1.5px solid var(--teal);border-radius:18px;background:var(--white);color:var(--teal);font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .2s}.btn-kb-sop:hover{background:#2a9d9f14;transform:translateY(-1px)}.kb-manage{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}.btn-kb-add{padding:7px 14px;background:linear-gradient(135deg,var(--teal),var(--teal-deep));color:var(--white);border:none;border-radius:8px;font-size:13px;cursor:pointer;font-family:inherit;box-shadow:0 3px 10px #2a9d9f40;transition:all .2s}.btn-kb-add:hover{transform:translateY(-1px)}.kb-search{display:flex;align-items:center;gap:10px;background:var(--white);border:1px solid rgba(42,157,159,.25);border-radius:10px;padding:10px 14px;margin-bottom:16px}.kb-search svg{width:18px;height:18px;color:var(--teal);flex-shrink:0}.kb-search input{flex:1;border:none;outline:none;background:transparent;font-size:13.5px;color:var(--text);font-family:inherit}.kb-search input::-moz-placeholder{color:var(--text-muted)}.kb-search input::placeholder{color:var(--text-muted)}.kb-links-wrap{margin-bottom:6px}.kb-links-title{font-size:13px;color:var(--text-muted);margin-bottom:8px;letter-spacing:1px}.kb-links{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}.kb-link-item{position:relative;background:linear-gradient(135deg,rgba(42,157,159,.05),var(--white));border:1px solid rgba(42,157,159,.2);border-radius:10px;display:flex;align-items:center;transition:all .2s}.kb-link-item:hover{border-color:var(--teal);box-shadow:0 4px 14px #2a9d9f26;transform:translateY(-1px)}.kb-link-main{flex:1;min-width:0;display:flex;align-items:center;gap:10px;padding:12px 14px;text-decoration:none;color:inherit}.kb-link-icon{flex-shrink:0;width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,#e5f4f4,#b8e0e1);display:flex;align-items:center;justify-content:center;color:var(--teal-deep)}.kb-link-icon svg{width:20px;height:20px}.kb-link-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.kb-link-title{font-weight:700;color:var(--brown);font-size:13.5px;line-height:1.4;word-break:break-word}.kb-link-desc{font-size:11.5px;color:var(--text-muted);line-height:1.5;white-space:pre-line;word-break:break-word}.kb-docs-wrap{margin-top:18px}.kb-docs-title{font-size:13px;color:var(--text-muted);margin-bottom:8px;letter-spacing:1px}.kb-docs{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}.kb-doc-item{position:relative;background:var(--white);border:1px solid rgba(42,157,159,.18);border-radius:10px;display:flex;align-items:center;transition:all .2s}.kb-doc-item:hover{border-color:var(--teal);box-shadow:0 4px 14px #2a9d9f1f;transform:translateY(-1px)}.kb-doc-main{flex:1;min-width:0;display:flex;align-items:center;gap:10px;padding:12px 14px;text-decoration:none;color:inherit}.kb-doc-icon{flex-shrink:0;width:34px;height:34px;border-radius:8px;background:#2a9d9f1a;display:flex;align-items:center;justify-content:center;color:var(--teal-deep)}.kb-doc-icon svg{width:18px;height:18px}.kb-doc-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.kb-doc-name{font-size:13px;color:var(--brown);font-weight:500;line-height:1.4;word-break:break-word}.kb-doc-desc{font-size:11.5px;color:var(--text-muted);line-height:1.5;word-break:break-word}.kb-empty{text-align:center;padding:20px;color:var(--text-muted);font-size:13px;background:#ffffff80;border-radius:10px;border:1px dashed rgba(42,157,159,.2)}.kb-actions{position:absolute;top:6px;right:6px;display:flex;gap:4px;opacity:0;transition:opacity .2s}.kb-link-item:hover .kb-actions,.kb-doc-item:hover .kb-actions{opacity:1}.kb-actions button{width:26px;height:26px;border-radius:6px;border:1px solid rgba(42,157,159,.25);background:var(--white);cursor:pointer;font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;transition:all .2s}.kb-actions button:hover{border-color:var(--teal);background:#2a9d9f14}.kb-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.kb-modal{width:100%;max-width:440px;background:var(--white);border-radius:16px;padding:24px;box-shadow:0 20px 60px #00000040}.kb-modal-title{font-family:"Noto Serif TC",serif;font-size:17px;font-weight:700;color:var(--brown);margin-bottom:16px;letter-spacing:1px}.kb-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.kb-field span{font-size:12.5px;color:var(--brown);font-weight:500}.kb-field select,.kb-field input,.kb-field textarea{width:100%;padding:10px 12px;border:1.5px solid #D5E5E5;border-radius:8px;font-size:14px;color:var(--text);font-family:inherit;background:var(--cream);box-sizing:border-box;resize:vertical}.kb-field select:focus,.kb-field input:focus,.kb-field textarea:focus{outline:none;border-color:var(--teal);background:var(--white)}.kb-modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.btn-kb-cancel{padding:10px 18px;border:1.5px solid #C5D9DA;border-radius:8px;background:var(--white);color:var(--brown);font-size:13.5px;cursor:pointer;font-family:inherit}.btn-kb-save{padding:10px 20px;border:none;border-radius:8px;background:linear-gradient(135deg,var(--teal),var(--teal-deep));color:var(--white);font-size:13.5px;font-weight:500;cursor:pointer;font-family:inherit}.btn-kb-save:disabled{opacity:.5;cursor:not-allowed}.btn-kb-ask{background:linear-gradient(135deg,#6c5ce7,#4834d4);box-shadow:0 3px 10px #6c5ce740}.btn-kb-plain{background:var(--white);color:var(--teal);border:1.5px solid var(--teal);box-shadow:none}.btn-kb-plain:hover{background:#2a9d9f0f}.kb-sop-note{margin-top:10px;font-size:12px;color:var(--text-muted);line-height:1.5}.kb-sop-modal{width:100%;max-width:640px;max-height:82vh;display:flex;flex-direction:column;background:var(--white);border-radius:16px;box-shadow:0 20px 60px #00000047;overflow:hidden}.kb-sop-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #E5EFEF;background:var(--cream)}.kb-sop-tabs{display:flex;gap:8px}.kb-sop-tab{padding:8px 16px;border:1.5px solid transparent;border-radius:20px;background:transparent;color:var(--text-muted);font-size:13.5px;cursor:pointer;font-family:inherit;transition:all .2s}.kb-sop-tab.active{background:linear-gradient(135deg,var(--teal),var(--teal-deep));color:var(--white);border-color:var(--teal)}.kb-sop-tab.active.kb-sop-tab:nth-child(2){background:linear-gradient(135deg,#6c5ce7,#4834d4);border-color:#6c5ce7}.kb-sop-close{border:none;background:transparent;font-size:18px;color:var(--text-muted);cursor:pointer;line-height:1;padding:4px}.kb-sop-close:hover{color:var(--brown)}.kb-sop-body{padding:18px;overflow-y:auto}.kb-sop-inputrow{display:flex;gap:10px;margin-bottom:16px}.kb-sop-inputrow input{flex:1;padding:11px 14px;border:1.5px solid #D5E5E5;border-radius:10px;font-size:14px;color:var(--text);font-family:inherit;background:var(--cream)}.kb-sop-inputrow input:focus{outline:none;border-color:var(--teal);background:var(--white)}.kb-sop-loading{color:var(--teal);font-size:13.5px;padding:18px 4px}.kb-sop-empty{color:var(--text-muted);font-size:13.5px;padding:24px 4px;text-align:center}.kb-sop-results{display:flex;flex-direction:column;gap:12px}.kb-sop-result-count{font-size:12.5px;color:var(--text-muted);margin-bottom:2px}.kb-sop-result{border:1px solid #E2EEEE;border-radius:10px;padding:12px 14px;background:var(--cream);transition:all .2s}.kb-sop-result:hover{border-color:var(--teal);background:var(--white)}.kb-sop-result-title{display:block;font-size:13.5px;font-weight:700;color:var(--teal);text-decoration:none;margin-bottom:6px;word-break:break-word}.kb-sop-result-title:hover{text-decoration:underline}.kb-sop-result-snippet{font-size:12.5px;color:var(--text);line-height:1.65;word-break:break-word}.kb-sop-answer{border-top:1px solid #E5EFEF;padding-top:14px}.kb-sop-answer-text{font-size:14px;color:var(--text);line-height:1.8;white-space:pre-wrap;word-break:break-word;background:var(--cream);border:1px solid #E2EEEE;border-radius:10px;padding:14px 16px}.kb-sop-answer-sources{margin-top:14px}.kb-sop-answer-sources-title{font-size:12.5px;color:var(--text-muted);margin-bottom:8px;letter-spacing:1px}.kb-sop-answer-source{display:inline-block;margin:0 8px 8px 0;padding:7px 12px;border-radius:20px;background:#2a9d9f1a;border:1px solid rgba(42,157,159,.3);color:var(--teal);font-size:12.5px;text-decoration:none;word-break:break-word}.kb-sop-answer-source:hover{background:#2a9d9f33}.toast{position:fixed;bottom:32px;left:50%;transform:translate(-50%) translateY(100px);background:var(--brown);color:var(--white);padding:12px 24px;border-radius:30px;font-size:14px;box-shadow:0 8px 24px #0003;opacity:0;transition:all .3s;z-index:100;pointer-events:none}.toast.show{transform:translate(-50%) translateY(0);opacity:1}.toast.err{background:#c0392b}.toast.ok{background:#2e7d32}.footer{text-align:center;padding:24px;font-size:12px;color:var(--text-muted);letter-spacing:2px;border-top:1px solid rgba(42,157,159,.2);background:#ffffff80}@keyframes fadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.fade-up{animation:fadeUp .5s cubic-bezier(.2,.8,.2,1) both}.fade-up.d1{animation-delay:.05s}.fade-up.d2{animation-delay:.1s}.fade-up.d3{animation-delay:.15s}.fade-up.d4{animation-delay:.2s}.fade-up.d5{animation-delay:.25s}.spin{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:var(--white);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:6px}@keyframes spin{to{transform:rotate(360deg)}}.contract-chip{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:10px;border:1.5px solid var(--teal-soft);background:#fff;color:var(--brown);min-width:150px;flex-shrink:0}.contract-chip.warning{border-color:#d4af3799;background:#fffdf5}.contract-chip.urgent{border-color:#e74c3c;background:#fdf1f0}.contract-chip-date{font-size:12px;color:var(--teal-deep)}.contract-chip-days{font-size:12px;font-weight:600;color:var(--brown-light)}.contract-chip.warning .contract-chip-days{color:var(--gold-deep)}.contract-chip.urgent .contract-chip-days{color:#c0392b}.sched-kind-pill{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px;background:var(--teal-soft);color:var(--teal-deep);margin-left:6px;vertical-align:1px}.task-item.overdue .sched-kind-pill{background:#e74c3c1f;color:#c0392b}.kudos-item{display:block}@media (max-width: 600px){.topbar{padding:12px 16px}.topbar-sub,.user-name{display:none}.hero{padding:32px 20px 16px}.hero-title{font-size:24px;letter-spacing:2px}.section-label{padding:0 20px}.cards-grid{padding:0 20px 32px;gap:16px}.login-card{padding:36px 24px 28px}}
