@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Serif:wght@500;600&display=swap";:root{--page: #eef1f6;--ink: #111827;--muted: #6b7280;--card: #ffffff;--line: #e5e7eb;--accent: #2563a8;--accent-2: #0d9488;--accent-3: #ea580c;--good: #16a34a;--radius: 28px;--shadow: 0 4px 24px rgba(17, 24, 39, .05);--gap: 1rem;font-family:IBM Plex Sans,Noto Sans TC,system-ui,sans-serif;color:var(--ink);background:var(--page)}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:var(--page)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.shell{max-width:1180px;margin:0 auto;padding:1.25rem 1.25rem 3rem}.nav{display:flex;flex-wrap:wrap;gap:.4rem .5rem;align-items:center;margin-bottom:1.25rem;padding:.65rem .85rem;background:var(--card);border-radius:999px;box-shadow:var(--shadow)}.brand{font-family:"IBM Plex Serif",Georgia,serif;font-size:1.25rem;font-weight:600;color:var(--ink);padding:.35rem .85rem;text-decoration:none}.brand:hover{text-decoration:none}.nav-link{font-size:.88rem;font-weight:500;color:var(--muted);padding:.4rem .85rem;border-radius:999px;text-decoration:none}.nav-link:hover{background:var(--page);color:var(--ink);text-decoration:none}.nav-spacer{margin-left:auto}.user-chip{font-size:.82rem;font-weight:500;background:var(--page);padding:.35rem .8rem;border-radius:999px}.bento{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gap)}@media(max-width:960px){.bento{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.bento{grid-template-columns:1fr}.nav{border-radius:var(--radius)}}.bento-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.35rem 1.4rem;min-height:160px;display:flex;flex-direction:column;position:relative;overflow:hidden;animation:rise .45s ease both}.bento-card:nth-child(2){animation-delay:.04s}.bento-card:nth-child(3){animation-delay:.08s}.bento-card:nth-child(4){animation-delay:.12s}.bento-card:nth-child(5){animation-delay:.16s}.bento-card:nth-child(6){animation-delay:.2s}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.bento-card--wide{grid-column:span 2}.bento-card--tall{min-height:220px}@media(max-width:640px){.bento-card--wide{grid-column:span 1}}.card-kicker{font-size:.95rem;font-weight:600;color:var(--ink);margin:0}.card-sub{font-size:.85rem;color:var(--muted);margin:.15rem 0 0}.card-kpi{font-size:2.4rem;font-weight:700;letter-spacing:-.03em;line-height:1.1;margin:auto 0 .75rem}.card-kpi-sm{font-size:1.75rem}.trend{display:inline-flex;align-items:center;gap:.4rem;font-size:.88rem;font-weight:600;color:var(--good);margin-top:auto}.trend-dot{width:1.35rem;height:1.35rem;border-radius:50%;background:var(--good);color:#fff;display:inline-grid;place-items:center;font-size:.7rem}.badge{display:inline-flex;align-items:center;width:fit-content;font-size:.75rem;font-weight:600;padding:.3rem .75rem;border-radius:999px;margin-bottom:.75rem}.badge--ink{background:#e8eef7;color:var(--accent)}.badge--teal{background:#ccfbf1;color:#0f766e}.badge--soft{background:#f3f4f6;color:var(--muted)}.badge--warn{background:#ffedd5;color:var(--accent-3)}.progress-list{display:flex;flex-direction:column;gap:.85rem;margin-top:auto}.progress-row{display:grid;grid-template-columns:1fr auto;gap:.35rem .75rem;align-items:center;font-size:.88rem}.progress-row span:last-child{color:var(--muted);font-weight:500}.bar{grid-column:1 / -1;height:8px;background:#eef2f7;border-radius:999px;overflow:hidden}.bar>i{display:block;height:100%;border-radius:999px;background:var(--accent)}.bar>i.teal{background:var(--accent-2)}.bar>i.orange{background:var(--accent-3)}.quick-links{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:auto}.chip-link{display:inline-flex;padding:.45rem .85rem;border-radius:999px;background:var(--page);color:var(--ink);font-size:.85rem;font-weight:500;text-decoration:none}.chip-link:hover{background:#e5e7eb;text-decoration:none}.list-plain{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.55rem}.list-plain li{display:flex;justify-content:space-between;gap:.75rem;font-size:.9rem;padding-bottom:.45rem;border-bottom:1px solid var(--line)}.list-plain li:last-child{border-bottom:0}.mini-bars{display:flex;align-items:flex-end;gap:.45rem;height:72px;margin:.75rem 0 auto}.mini-bars span{flex:1;border-radius:8px 8px 4px 4px;background:#c7d7ec;min-height:12px}.mini-bars span.on{background:var(--accent)}.ring{width:120px;height:120px;border-radius:50%;margin:.5rem auto auto;background:conic-gradient(var(--accent) var(--p, 60%),#eef2f7 0);display:grid;place-items:center;position:relative}.ring:after{content:"";width:78px;height:78px;border-radius:50%;background:var(--card);position:absolute}.ring-label{position:relative;z-index:1;text-align:center;font-size:.78rem;font-weight:600;line-height:1.25}.panel{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.35rem 1.4rem;margin-bottom:1rem}.panel h2,.panel h3{font-weight:600;margin:0 0 .85rem;letter-spacing:-.02em}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap)}@media(max-width:800px){.grid2{grid-template-columns:1fr}}label{display:block;font-size:.8rem;font-weight:500;color:var(--muted);margin:.65rem 0 .3rem}input,select,textarea,button{font:inherit;padding:.55rem .8rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink)}input,select,textarea{border-radius:12px;width:100%}button{background:var(--ink);color:#fff;border-color:var(--ink);cursor:pointer;font-weight:500;width:auto}button.secondary{background:#fff;color:var(--ink);border-color:var(--line)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.55rem .35rem;border-bottom:1px solid var(--line);font-size:.92rem}th{color:var(--muted);font-weight:500;font-size:.78rem}.muted{color:var(--muted)}.error{color:#b91c1c}.stat{font-size:2.2rem;font-weight:700;letter-spacing:-.03em;margin:.2rem 0 .5rem}.meta-row{display:flex;flex-wrap:wrap;gap:1rem;font-size:.9rem;color:var(--muted)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:var(--page)}.login-card{width:min(400px,100%);background:var(--card);border-radius:var(--radius);padding:1.75rem 1.5rem;box-shadow:var(--shadow)}.login-card .brand{display:block;font-size:1.85rem;padding:0;margin-bottom:.15rem}.login-card button{width:100%;margin-top:1rem;padding:.75rem}
