:root{--primary: #2e6be6;--primary-strong: #3d7bf5;--primary-grad: linear-gradient(135deg, #2e6be6 0%, #3d7bf5 100%);--success: #15a05a;--warning: #d98a09;--danger: #e23b3b;--danger-bright: #ff4d4f;--info: #2e6be6;--text-title: #10131a;--text-main: #1a1d24;--text-sub: #363d4a;--text-body: #3a4150;--text-secondary: #6b7280;--text-muted: #9aa1ae;--text-placeholder: #8a91a0;--text-arrow: #c8cdd6;--border: #e2e5ea;--border-soft: #e6e8ec;--border-line: #eef0f3;--divider: #f1f2f4;--bg-page: #edeef1;--bg-screen: #f4f5f7;--bg-card: #ffffff;--fill-blue: #e7effd;--fill-blue-2: #eef3fe;--fill-blue-3: #eaf1fe;--fill-green: #eaf7f0;--fill-green-2: #e7f6ee;--fill-green-3: #e2f4ea;--fill-orange: #fef1e7;--fill-orange-2: #fbf1df;--fill-red: #fcebeb;--fill-gray: #f2f3f5;--radius-screen: 22px;--radius-card: 14px;--radius-lg: 16px;--radius-md: 13px;--radius-btn: 12px;--radius-chip: 10px;--radius-tag: 6px;--radius-tag-sm: 5px;--radius-pill: 999px;--shadow-card: 0 2px 10px rgba(16, 24, 40, .05);--shadow-float: 0 6px 18px rgba(16, 24, 40, .1);--shadow-screen: 0 10px 30px rgba(16, 24, 40, .07);--font-sans: -apple-system, "PingFang SC", "Noto Sans SC", "Microsoft YaHei", sans-serif;--font-mono: ui-monospace, "SF Mono", "Roboto Mono", monospace;--app-max-width: 430px;--statusbar-h: 40px;--navbar-h: 48px;--tabbar-h: 58px;--role-color: #2e6be6;--role-grad: linear-gradient(135deg, #2e6be6 0%, #3d7bf5 100%);--role-fill: #e7effd}[data-role=common]{--role-color: #2e6be6;--role-grad: linear-gradient(135deg, #2e6be6 0%, #3d7bf5 100%);--role-fill: #e7effd}[data-role=engineer]{--role-color: #15a05a;--role-grad: linear-gradient(135deg, #12935a 0%, #1aae64 100%);--role-fill: #eaf7f0}[data-role=sales]{--role-color: #6d54e0;--role-grad: linear-gradient(135deg, #6d54e0 0%, #8168ef 100%);--role-fill: #efecfd}[data-role=dispatch]{--role-color: #0e8e99;--role-grad: linear-gradient(135deg, #0e8e99 0%, #18a7b3 100%);--role-fill: #e2f5f6}[data-role=manager]{--role-color: #1f2937;--role-grad: linear-gradient(135deg, #1f2937 0%, #313f54 100%);--role-fill: #eceef2}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-sans);color:var(--text-main);background:#d9dbe0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.45}#root{min-height:100vh;min-height:100dvh}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:14px;color:var(--text-main)}textarea{resize:none}ul,ol{margin:0;padding:0;list-style:none}.app-viewport{width:100%;max-width:var(--app-max-width);margin:0 auto;min-height:100vh;min-height:100dvh;background:var(--bg-screen);position:relative;display:flex;flex-direction:column;overflow:hidden}@media(min-width:480px){.app-viewport{min-height:92vh;height:92vh;margin-top:4vh;border-radius:28px;box-shadow:0 18px 60px #10182838;overflow:hidden}}.screen{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--bg-screen)}.screen-body{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.screen-body::-webkit-scrollbar{width:0}.card{background:var(--bg-card);border-radius:var(--radius-card);box-shadow:var(--shadow-card)}.muted{color:var(--text-muted)}.mono{font-family:var(--font-mono)}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hairline{border-bottom:1px solid var(--divider)}@keyframes shimmer{0%{background-position:-340px 0}to{background-position:340px 0}}.skeleton{background:linear-gradient(90deg,#eef0f3 25%,#f6f7f9 37%,#eef0f3 63%);background-size:680px 100%;animation:shimmer 1.4s infinite linear;border-radius:7px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(14px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes growUp{0%{transform:scaleY(0)}to{transform:scaleY(1)}}@keyframes growRight{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.bar-grow{transform-origin:bottom;animation:growUp .6s ease both}.bar-grow-x{transform-origin:left;animation:growRight .7s ease both}@media(prefers-reduced-motion:reduce){.bar-grow,.bar-grow-x{animation:none}}.spin{animation:spin .8s linear infinite}.tap{transition:opacity .15s ease,transform .15s ease;-webkit-tap-highlight-color:transparent}.tap:active{opacity:.6}.press:active{transform:scale(.985)}@media(prefers-reduced-motion:reduce){.skeleton,.spin{animation:none}}
