:root {
  --blue: #1769ff;
  --blue-2: #0d55e8;
  --blue-soft: #eaf2ff;
  --orange: #ff7a00;
  --orange-soft: #fff1e4;
  --green: #16a765;
  --green-soft: #e9f8f0;
  --ink: #101828;
  --muted: #667085;
  --line: #e5eaf1;
  --surface: #ffffff;
  --page: #f3f6fa;
  --shadow: 0 14px 38px rgba(28, 51, 84, .10);
  --shadow-sm: 0 8px 22px rgba(28, 51, 84, .08);
  --radius: 20px;
  --font: "Microsoft YaHei UI", "PingFang SC", "Noto Sans SC", system-ui, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  min-width: 320px;
  color: var(--ink);
  background: var(--page);
  font-family: var(--font);
  -webkit-font-smoothing: antialiased;
}
button, input, select, textarea { font: inherit; }
button, [data-route], [data-action], [data-workspace-tab], .model-card { cursor: pointer; }
button { border: 0; }
a { color: inherit; text-decoration: none; }
svg { display: block; }

.app-shell { min-height: 100vh; }
.topbar-wrap {
  position: sticky;
  top: 0;
  z-index: 40;
  padding: 14px 20px 0;
  background: linear-gradient(180deg, rgba(243,246,250,.98), rgba(243,246,250,.82), transparent);
  backdrop-filter: blur(12px);
}
.topbar {
  max-width: 1440px;
  height: 66px;
  margin: 0 auto;
  padding: 0 18px;
  display: flex;
  align-items: center;
  gap: 28px;
  background: rgba(255,255,255,.96);
  border: 1px solid rgba(218,225,235,.86);
  border-radius: 18px;
  box-shadow: var(--shadow-sm);
}
.brand { display: flex; align-items: center; gap: 10px; min-width: max-content; }
.brand-mark {
  width: 38px; height: 38px; border-radius: 12px;
  display: grid; place-items: center;
  color: #fff; font-weight: 900;
  background: linear-gradient(145deg, #3c86ff, #0d55e8);
  box-shadow: 0 8px 18px rgba(23,105,255,.28);
}
.brand-mark.brand-logo { padding:3px; overflow:hidden; background:#fff; border:1px solid #e2e8f1; box-shadow:0 7px 16px rgba(17,45,82,.13); }
.brand-logo img { width:100%; height:100%; display:block; object-fit:contain; }
.brand-text { font-size: 20px; font-weight: 850; letter-spacing: -.5px; }
.nav { display: flex; align-items: center; gap: 6px; flex: 1; }
.nav-link {
  padding: 10px 13px;
  color: #475467;
  border-radius: 10px;
  font-size: 14px;
  transition: .18s ease;
}
.nav-link:hover, .nav-link.active { color: var(--blue); background: var(--blue-soft); }
.top-actions { display: flex; align-items: center; gap: 9px; }

/* 已登录用户 chip（头像+昵称） */
.user-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 42px;
  padding: 0 14px;
  border-radius: 12px;
  background: var(--blue-soft, #e8f0ff);
  border: 1.5px solid rgba(23, 105, 255, 0.18);
  color: var(--blue, #1769ff);
  font-size: 14px;
  font-weight: 700;
  text-decoration: none;
  transition: all 0.18s ease;
  cursor: pointer;
}
.user-chip:hover {
  background: #dceaff;
  border-color: rgba(23, 105, 255, 0.35);
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(23, 105, 255, 0.14);
}
.user-avatar {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  object-fit: cover;
  background: #dceaff;
  border: 1.5px solid rgba(255,255,255,0.7);
  flex-shrink: 0;
}
.user-avatar-placeholder {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--blue, #1769ff);
  color: #fff;
  font-size: 13px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.user-name {
  max-width: 96px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.button {
  min-height: 42px;
  padding: 0 17px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-radius: 12px;
  color: #344054;
  background: #fff;
  border: 1px solid var(--line);
  font-weight: 700;
  transition: .18s ease;
}
.button:hover { transform: translateY(-1px); box-shadow: 0 8px 18px rgba(28,51,84,.10); }
.button.primary { color: #fff; background: linear-gradient(135deg, #2978ff, var(--blue)); border-color: var(--blue); }
.button.orange { color: #fff; background: linear-gradient(135deg, #ff8d22, var(--orange)); border-color: var(--orange); }
.button.ghost { color: var(--blue); background: var(--blue-soft); border-color: transparent; }
.button.small { min-height: 34px; padding: 0 12px; font-size: 13px; border-radius: 10px; }
.button.wide { width: 100%; }
.button svg, .nav-link svg { width: 18px; height: 18px; }
.icon-button { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 10px; background: transparent; color: #667085; }

.page { max-width: 1440px; margin: 0 auto; padding: 18px 20px 54px; }
.home-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 286px;
  gap: 16px;
  align-items: stretch;
}
.hero-main {
  position: relative;
  min-height: 336px;
  overflow: hidden;
  border-radius: var(--radius);
  background: #f8fbff url("assets/images/tech-bg.png") center / cover no-repeat;
  border: 1px solid #e4ebf5;
  box-shadow: var(--shadow-sm);
}
.hero-copy {
  position: relative;
  z-index: 3;
  width: 55%;
  min-width: 540px;
  padding: 46px 0 36px 42px;
}
.eyebrow {
  display: inline-flex; align-items: center; gap: 7px;
  margin-bottom: 12px; padding: 7px 10px;
  border-radius: 999px; color: var(--blue); background: rgba(234,242,255,.88);
  font-size: 13px; font-weight: 750;
}
.eyebrow .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); }
.hero-copy h1 { margin: 0; font-size: clamp(34px, 3vw, 51px); line-height: 1.15; letter-spacing: -2.4px; }
.hero-copy p { margin: 15px 0 22px; color: #667085; font-size: 17px; }
.persona-row { display: flex; gap: 8px; margin-bottom: 16px; }
.persona-chip {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 8px 11px; border-radius: 999px;
  background: rgba(255,255,255,.88); border: 1px solid #dfe7f2;
  font-size: 13px; color: #475467; box-shadow: 0 5px 14px rgba(28,51,84,.05);
}
.persona-chip strong { color: var(--ink); }
.search-row { display: flex; gap: 10px; }
.search-box {
  height: 54px; flex: 1; min-width: 0;
  display: flex; align-items: center; gap: 10px;
  padding: 0 14px; border-radius: 14px;
  background: rgba(255,255,255,.97); border: 1px solid #dfe5ee;
  box-shadow: 0 9px 24px rgba(28,51,84,.08);
}
.search-box svg { width: 21px; color: #7c8798; }
.search-box input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--ink); }
.search-box input::placeholder { color: #98a2b3; }
.search-box .upload-mini { color: #8b96a7; }
.search-row .button { min-height: 54px; padding: 0 21px; }
.hero-art {
  position: absolute; z-index: 2;
  right: -1%; bottom: -5%; width: 52%; height: 112%;
  overflow: hidden; pointer-events: none;
}
.hero-art img { width: 100%; height: 100%; object-fit: cover; object-position: 72% center; mix-blend-mode: multiply; }
.hero-art::after { content:""; position:absolute; inset:0; background:linear-gradient(90deg,#f8fbff 0%,transparent 25%); }

.quick-rail { grid-row: span 2; display: flex; flex-direction: column; gap: 12px; }
.quick-card {
  position: relative;
  flex: 1;
  min-height: 112px;
  padding: 17px 16px;
  display: grid;
  grid-template-columns: 42px 1fr 20px;
  align-items: center;
  gap: 12px;
  background: var(--surface);
  border: 1px solid #e0e6ee;
  border-radius: 18px;
  box-shadow: var(--shadow-sm);
  transition: .18s ease;
}
.quick-card:hover { transform: translateY(-2px); border-color: #bed2ff; box-shadow: var(--shadow); }
.quick-icon { width: 42px; height: 42px; display: grid; place-items: center; border-radius: 13px; }
.quick-icon svg { width: 21px; height: 21px; }
.quick-icon.blue { color: var(--blue); background: var(--blue-soft); }
.quick-icon.orange { color: var(--orange); background: var(--orange-soft); }
.quick-icon.green { color: var(--green); background: var(--green-soft); }
.quick-copy strong { display: block; font-size: 15px; margin-bottom: 5px; }
.quick-copy span { display: block; color: #667085; font-size: 12px; line-height: 1.45; }
.quick-copy em { color: var(--orange); font-style: normal; font-weight: 850; }
.quick-arrow { color: #a7b1c0; font-size: 22px; }

.section-card {
  margin-top: 16px;
  padding: 20px;
  background: #fff;
  border: 1px solid #e3e8ef;
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}
.home-layout .section-card { margin-top: 0; }
.section-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.section-head h2 { margin: 0; font-size: 25px; letter-spacing: -.8px; }
.section-head p { margin: 5px 0 0; color: var(--muted); font-size: 14px; }
.tabs { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.tab {
  padding: 7px 12px; border-radius: 9px; color: #667085;
  background: #f1f4f8; border: 1px solid transparent; font-size: 13px;
}
.tab.active { color: #fff; background: var(--blue); }
.model-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 17px; }
.model-card {
  min-width: 0; min-height:304px; overflow: hidden;
  display:flex; flex-direction:column;
  border: 1px solid #e1e7ef; border-radius: 18px;
  background: #fff; box-shadow:0 4px 14px rgba(31,51,80,.045); transition: .22s ease;
}
.model-card:hover { transform: translateY(-4px); border-color: #afc9ff; box-shadow: 0 18px 34px rgba(28,51,84,.13); }
.model-card:focus-visible { outline:3px solid rgba(23,105,255,.24); outline-offset:3px; }
.model-thumb {
  position: relative; height: 132px; flex:none; overflow:hidden;
  background:linear-gradient(145deg,#f8fbff,#eaf2ff);
}
.model-thumb img { display:block; width:100%; height:100%; object-fit:cover; object-position:center; }
.model-body { padding: 12px 12px 11px; display:flex; flex:1; flex-direction:column; }
.model-title { font-size: 14px; font-weight: 820; line-height:1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.creator { display: flex; align-items: center; gap: 6px; margin: 7px 0 8px; color: #667085; font-size: 11px; }
.avatar { width: 21px; height: 21px; display:grid; place-items:center; border-radius:50%; background:linear-gradient(145deg,#cde0ff,#75a7ff); color:#fff; font-size:10px; }
.tag-row { display:flex; gap:5px; flex-wrap:wrap; margin-bottom:9px; }
.tag { padding:3px 6px; border:1px solid #edf0f4; border-radius:6px; color:#667085; background:#f6f8fa; font-size:10px; }
.model-meta { display:flex; align-items:center; justify-content:space-between; margin-top:auto; color:#667085; font-size:12px; }
.printable { padding:3px 6px; color:var(--green); background:var(--green-soft); border-radius:6px; font-size:10px; font-weight:750; }
.model-price { margin-top:8px; padding-top:7px; border-top:1px solid #f0f2f5; text-align:right; color:var(--blue); font-size:16px; font-weight:850; }

.flow-strip {
  margin-top: 16px; padding: 18px 24px;
  display: grid; grid-template-columns: 1fr 70px 1fr 70px 1fr 70px 1fr;
  align-items: center; gap: 14px;
  border-radius: var(--radius); background: #fff; border: 1px solid #e2e7ee; box-shadow: var(--shadow-sm);
}
.flow-step { display:flex; align-items:center; gap:12px; }
.flow-icon { width:42px; height:42px; flex:0 0 auto; display:grid; place-items:center; color:#fff; border-radius:50%; background:var(--blue); }
.flow-icon svg { width:20px; height:20px; }
.flow-step strong { display:block; font-size:14px; }
.flow-step span { color:#667085; font-size:12px; }
.flow-line { border-top: 2px dashed #ced8e6; position:relative; }
.flow-line::after { content:"›"; position:absolute; right:-2px; top:-17px; color:#b7c3d4; font-size:24px; }

.page-hero {
  padding: 28px 30px; margin-bottom: 16px;
  display: flex; justify-content: space-between; align-items: center; gap: 24px;
  border-radius: var(--radius); background: #fff url("assets/images/tech-bg.png") center/cover;
  border: 1px solid #e1e8f2; box-shadow: var(--shadow-sm);
}
.page-hero h1 { margin: 0 0 8px; font-size: 33px; letter-spacing:-1.2px; }
.page-hero p { margin:0; color:var(--muted); }
.services-hero {
  position: fixed; z-index:18; isolation: isolate; overflow: hidden;
  top:80px; left:50%; width:min(calc(100% - 40px),1440px); transform:translateX(-50%);
  min-height:clamp(210px,15.5vw,270px); aspect-ratio:auto;
  padding: 0;
  background-color:rgba(243,246,250,.96);
  background-image:url("assets/images/nearby-roof-cutout-v6.png"),linear-gradient(180deg,rgba(243,246,250,.98) 0%,rgba(243,246,250,.96) 68%,rgba(243,246,250,0) 100%);
  background-position:center calc(-7.4vw),center;
  background-size:100% auto,100% 100%;
  background-repeat:no-repeat;
  border: 0; border-radius: 0; box-shadow: none;
  pointer-events:none;
}
.services-hero::after {
  display:none;
}
.services-hero > * { position:relative; z-index:1; top:-20px; }
.services-hero-copy { max-width: 760px; }
.services-hero .eyebrow { color:#1559d8; }
.services-hero h1 { font-size:36px; color:#0a1730; }
.services-hero p { color:#5b6b82; }
.services-hero-action { flex:0 0 auto; box-shadow:0 12px 28px rgba(255,122,0,.2); }
.filter-row { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:16px; }
.services-page { padding-top:56px; padding-bottom:54px; overflow-x:clip; }
.services-content { position:relative; width:min(76vw,1180px); margin:0 auto; padding-top:8px; }
.filter-row .search-box { max-width:420px; height:46px; }
.catalog-filter-card { position:relative; min-height:72px; margin-top:18px; padding:12px 168px 12px 12px; overflow:visible; border:1px solid #e1e8f1; border-radius:20px; background:#fff; box-shadow:var(--shadow-sm); }
.catalog-mascot { position:absolute; z-index:4; right:24px; bottom:-32px; width:132px; height:132px; display:block; object-fit:contain; pointer-events:none; user-select:none; filter:drop-shadow(0 12px 15px rgba(30,50,76,.15)); }
.catalog-section { margin-top:18px; padding:18px 18px 22px; }
.catalog-toolbar { padding:0; gap:10px; margin:0; border:0; border-radius:15px; background:linear-gradient(135deg,#fbfcff,#f4f8fd); box-shadow:none; }
.catalog-toolbar .search-box { flex:1 1 320px; max-width:none; background:#fff; box-shadow:0 5px 14px rgba(35,65,105,.05); }
.catalog-toolbar .filter-select { min-width:132px; background-color:#fff; }
.catalog-toolbar .catalog-upload { min-height:46px; margin-left:auto; padding-inline:20px; white-space:nowrap; box-shadow:0 10px 22px rgba(255,122,0,.2); }
.filter-select { height:46px; padding:0 34px 0 13px; border:1px solid var(--line); border-radius:11px; color:#475467; background:#fff; outline:0; }
.catalog-grid { grid-template-columns: repeat(5,minmax(0,1fr)); gap:16px; }
.catalog-pagination { margin-top:22px; display:flex; align-items:center; justify-content:center; gap:8px; }
.catalog-pagination button { width:38px; height:38px; display:grid; place-items:center; border:1px solid #dfe6ef; border-radius:11px; color:#586579; background:#fff; box-shadow:0 4px 12px rgba(34,57,89,.05); transition:.18s ease; }
.catalog-pagination button:hover:not(:disabled) { color:var(--blue); border-color:#a9c4ff; background:#f4f8ff; }
.catalog-pagination .page-number.active { color:#fff; border-color:var(--blue); background:var(--blue); box-shadow:0 7px 16px rgba(23,105,255,.24); }
.catalog-pagination button:disabled { opacity:.38; cursor:not-allowed; box-shadow:none; }

.wizard-shell { display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:16px; }
.wizard-main, .quote-panel { background:#fff; border:1px solid #e2e7ee; border-radius:var(--radius); box-shadow:var(--shadow-sm); }
.wizard-main { padding:24px; }
.quote-panel { padding:22px; align-self:start; position:sticky; top:98px; }
.stepper { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:26px; }
.step-item { position:relative; text-align:center; color:#98a2b3; font-size:12px; }
.step-item::before { content:""; display:block; height:4px; margin-bottom:9px; border-radius:999px; background:#e9edf3; }
.step-item.active, .step-item.done { color:var(--blue); font-weight:750; }
.step-item.active::before, .step-item.done::before { background:var(--blue); }
.wizard-title h2 { margin:0 0 7px; font-size:25px; }
.wizard-title p { margin:0 0 20px; color:var(--muted); }
.drop-zone {
  min-height:230px; display:grid; place-items:center; text-align:center; padding:28px;
  border:2px dashed #bad0f9; border-radius:18px; background:#f7faff;
}
.drop-icon { width:62px; height:62px; display:grid; place-items:center; margin:0 auto 12px; color:var(--blue); background:var(--blue-soft); border-radius:20px; }
.drop-icon svg { width:28px; height:28px; }
.drop-zone h3 { margin:0 0 6px; }
.drop-zone p { margin:0 0 16px; color:var(--muted); font-size:13px; }
.choice-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.choice-card { padding:18px; text-align:left; border:1px solid var(--line); border-radius:15px; background:#fff; transition:.18s; }
.choice-card:hover, .choice-card.selected { border-color:var(--blue); background:#f6f9ff; box-shadow:inset 0 0 0 1px var(--blue); }
.choice-card strong { display:block; margin-bottom:7px; }
.choice-card span { color:var(--muted); font-size:13px; line-height:1.5; }
.wizard-actions { display:flex; justify-content:flex-end; gap:10px; margin-top:24px; }
.quote-panel h3 { margin:0 0 18px; font-size:18px; }
.quote-line { display:flex; justify-content:space-between; padding:11px 0; border-bottom:1px solid #eef1f5; color:#667085; font-size:13px; }
.quote-line strong { color:var(--ink); }
.quote-total { display:flex; justify-content:space-between; align-items:end; padding:18px 0 6px; }
.quote-total strong { color:var(--orange); font-size:32px; }
.assurance { margin-top:16px; padding:14px; border-radius:13px; color:#306c50; background:var(--green-soft); font-size:12px; line-height:1.6; }

.service-list { display:flex; flex-direction:column; gap:12px; }
.service-card { display:grid; grid-template-columns:118px 1fr auto; gap:15px; padding:15px; background:#fff; border:1px solid var(--line); border-radius:17px; box-shadow:var(--shadow-sm); }
.service-photo { display:grid; place-items:center; min-height:105px; color:#4d79cc; border-radius:13px; background:linear-gradient(145deg,#e8f1ff,#c9ddff); }
.service-photo svg { width:46px; height:46px; }
.service-info h3 { margin:2px 0 7px; }
.service-info p { margin:5px 0; color:var(--muted); font-size:13px; }
.rating { color:#ff8b18; font-weight:750; }
.service-cta { display:flex; flex-direction:column; align-items:flex-end; justify-content:space-between; }
.service-price { color:var(--orange); font-size:20px; font-weight:850; }
.service-filters { position:absolute; z-index:10; top:22px; right:24px; width:auto; margin:0; justify-content:flex-end; }
.service-filters .filter-select { min-width:182px; height:48px; padding-left:16px; color:#344054; border-color:#d9e3ef; box-shadow:0 5px 16px rgba(32,58,94,.04); }
.service-filters .filter-select:focus { border-color:#8eb5ff; box-shadow:0 0 0 3px rgba(23,105,255,.12); }
.service-map-compass { position:absolute; z-index:12; left:24px; top:-40px; width:96px; height:96px; object-fit:contain; pointer-events:none; user-select:none; filter:drop-shadow(0 10px 18px rgba(11,37,76,.15)); }
.service-map-stage {
  position:relative; width:100%; margin-inline:auto; min-height:740px; overflow:hidden; isolation:isolate;
  border:1px solid #cfdeef; border-radius:26px;
  background:linear-gradient(145deg,#f3f8ff 0%,#e8f1fb 52%,#eef5fc 100%);
  box-shadow:0 20px 50px rgba(35,70,112,.10),inset 0 1px 0 rgba(255,255,255,.9);
}
.service-map-pan { position:absolute; z-index:1; inset:0; cursor:grab; touch-action:pan-y; will-change:transform; transition:transform .08s linear; }
.service-map-stage.is-dragging .service-map-pan { cursor:grabbing; transition:none; user-select:none; }
.service-map-stage::before,.service-map-stage::after { content:""; position:absolute; z-index:0; pointer-events:none; border-radius:50%; filter:blur(2px); }
.service-map-stage::before { width:420px; height:420px; left:34%; top:16%; background:radial-gradient(circle,rgba(23,105,255,.12),transparent 68%); }
.service-map-stage::after { width:330px; height:330px; right:-80px; bottom:-100px; background:radial-gradient(circle,rgba(18,168,122,.10),transparent 68%); }
.service-map-stage .map-grid { position:absolute; z-index:0; inset:-10%; opacity:.46; background-image:linear-gradient(rgba(154,181,215,.7) 1px,transparent 1px),linear-gradient(90deg,rgba(154,181,215,.7) 1px,transparent 1px); background-size:54px 54px; transform:rotate(5deg) scale(1.08); }
.map-glow { position:absolute; z-index:0; inset:0; background:linear-gradient(90deg,rgba(244,248,253,.94) 0%,rgba(244,248,253,.15) 31%,rgba(244,248,253,.10) 69%,rgba(244,248,253,.9) 100%); }
.service-map-heading { position:absolute; z-index:5; left:50%; top:28px; width:360px; text-align:center; transform:translateX(-50%); }
.service-map-heading span { display:inline-flex; align-items:center; gap:7px; padding:6px 11px; color:#1559d8; background:rgba(255,255,255,.84); border:1px solid rgba(200,218,242,.9); border-radius:999px; font-size:12px; font-weight:750; backdrop-filter:blur(8px); }
.service-map-heading span i { width:7px; height:7px; border-radius:50%; background:#12a87a; box-shadow:0 0 0 4px rgba(18,168,122,.12); }
.service-map-heading strong { display:block; margin-top:10px; color:#0b2345; font-size:22px; }
.service-map-heading small { display:block; margin-top:5px; color:#667085; font-size:12px; }
.service-connectors { position:absolute; z-index:2; inset:0; width:100%; height:100%; pointer-events:none; overflow:visible; }
.service-connectors .connector { fill:none; stroke:#78a6e8; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; vector-effect:non-scaling-stroke; filter:drop-shadow(0 2px 2px rgba(23,105,255,.12)); }
.service-connectors .connector-dot { fill:#1769ff; stroke:#fff; stroke-width:2; vector-effect:non-scaling-stroke; }
.service-connectors .connector-2 { stroke:#ff8a18; }.service-connectors .connector-dot-2 { fill:#ff8a18; }
.service-connectors .connector-3 { stroke:#12a87a; }.service-connectors .connector-dot-3 { fill:#12a87a; }
.service-connectors .connector-4 { stroke:#8b5cf6; }.service-connectors .connector-dot-4 { fill:#8b5cf6; }
.service-connectors .connector-5 { stroke:#06a9c8; }.service-connectors .connector-dot-5 { fill:#06a9c8; }
.service-connectors .connector-6 { stroke:#0b3d91; }.service-connectors .connector-dot-6 { fill:#0b3d91; }
.service-map-point { position:absolute; z-index:4; width:34px; height:34px; display:grid; place-items:center; color:#fff; border:4px solid #fff; border-radius:50% 50% 50% 10%; transform:translate(-50%,-50%) rotate(-45deg); background:#1769ff; box-shadow:0 9px 22px rgba(23,105,255,.28); }
.service-map-point span { transform:rotate(45deg); font-size:11px; font-weight:800; }
.service-map-point.orange { background:#ff7a00; }.service-map-point.green { background:#12a87a; }.service-map-point.violet { background:#8b5cf6; }.service-map-point.cyan { background:#06a9c8; }.service-map-point.navy { background:#0b3d91; }
.point-1{left:44.64%;top:27.84%}.point-2{left:45.09%;top:47.97%}.point-3{left:44.64%;top:72.30%}.point-4{left:55.71%;top:28.11%}.point-5{left:55.80%;top:48.92%}.point-6{left:55.36%;top:72.70%}
.map-service-card { position:absolute; z-index:6; width:330px; min-height:132px; padding:15px 16px; color:#101828; border:1px solid rgba(213,225,240,.95); border-radius:17px; background:rgba(255,255,255,.94); box-shadow:0 12px 28px rgba(28,55,89,.09); backdrop-filter:blur(10px); transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease; }
.map-service-card:hover { transform:translateY(-3px); border-color:#9dbdff; box-shadow:0 17px 34px rgba(28,71,130,.15); }
.callout-1,.callout-2,.callout-3 { left:24px; }.callout-4,.callout-5,.callout-6 { right:24px; }
.callout-1,.callout-4 { top:102px; }.callout-2,.callout-5 { top:307px; }.callout-3,.callout-6 { top:512px; }
.map-service-card-head { display:grid; grid-template-columns:30px minmax(0,1fr) auto; align-items:start; gap:9px; }
.district-mark { width:28px; height:28px; display:grid; place-items:center; color:#fff; border-radius:9px; background:#1769ff; font-size:12px; font-weight:850; box-shadow:0 6px 13px rgba(23,105,255,.2); }
.district-mark.orange{background:#ff7a00}.district-mark.green{background:#12a87a}.district-mark.violet{background:#8b5cf6}.district-mark.cyan{background:#06a9c8}.district-mark.navy{background:#0b3d91}
.district-name { display:block; margin-bottom:2px; color:#7b8a9f; font-size:10px; font-weight:700; }
.map-service-card h3 { margin:0; overflow:hidden; color:#101828; font-size:15px; line-height:1.25; white-space:nowrap; text-overflow:ellipsis; }
.map-service-card-head strong { color:#ff7a00; font-size:16px; white-space:nowrap; }
.map-service-meta { display:flex; align-items:center; gap:8px; margin:10px 0 11px 39px; color:#667085; font-size:11px; }
.map-service-meta i { width:3px; height:3px; border-radius:50%; background:#a9b5c5; }
.map-service-card-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; padding-left:39px; }
.service-materials { display:flex; align-items:center; flex-wrap:wrap; gap:4px; }
.service-materials span { padding:3px 7px; color:#315f93; border:1px solid #d8e6f6; border-radius:7px; background:#f3f8ff; font-size:9px; font-weight:750; line-height:1; }
.map-service-card-foot .button { min-height:32px; padding:7px 12px; border-radius:9px; font-size:11px; }

@media (max-width:1280px) {
  .services-content { width:min(92%,980px); }
  .service-map-stage { min-height:auto; padding:360px 16px 16px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
  .service-map-heading { top:104px; }
  .service-map-pan { display:contents; transform:none !important; }
  .service-map-heading { top:24px; }
  .service-connectors { display:none; }
  .service-map-point { transform:translate(-50%,-50%) rotate(-45deg) scale(.9); }
  .point-1{left:32%;top:25%}.point-2{left:44%;top:32%}.point-3{left:58%;top:23%}.point-4{left:68%;top:35%}.point-5{left:52%;top:41%}.point-6{left:37%;top:43%}
  .map-service-card { position:relative; inset:auto; width:auto; min-height:132px; }
}

@media (max-width:700px) {
  .services-content { width:94%; }
  .service-map-compass { left:12px; top:-23px; width:62px; height:62px; }
  .service-filters { top:14px; right:12px; width:calc(100% - 96px); display:grid; grid-template-columns:1fr 1fr; gap:8px; }
  .service-filters .filter-select { width:100%; min-width:0; }
  .service-map-stage { padding:330px 10px 10px; grid-template-columns:1fr; border-radius:19px; }
  .service-map-heading { top:92px; width:calc(100% - 32px); }
  .service-map-heading strong { font-size:19px; }
  .point-1{left:25%;top:23%}.point-2{left:41%;top:31%}.point-3{left:61%;top:22%}.point-4{left:76%;top:34%}.point-5{left:54%;top:41%}.point-6{left:31%;top:42%}
  .map-service-card { padding:14px; }
  .map-service-card-head { grid-template-columns:28px minmax(0,1fr) auto; }
  .map-service-meta,.map-service-card-foot { margin-left:0; padding-left:37px; }
}

.content-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.content-card { padding:20px; background:#fff; border:1px solid var(--line); border-radius:17px; box-shadow:var(--shadow-sm); }
.content-card h3 { margin:0 0 9px; }
.content-card p { color:var(--muted); font-size:13px; line-height:1.7; }
.metric { margin:14px 0; font-size:26px; font-weight:850; color:var(--blue); }

.demand-page { max-width:1440px; }
.demand-hero {
  position:relative; height:160px; min-height:160px; padding:20px clamp(32px,4.3vw,60px); overflow:visible;
  display:flex; align-items:center; justify-content:flex-start;
  background:transparent;
  border:0; border-radius:0; box-shadow:none;
}
.demand-hero::before,.demand-hero::after { content:none; }
.demand-hero-copy { position:relative; z-index:2; opacity:1; }
.demand-hero-copy { max-width:56%; }
.demand-fruit-display { position:absolute; right:0; top:-78px; width:52%; height:316px; pointer-events:none; }
.demand-fruit-display img { position:absolute; inset:0; display:block; width:100%; height:100%; object-fit:contain; object-position:center; }
.fruit-display-stage { z-index:1; }
.fruit-display-group { z-index:4; transform:scale(.96) translateY(-2px); transform-origin:center; filter:drop-shadow(0 8px 11px rgba(30,50,76,.12)); }
.demand-hero-models { position:absolute; z-index:2; right:clamp(24px,4vw,62px); bottom:-20px; width:clamp(360px,35vw,500px); height:calc(100% + 26px); opacity:1; pointer-events:none; }
.demand-hero-models::after { content:""; position:absolute; right:2%; bottom:16px; width:88%; height:27px; border-radius:50%; background:radial-gradient(ellipse,rgba(11,61,145,.2),transparent 69%); filter:blur(6px); }
.demand-hero-models img { position:absolute; z-index:1; object-fit:contain; filter:drop-shadow(0 15px 20px rgba(11,37,76,.16)); }
.demand-hero-arm { right:0; bottom:0; width:53%; height:100%; object-position:right bottom; }
.demand-hero-vehicle { left:-4%; bottom:8px; width:64%; height:66%; object-position:left bottom; transform:scaleX(-1); }
.demand-hero h1 { margin:0 0 10px; font-size:clamp(32px,3vw,44px); letter-spacing:-1.8px; line-height:1.18; }
.demand-hero p { font-size:16px; }
.demand-publish { min-height:48px; padding:0 22px; border-radius:10px; box-shadow:0 10px 24px rgba(255,122,0,.19); }

.demand-toolbar {
  margin:18px 0 24px; padding:18px 20px; display:flex; align-items:center; justify-content:space-between; gap:24px;
  background:#fff; border:1px solid #e8eef7; border-radius:16px; box-shadow:0 8px 24px rgba(28,51,84,.06);
}
.demand-toolbar-heading { flex:0 0 auto; }
.demand-toolbar-heading h2 { margin:0 0 5px; font-size:21px; }
.demand-toolbar-heading p { margin:0; color:var(--muted); font-size:13px; }
.demand-filters { display:flex; align-items:end; justify-content:flex-end; gap:12px; }
.demand-filters label { display:flex; flex-direction:column; gap:6px; color:#475467; font-size:11px; font-weight:750; }
.demand-filters select {
  height:46px; min-width:174px; padding:0 38px 0 13px; color:var(--ink); outline:0;
  border:1px solid #d9e1ec; border-radius:10px; background-color:#fff;
  transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease;
}
.demand-filters select:hover { border-color:#b8c8de; }
.demand-filters select:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(23,105,255,.13); }
.demand-filters select:disabled { color:#98a2b3; background:#f2f4f7; cursor:not-allowed; }

.demand-market-layout { position:relative; z-index:2; margin-top:22px; display:grid; grid-template-columns:minmax(0,2fr) minmax(340px,1fr); gap:22px; align-items:start; }
.demand-grid { min-width:0; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:22px; align-items:stretch; }
.demand-grid.is-entering { animation:demandFade .2s ease both; }
@keyframes demandFade { from{opacity:.35;transform:translateY(5px)} to{opacity:1;transform:translateY(0)} }
.demand-card {
  position:relative; min-height:342px; padding:21px; display:flex; flex-direction:column; background:#fff;
  border:1px solid #e8eef7; border-radius:16px; box-shadow:0 6px 18px rgba(28,51,84,.045);
  transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease;
}
.demand-card-pin { position:absolute; z-index:3; left:50%; top:-15px; width:30px; height:30px; display:grid; place-items:center; transform:translateX(-50%); color:#1769ff; background:#eaf2ff; border:3px solid #f4f7fb; border-radius:50%; box-shadow:0 5px 12px rgba(28,51,84,.13); }
.demand-card-pin svg { width:15px; height:15px; stroke-width:2.2; }
.demand-card-pin.communicating { color:#c45f00; background:#fff0e2; }
.demand-card-pin.in-progress { color:#0b5bb8; background:#e1f2ff; }
.demand-card-pin.completed { color:#0d815f; background:#e3f7ef; }
.demand-card:hover { transform:translateY(-3px); border-color:#b9d1ff; box-shadow:0 13px 28px rgba(28,51,84,.09); }
.demand-card.is-completed { background:#fcfffe; border-color:#e1eee9; }
.demand-card.is-completed:hover { border-color:#9edac7; }
.demand-card-top { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.demand-card-top time { color:#98a2b3; font-size:12px; }
.demand-status { padding:6px 9px; border-radius:8px; color:#1769ff; background:#eaf2ff; font-size:12px; font-weight:800; }
.demand-status.communicating { color:#b15a00; background:#fff3e8; }
.demand-status.in-progress { color:#0b5bb8; background:#e7f4ff; }
.demand-status.completed { color:#0d815f; background:#e8f8f2; }
.demand-card h3 { margin:18px 0 9px; font-size:19px; line-height:1.4; letter-spacing:-.3px; }
.demand-description { min-height:48px; margin:0 0 15px; overflow:hidden; color:var(--muted); font-size:13px; line-height:1.75; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.demand-facts { display:flex; align-items:center; flex-wrap:wrap; gap:8px 12px; color:#667085; font-size:12px; }
.demand-facts > span { display:inline-flex; align-items:center; gap:5px; }
.demand-facts svg { width:14px; height:14px; color:#7d8ca3; }
.demand-type { padding:5px 8px; color:#0b3d91; background:#eff5ff; border-radius:7px; font-weight:750; }
.demand-budget { margin:18px 0 17px; padding-top:15px; display:flex; align-items:baseline; gap:7px; border-top:1px solid #edf1f6; }
.demand-budget small { color:#667085; font-size:12px; }
.demand-budget strong { color:#0b3d91; font-size:24px; letter-spacing:-.5px; }
.demand-card-actions { margin-top:auto; display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
.demand-card-actions .button { border-radius:10px; }
.demand-secondary { color:var(--blue); background:#f7faff; border-color:#cfe0ff; }
.demand-secondary:hover { background:#eaf2ff; }
.demand-card-actions .button:focus-visible,.demand-publish:focus-visible,.demand-empty .button:focus-visible { outline:3px solid rgba(23,105,255,.2); outline-offset:2px; }
.demand-card-actions .button:disabled,.demand-publish:disabled { color:#98a2b3; background:#f2f4f7; border-color:#e4e7ec; box-shadow:none; transform:none; cursor:not-allowed; }

.demand-empty { grid-column:1/-1; min-height:330px; padding:48px 20px; display:grid; place-items:center; align-content:center; text-align:center; background:#fff; border:1px dashed #cdd9e9; border-radius:16px; }
.demand-empty-icon { width:58px; height:58px; display:grid; place-items:center; color:var(--blue); border-radius:16px; background:var(--blue-soft); }
.demand-empty-icon svg { width:28px; height:28px; }
.demand-empty h3 { margin:16px 0 7px; }
.demand-empty p { margin:0 0 18px; color:var(--muted); font-size:13px; }

.demand-publish-panel { position:sticky; top:98px; min-height:0; height:auto; padding:24px; overflow:hidden; display:flex; flex-direction:column; align-self:start; border:1px solid #d8e6fb; border-radius:18px; background:linear-gradient(160deg,#fff 0%,#f8fbff 72%,#eef5ff 100%); box-shadow:0 14px 34px rgba(25,62,113,.09); }
.demand-publish-panel::after { content:""; position:absolute; right:-70px; top:-80px; width:190px; height:190px; border-radius:50%; background:radial-gradient(circle,rgba(23,105,255,.13),transparent 68%); pointer-events:none; }
.demand-panel-filters { position:relative; z-index:2; display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.demand-panel-filters label { min-width:0; display:flex; flex-direction:column; gap:6px; color:#475467; font-size:11px; font-weight:750; }
.demand-panel-filters .demand-filter-status { grid-column:1/-1; }
.demand-panel-filters select { width:100%; height:44px; min-width:0; padding:0 34px 0 11px; color:#101828; outline:0; border:1px solid #d9e1ec; border-radius:10px; background-color:#fff; transition:border-color .18s ease,box-shadow .18s ease; }
.demand-panel-filters select:hover { border-color:#b8c8de; }
.demand-panel-filters select:focus { border-color:#1769ff; box-shadow:0 0 0 3px rgba(23,105,255,.12); }
.demand-publish-content { position:relative; z-index:2; margin-top:20px; }
.demand-custom-mode { margin-bottom:18px; padding:4px; display:grid; grid-template-columns:1fr 1.25fr; gap:4px; border:1px solid #d9e6f8; border-radius:12px; background:#edf4ff; }
.demand-custom-mode button { min-height:42px; padding:7px 9px; display:flex; align-items:center; justify-content:center; gap:6px; color:#5d6b82; border-radius:9px; background:transparent; font-size:11px; font-weight:800; line-height:1.25; transition:color .18s ease,background .18s ease,box-shadow .18s ease; }
.demand-custom-mode button:hover { color:#1769ff; background:rgba(255,255,255,.65); }
.demand-custom-mode button:focus-visible { outline:3px solid rgba(23,105,255,.18); outline-offset:1px; }
.demand-custom-mode button.is-active { color:#0b3d91; background:#fff; box-shadow:0 4px 12px rgba(25,62,113,.1); }
.demand-custom-mode svg { width:15px; height:15px; flex:0 0 auto; }
.demand-publish-heading,.demand-publish-form,.demand-publish-assurance { position:relative; z-index:1; }
.demand-publish-heading > span { display:inline-flex; align-items:center; gap:7px; padding:6px 9px; color:#1769ff; border-radius:8px; background:#eaf2ff; font-size:12px; font-weight:800; }
.demand-publish-heading > span svg { width:15px; height:15px; }
.demand-publish-heading h2 { margin:14px 0 7px; font-size:23px; letter-spacing:-.6px; }
.demand-publish-heading p { margin:0; color:#667085; font-size:12px; line-height:1.65; }
.demand-publish-form { margin-top:19px; display:flex; flex-direction:column; gap:14px; }
.demand-publish-form label { min-width:0; display:flex; flex-direction:column; gap:7px; color:#344054; font-size:12px; font-weight:750; }
.demand-publish-form input,.demand-publish-form select,.demand-publish-form textarea { width:100%; min-width:0; color:#101828; outline:0; border:1px solid #dbe3ef; border-radius:10px; background:#fff; transition:border-color .18s ease,box-shadow .18s ease; }
.demand-publish-form input,.demand-publish-form select { height:43px; padding:0 12px; }
.demand-publish-form textarea { min-height:98px; padding:11px 12px; resize:vertical; line-height:1.6; }
.demand-publish-form input:focus,.demand-publish-form select:focus,.demand-publish-form textarea:focus { border-color:#1769ff; box-shadow:0 0 0 3px rgba(23,105,255,.12); }
.demand-form-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.budget-input { position:relative; }
.budget-input b { position:absolute; left:12px; top:50%; color:#0b3d91; transform:translateY(-50%); }
.budget-input input { padding-left:30px; color:#0b3d91; font-weight:800; }
.demand-publish-form .button { min-height:46px; margin-top:2px; border-radius:10px; box-shadow:0 10px 22px rgba(255,122,0,.17); }
.demand-publish-assurance { margin-top:16px; padding-top:14px; display:grid; gap:8px; border-top:1px solid #e4ebf5; color:#667085; font-size:10px; }
.demand-publish-assurance span { display:flex; align-items:center; gap:7px; }
.demand-publish-assurance svg { width:14px; height:14px; color:#1769ff; }

.demand-skeleton { pointer-events:none; }
.demand-skeleton span,.demand-skeleton b,.demand-skeleton i,.demand-skeleton em { display:block; border-radius:8px; background:linear-gradient(90deg,#eef2f7 25%,#f8fafc 42%,#eef2f7 64%); background-size:300% 100%; animation:demandShimmer 1.15s ease infinite; }
.demand-skeleton span { width:84px; height:26px; }
.demand-skeleton b { width:78%; height:23px; margin-top:24px; }
.demand-skeleton i { width:100%; height:14px; margin-top:13px; }
.demand-skeleton i:nth-of-type(2) { width:64%; }
.demand-skeleton em { width:122px; height:38px; margin-top:auto; }
@keyframes demandShimmer { from{background-position:100% 0} to{background-position:0 0} }

.community-page { max-width:1440px; min-height:calc(100vh - 150px); }
.community-hero {
  position:relative; min-height:286px; padding:40px 52px; overflow:hidden;
  background:#f8fbff url("assets/images/tech-bg.png") center/cover no-repeat;
  border-color:#dfe8f5; border-radius:26px; box-shadow:0 14px 34px rgba(28,51,84,.08);
}
.community-hero::after {
  content:""; position:absolute; right:-60px; bottom:-100px; width:610px; height:360px; opacity:.78; pointer-events:none;
  background:radial-gradient(ellipse at center,rgba(23,105,255,.13) 0,rgba(23,105,255,.045) 46%,transparent 72%);
}
.community-hero::before {
  content:""; position:absolute; left:51%; top:42px; bottom:42px; width:1px; opacity:.42; pointer-events:none;
  background:linear-gradient(180deg,transparent,#c9dcf7 22%,#c9dcf7 78%,transparent);
}
.community-hero > * { position:relative; z-index:2; }
.community-hero > div:first-child { max-width:760px; padding-left:8px; }
.community-hero h1 { max-width:760px; margin:0 0 18px; font-size:clamp(38px,3.5vw,52px); line-height:1.14; letter-spacing:-2.2px; }
.community-hero p { font-size:17px; line-height:1.7; }
.community-publish { min-height:52px; padding:0 22px; border-radius:12px; box-shadow:0 12px 24px rgba(23,105,255,.22); }
.community-publish:hover { transform:translateY(-2px); box-shadow:0 15px 28px rgba(23,105,255,.27); }
.community-hero-action { position:relative; height:224px; flex:0 0 auto; display:flex; align-items:flex-end; gap:24px; }
.community-hero-action::after { content:""; position:absolute; z-index:0; right:-5px; bottom:2px; width:300px; height:34px; pointer-events:none; background:radial-gradient(ellipse,rgba(19,55,99,.17),transparent 70%); filter:blur(3px); }
.community-hero-action img { position:relative; z-index:1; width:286px; height:224px; margin-bottom:-5px; object-fit:contain; object-position:center bottom; pointer-events:none; user-select:none; filter:drop-shadow(0 14px 18px rgba(22,47,82,.18)); }
.community-hero-action .community-publish { position:relative; z-index:2; margin-bottom:42px; white-space:nowrap; }

.community-toolbar {
  position:relative; z-index:4; min-height:72px; margin:-18px 16px 14px; padding:12px;
  display:grid; grid-template-columns:minmax(320px,1fr) 180px 180px; gap:10px; align-items:center;
  background:#fff; border:1px solid #e5ecf6; border-radius:16px; box-shadow:0 10px 28px rgba(28,51,84,.08);
}
.community-search { height:48px; position:relative; display:flex; align-items:center; }
.community-search > svg { position:absolute; left:14px; z-index:2; width:20px; height:20px; color:#7c8da5; }
.community-search input { width:100%; height:48px; padding:0 46px 0 44px; outline:0; color:var(--ink); border:1px solid #d9e2ee; border-radius:12px; background:#fff; transition:.18s ease; }
.community-search input:hover { border-color:#b9c9de; }
.community-search input:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(23,105,255,.13); }
.community-search button { position:absolute; right:8px; width:32px; height:32px; display:none; place-items:center; color:#667085; background:#f2f4f7; border-radius:9px; font-size:20px; }
.community-search button.is-visible { display:grid; }
.community-search button:hover { color:var(--blue); background:var(--blue-soft); }
.community-toolbar > select { height:48px; padding:0 36px 0 13px; outline:0; color:var(--ink); background:#fff; border:1px solid #d9e2ee; border-radius:10px; transition:.18s ease; }
.community-toolbar > select:hover { border-color:#b9c9de; }
.community-toolbar > select:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(23,105,255,.13); }
.community-toolbar > select:disabled { color:#98a2b3; background:#f2f4f7; cursor:not-allowed; }

.community-result-row { margin:0 16px 20px; display:flex; align-items:center; justify-content:space-between; gap:18px; }
.community-result-count { margin:0; flex:0 0 auto; color:var(--muted); font-size:13px; }
.community-result-actions { min-width:0; display:flex; align-items:center; justify-content:flex-end; gap:10px; }
.community-voucher-button { flex:0 0 auto; height:38px; padding:0 13px; display:inline-flex; align-items:center; gap:7px; color:#0b3d91; background:#eef5ff; border:1px solid #cfe0ff; border-radius:10px; font-size:12px; font-weight:800; transition:.18s ease; }
.community-voucher-button svg { width:17px; height:17px; color:#1769ff; }
.community-voucher-button:hover { color:#1769ff; background:#e2edff; border-color:#a9c7ff; }
.community-voucher-button:focus-visible { outline:3px solid rgba(23,105,255,.17); outline-offset:2px; }
.community-tag-tabs { min-width:0; display:flex; justify-content:flex-end; gap:7px; overflow-x:auto; scrollbar-width:none; }
.community-tag-tabs::-webkit-scrollbar { display:none; }
.community-tag-tabs button { flex:0 0 auto; padding:8px 11px; color:#536176; background:transparent; border:1px solid transparent; border-radius:9px; font-size:12px; transition:.18s ease; }
.community-tag-tabs button:hover { color:var(--blue); background:#f3f7ff; }
.community-tag-tabs button.active { color:#0b3d91; background:#eaf2ff; border-color:#cfe0ff; font-weight:800; }
.community-tag-tabs button:focus-visible { outline:3px solid rgba(23,105,255,.16); outline-offset:1px; }

.community-grid { margin:0 16px; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:16px; align-items:stretch; }
.community-grid.is-entering { animation:demandFade .2s ease both; }
.community-post {
  min-width:0; overflow:hidden; display:flex; flex-direction:column; background:#fff; border:1px solid #e5ecf6; border-radius:16px;
  box-shadow:0 6px 18px rgba(28,51,84,.045); cursor:pointer;
  transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease;
}
.community-post:hover { transform:translateY(-3px); border-color:#b9d1ff; box-shadow:0 14px 30px rgba(28,51,84,.09); }
.community-post:focus-visible { outline:3px solid rgba(23,105,255,.2); outline-offset:3px; }
.community-visual { height:120px; overflow:hidden; color:var(--visual-color); background:var(--visual-bg); border-bottom:1px solid var(--visual-border); }
.community-visual svg { width:100%; height:100%; transition:transform .2s ease; }
.community-post:hover .community-visual svg { transform:translateY(-2px); }
.community-visual .visual-grid { opacity:.13; stroke-width:1; }
.community-visual .visual-path { opacity:.26; stroke-dasharray:7 8; stroke-width:2; }
.community-post-body { padding:14px; display:flex; flex:1; flex-direction:column; }
.community-post-kicker { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.community-post-kicker > span { padding:5px 8px; color:var(--tag-color); background:var(--tag-bg); border:1px solid var(--tag-border); border-radius:8px; font-size:11px; font-weight:800; }
.community-post-kicker time { color:#98a2b3; font-size:11px; }
.community-post h3 { min-height:44px; margin:12px 0 7px; overflow:hidden; font-size:15px; line-height:1.45; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.community-post-body > p { min-height:41px; margin:0 0 12px; overflow:hidden; color:var(--muted); font-size:12px; line-height:1.65; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.community-author { display:flex; align-items:center; gap:8px; color:#475467; font-size:12px; }
.community-author span { width:30px; height:30px; display:grid; place-items:center; color:#fff; background:linear-gradient(145deg,#6ba0ff,#1769ff); border-radius:10px; font-weight:800; }
.community-author strong { font-weight:700; }
.community-post-footer { margin-top:12px; padding-top:12px; display:flex; align-items:center; justify-content:space-between; gap:8px; border-top:1px solid #edf1f6; }
.community-metrics { min-width:0; display:flex; align-items:center; gap:6px; color:#7a8798; font-size:10px; white-space:nowrap; }
.community-post-footer button { flex:0 0 auto; padding:6px 0; display:inline-flex; align-items:center; gap:5px; color:var(--blue); background:transparent; font-size:12px; font-weight:800; }
.community-post-footer button:hover b { transform:translateX(3px); }
.community-post-footer b { transition:transform .18s ease; }

.community-empty { grid-column:1/-1; min-height:360px; padding:50px 20px; display:grid; place-items:center; align-content:center; text-align:center; background:#fff; border:1px dashed #ccd9e9; border-radius:16px; }
.community-empty > div { width:58px; height:58px; display:grid; place-items:center; color:var(--blue); background:var(--blue-soft); border-radius:16px; }
.community-empty svg { width:28px; height:28px; }
.community-empty h3 { margin:16px 0 7px; }
.community-empty p { margin:0 0 18px; color:var(--muted); font-size:13px; }
.community-empty.is-error > div { color:#d94b2b; background:#fff0eb; }
.community-load-more { min-height:74px; display:flex; align-items:center; justify-content:center; }
.community-load-more .button { border-radius:10px; }
.community-pagination { display:flex; align-items:center; justify-content:center; gap:8px; }
.community-pagination button { min-width:38px; height:38px; padding:0 12px; color:#475467; background:#fff; border:1px solid #dce5f0; border-radius:10px; transition:.18s ease; }
.community-pagination button:hover:not(:disabled) { color:#1769ff; border-color:#a9c7ff; background:#f4f8ff; }
.community-pagination button.active { color:#fff; background:#1769ff; border-color:#1769ff; font-weight:800; }
.community-pagination button:disabled { color:#aab3c1; background:#f2f4f7; cursor:not-allowed; }

.modal-open { overflow:hidden; }
.community-voucher-modal { position:fixed; z-index:400; inset:0; padding:24px; display:none; place-items:center; background:rgba(7,23,51,.56); backdrop-filter:blur(6px); }
.community-voucher-modal.open { display:grid; animation:voucherBackdrop .18s ease both; }
@keyframes voucherBackdrop { from{opacity:0} to{opacity:1} }
.community-voucher-dialog { position:relative; width:min(940px,calc(100% - 48px)); max-height:90vh; padding:36px; overflow:auto; background:#fff; border:1px solid #edf2f8; border-radius:24px; box-shadow:0 28px 72px rgba(8,32,67,.2),0 10px 26px rgba(22,61,112,.11),0 1px 3px rgba(15,42,78,.08); animation:voucherDialog .2s ease both; scrollbar-color:#c7d6e8 transparent; scrollbar-width:thin; }
@keyframes voucherDialog { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }
.community-voucher-close { position:absolute; right:28px; top:28px; width:40px; height:40px; display:grid; place-items:center; color:#667085; background:#f2f4f7; border-radius:50%; font-size:25px; line-height:1; transition:color .2s ease,background-color .2s ease,transform .2s ease; }
.community-voucher-close:hover { color:#d92d20; background:#fff0ee; transform:rotate(3deg); }
.community-voucher-close:focus-visible { outline:3px solid rgba(217,45,32,.14); outline-offset:2px; }
.community-voucher-heading { min-height:88px; padding:0 64px 24px 0; display:flex; align-items:center; gap:18px; border-bottom:1px solid #edf2f7; }
.community-voucher-icon { flex:0 0 64px; width:64px; height:64px; display:grid; place-items:center; color:#1769ff; background:#eaf2ff; border-radius:16px; }
.community-voucher-heading svg { width:30px; height:30px; }
.community-voucher-heading h2 { margin:0; color:#101828; font-size:31px; font-weight:700; letter-spacing:-.7px; line-height:1.25; }
.community-voucher-rules { margin:24px 0; display:grid; grid-template-columns:1fr; gap:14px; }
.community-voucher-rules article { position:relative; min-height:96px; padding:17px 18px 17px 22px; display:grid; grid-template-columns:44px minmax(0,1fr) auto; align-items:center; gap:17px; background:#f8fafd; border:1px solid #e5ecf6; border-radius:16px; transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease; }
.community-voucher-rules article::before { content:""; position:absolute; left:-1px; top:16px; bottom:16px; width:3px; background:#1769ff; border-radius:0 3px 3px 0; }
.community-voucher-rules article:hover { transform:translateY(-2px); border-color:#cfdef2; box-shadow:0 10px 24px rgba(23,105,255,.09); }
.community-voucher-rules article > b { width:44px; height:44px; display:grid; place-items:center; color:#1769ff; background:#eaf2ff; border-radius:50%; font-size:13px; font-weight:800; }
.community-voucher-copy { min-width:0; }
.community-voucher-rules h3 { margin:0 0 5px; color:#101828; font-size:18px; font-weight:600; line-height:1.4; }
.community-voucher-rules p { margin:0; color:#667085; font-size:14px; line-height:1.6; }
.community-voucher-reward { min-width:90px; height:44px; padding:0 14px; display:inline-flex; align-items:center; justify-content:center; gap:7px; color:#c75c00; background:#fff1e3; border-radius:999px; white-space:nowrap; }
.community-voucher-reward svg { width:17px; height:17px; }
.community-voucher-reward strong { font-size:20px; font-weight:700; }
.community-voucher-note { padding:0; display:block; color:#667085; background:transparent; border:0; border-radius:0; text-align:left; }
.community-voucher-note strong { display:block; margin:0 0 6px; color:#344054; font-size:13px; }
.community-voucher-note p { margin:0; color:#667085; font-size:12px; line-height:1.7; }
.community-voucher-confirm { width:100%; height:52px; margin-top:20px; color:#fff; background:#1769ff; border-radius:12px; box-shadow:0 8px 18px rgba(23,105,255,.2); font-weight:800; transition:transform .18s ease,background-color .18s ease,box-shadow .18s ease; }
.community-voucher-confirm:hover { color:#fff; background:#0f56d9; transform:translateY(-1px); box-shadow:0 11px 24px rgba(23,105,255,.25); }
.community-voucher-confirm:active { transform:translateY(0); box-shadow:0 6px 14px rgba(23,105,255,.18); }
.community-voucher-confirm:focus-visible { outline:3px solid rgba(23,105,255,.2); outline-offset:2px; }

.publish-modal { position:fixed; z-index:420; inset:0; padding:24px; display:none; place-items:center; background:rgba(7,23,51,.56); backdrop-filter:blur(6px); }
.publish-modal.open { display:grid; animation:voucherBackdrop .18s ease both; }
.publish-dialog { position:relative; width:min(800px,calc(100% - 40px)); max-width:100%; max-height:90vh; padding:32px; overflow-x:hidden; overflow-y:auto; background:#fff; border:1px solid #e7edf6; border-radius:24px; box-shadow:0 28px 72px rgba(8,32,67,.2),0 10px 28px rgba(22,61,112,.1); animation:voucherDialog .2s ease both; scrollbar-color:#c7d6e8 transparent; scrollbar-width:thin; }
.publish-modal-close { position:absolute; z-index:3; right:24px; top:24px; width:40px; height:40px; display:grid; place-items:center; color:#667085; background:#f2f4f7; border-radius:50%; font-size:25px; line-height:1; transition:color .18s ease,background-color .18s ease,transform .18s ease; }
.publish-modal-close:hover { color:#d92d20; background:#fff0ee; transform:rotate(3deg); }
.publish-modal-close:focus-visible { outline:3px solid rgba(217,45,32,.14); outline-offset:2px; }
.publish-dialog-heading { padding:0 58px 22px 0; display:flex; align-items:center; gap:16px; border-bottom:1px solid #edf2f7; }
.publish-dialog-heading > span { flex:0 0 58px; width:58px; height:58px; display:grid; place-items:center; color:#1769ff; background:#eaf2ff; border-radius:16px; }
.catalog-publish-dialog .publish-dialog-heading > span { color:#c75c00; background:#fff1e3; }
.publish-dialog-heading svg { width:28px; height:28px; }
.publish-dialog-heading h2 { margin:0 0 4px; color:#101828; font-size:27px; line-height:1.3; letter-spacing:-.5px; }
.publish-dialog-heading p { margin:0; color:#667085; font-size:13px; line-height:1.6; }
.publish-form { margin-top:22px; display:flex; flex-direction:column; gap:17px; }
.publish-form-row { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.publish-field { min-width:0; display:flex; flex-direction:column; gap:7px; color:#344054; font-size:13px; font-weight:750; }
.publish-field > span b { color:#e05d21; }
.publish-field input,.publish-field select,.publish-field textarea { width:100%; min-width:0; color:#101828; outline:0; background:#fff; border:1px solid #d9e2ee; border-radius:11px; transition:border-color .18s ease,box-shadow .18s ease; }
.publish-field input,.publish-field select { height:46px; padding:0 13px; }
.publish-field textarea { min-height:112px; padding:12px 13px; resize:vertical; line-height:1.65; }
.publish-field input:hover,.publish-field select:hover,.publish-field textarea:hover { border-color:#b9c9de; }
.publish-field input:focus,.publish-field select:focus,.publish-field textarea:focus { border-color:#1769ff; box-shadow:0 0 0 3px rgba(23,105,255,.12); }
.publish-uploader { min-height:110px; padding:18px; display:grid; place-items:center; align-content:center; gap:5px; color:#1769ff; text-align:center; background:#f7faff; border:1px dashed #a8c7ff; border-radius:14px; cursor:pointer; transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease; }
.publish-uploader.compact { min-height:92px; }
.publish-uploader:hover { background:#eef5ff; border-color:#1769ff; box-shadow:0 7px 18px rgba(23,105,255,.08); }
.publish-uploader svg { width:25px; height:25px; }
.publish-uploader strong { color:#0b3d91; font-size:14px; }
.publish-uploader small { color:#718096; font-size:11px; font-weight:500; line-height:1.55; }
.publish-file-input { position:absolute; width:1px; height:1px; overflow:hidden; opacity:0; pointer-events:none; }
.publish-file-list { display:grid; gap:7px; }
.publish-file-list > p { margin:0; color:#8a96a8; font-size:11px; font-weight:500; line-height:1.55; }
.publish-file-item { min-width:0; min-height:38px; padding:7px 9px; display:flex; align-items:center; gap:9px; color:#475467; background:#f8fafc; border:1px solid #e7edf5; border-radius:10px; font-size:11px; font-weight:600; }
.publish-file-item svg { flex:0 0 auto; width:16px; height:16px; color:#1769ff; }
.publish-file-item span { min-width:0; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.publish-file-item small { flex:0 0 auto; color:#98a2b3; }
.publish-file-item button { flex:0 0 auto; width:26px; height:26px; display:grid; place-items:center; color:#667085; background:#eef1f5; border-radius:7px; font-size:17px; }
.publish-file-item button:hover { color:#d92d20; background:#fff0ee; }
.publish-consent { display:flex; align-items:flex-start; gap:9px; color:#667085; font-size:12px; line-height:1.6; cursor:pointer; }
.publish-consent input { flex:0 0 auto; width:16px; height:16px; margin-top:2px; accent-color:#1769ff; }
.publish-submit { width:100%; min-height:50px; border-radius:11px; font-weight:800; box-shadow:0 9px 20px rgba(23,105,255,.18); }
.catalog-publish-dialog .publish-submit { box-shadow:0 9px 20px rgba(255,122,0,.18); }
.publish-submit:disabled { color:#98a2b3; background:#e9edf2; border-color:#e9edf2; box-shadow:none; cursor:not-allowed; transform:none; }
.publish-submit svg { width:18px; height:18px; }

.community-skeleton { min-height:445px; pointer-events:none; }
.community-skeleton > i,.community-skeleton b,.community-skeleton span,.community-skeleton em { display:block; border-radius:8px; background:linear-gradient(90deg,#edf2f7 24%,#f8fafc 42%,#edf2f7 64%); background-size:300% 100%; animation:demandShimmer 1.15s ease infinite; }
.community-skeleton > i { height:160px; border-radius:0; }
.community-skeleton > div { padding:18px; }
.community-skeleton b { width:72%; height:22px; margin:12px 0 18px; }
.community-skeleton span { width:100%; height:13px; margin-top:10px; }
.community-skeleton span:nth-of-type(2) { width:68%; }
.community-skeleton em { width:120px; height:30px; margin-top:32px; }

.detail-page { max-width:1440px; padding-top:24px; }
.detail-layout { display:grid; grid-template-columns:minmax(0,1.14fr) minmax(390px,.76fr); gap:22px; align-items:stretch; }
.detail-preview { position:relative; min-height:650px; display:flex; flex-direction:column; overflow:hidden; border:1px solid #dfe8f4; border-radius:24px; background:radial-gradient(circle at 50% 46%,rgba(255,255,255,.98),rgba(236,243,252,.96) 72%); box-shadow:0 14px 36px rgba(28,51,84,.08); }
.detail-preview::before { content:""; position:absolute; inset:0; opacity:.5; background-image:linear-gradient(rgba(93,151,235,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(93,151,235,.08) 1px,transparent 1px); background-size:42px 42px; mask-image:radial-gradient(circle at center,#000,transparent 72%); }
.detail-preview-badge { position:absolute; left:24px; top:22px; z-index:2; height:38px; padding:0 13px; display:flex; align-items:center; gap:8px; color:#1769ff; background:rgba(255,255,255,.92); border:1px solid #dbe8fb; border-radius:11px; box-shadow:0 7px 18px rgba(31,83,154,.08); font-size:13px; font-weight:800; }
.detail-preview-badge svg { width:18px; height:18px; }
.detail-visual-shell { position:relative; z-index:1; flex:1; min-height:0; padding:72px 46px 28px; display:grid; place-items:center; }
.preview-object { width:min(74%,510px); aspect-ratio:1; background-image:url("assets/images/model-sprite-hd-v2.png"); background-size:600% 600%; background-position:40% 0; background-repeat:no-repeat; border:1px solid rgba(216,226,239,.9); border-radius:26px; box-shadow:0 28px 60px rgba(41,64,94,.18),0 6px 18px rgba(41,64,94,.09); transform:translateY(6px); }
.detail-preview-meta { position:relative; z-index:2; margin:0 24px 24px; padding:15px 18px; display:grid; grid-template-columns:1fr 1fr; gap:18px; background:rgba(255,255,255,.92); border:1px solid rgba(217,227,241,.95); border-radius:15px; box-shadow:0 8px 20px rgba(28,51,84,.07); }
.detail-preview-meta > div + div { padding-left:18px; border-left:1px solid #e8eef6; }
.detail-preview-meta span { display:block; margin-bottom:4px; color:#7a8799; font-size:11px; }
.detail-preview-meta strong { display:flex; align-items:center; gap:6px; color:#24354e; font-size:13px; }
.detail-preview-meta svg { width:16px; height:16px; color:#12a87a; }
/* Order tracking */
.orders-page { max-width:1440px; }
.orders-hero { min-height:150px; }
.order-control { margin:18px 0 20px; padding:18px 20px; display:flex; align-items:center; justify-content:space-between; gap:20px; background:#fff; border:1px solid #e8eef7; border-radius:18px; box-shadow:0 9px 26px rgba(28,51,84,.07); }
.order-filter-groups { width:100%; display:grid; gap:12px; }
.order-filter-tabs { display:flex; align-items:center; flex-wrap:wrap; gap:9px; }
.order-filter-tabs button { height:42px; padding:0 14px; display:flex; align-items:center; gap:8px; color:#667085; background:#f8fafd; border:1px solid #e5ecf6; border-radius:10px; font-weight:750; transition:180ms ease; }
.order-filter-tabs button:hover { color:#1769ff; border-color:#b8d0ff; }
.order-filter-tabs button.active { color:#fff; background:#1769ff; border-color:#1769ff; box-shadow:0 7px 16px rgba(23,105,255,.2); }
.order-filter-tabs small { min-width:22px; height:22px; padding:0 6px; display:grid; place-items:center; color:#6b7c93; background:#fff; border-radius:11px; font-size:11px; }
.order-filter-tabs button.active small { color:#1769ff; }
.order-filter-tabs.secondary { padding-top:12px; border-top:1px solid #edf1f6; }
.order-filter-tabs.secondary button { height:36px; padding:0 12px; font-size:12px; }
.order-filter-tabs.secondary button.active { color:#1769ff; background:#eaf2ff; border-color:#c7dafe; box-shadow:none; }
.order-status-flow { min-width:0; flex:1; display:flex; align-items:center; }
.order-status-flow button { min-width:118px; height:52px; padding:0 13px; display:grid; grid-template-columns:30px 1fr auto; align-items:center; gap:8px; color:#667085; background:#f8fafd; border:1px solid #e5ecf6; border-radius:12px; font-weight:750; transition:180ms ease; }
.order-status-flow button:hover { color:#1769ff; border-color:#b8d0ff; transform:translateY(-1px); }
.order-status-flow button em { width:30px; height:30px; display:grid; place-items:center; color:#7b8ba2; background:#eaf0f8; border-radius:50%; font-style:normal; font-size:12px; }
.order-status-flow button small { min-width:22px; height:22px; padding:0 6px; display:grid; place-items:center; color:#6b7c93; background:#fff; border-radius:11px; font-size:11px; }
.order-status-flow button.passed { color:#1769ff; background:#eef5ff; border-color:#cfe0ff; }
.order-status-flow button.passed em { color:#fff; background:#74a7ff; }
.order-status-flow button.active { color:#fff; background:#1769ff; border-color:#1769ff; box-shadow:0 9px 20px rgba(23,105,255,.23); }
.order-status-flow button.active em { color:#1769ff; background:#fff; }
.order-status-flow button.active small { color:#1769ff; }
.order-flow-arrow { min-width:34px; flex:1; display:flex; align-items:center; color:#bdc9d9; }
.order-flow-arrow b { width:100%; border-top:2px dashed #cbd7e8; }
.order-flow-arrow span { margin-left:-1px; font-size:24px; line-height:1; transform:translateY(-1px); }
.order-flow-arrow.passed { color:#1769ff; }
.order-flow-arrow.passed b { border-color:#70a4ff; }
.order-error-filter { height:44px; padding:0 14px; display:flex; align-items:center; gap:7px; flex:none; color:#a23d3d; background:#fff8f8; border:1px solid #f1d7d7; border-radius:11px; font-weight:750; }
.order-error-filter:hover,.order-error-filter.active { color:#fff; background:#d94b4b; border-color:#d94b4b; }
.order-error-filter svg { width:17px; height:17px; }
.order-error-filter b { min-width:22px; height:22px; display:grid; place-items:center; color:inherit; background:rgba(255,255,255,.72); border-radius:11px; font-size:11px; }
.order-error-filter.active b,.order-error-filter:hover b { color:#d94b4b; }
.order-list { display:grid; gap:16px; }
.order-card { min-height:188px; padding:22px; display:grid; grid-template-columns:92px minmax(0,1fr) auto; align-items:center; gap:22px; background:#fff; border:1px solid #e8eef7; border-radius:16px; box-shadow:0 8px 22px rgba(28,51,84,.06); transition:180ms ease; }
.order-card:hover { transform:translateY(-2px); border-color:#c8dbff; box-shadow:0 13px 30px rgba(28,51,84,.10); }
.order-card.has-error { border-color:#f1d1d1; }
.order-card-icon { width:92px; height:92px; display:grid; place-items:center; color:#1769ff; background:#eaf2ff; border-radius:18px; }
.order-card-icon svg { width:42px; height:42px; }
.order-card-main { min-width:0; }
.order-card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; }
.order-status-stack { display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; gap:7px; }
.order-card-head small { display:block; color:#98a2b3; font-size:12px; }
.order-card-head h3 { margin:3px 0 0; color:#101828; font-size:20px; letter-spacing:.1px; }
.order-status { height:30px; padding:0 11px; display:inline-flex; align-items:center; flex:none; border-radius:9px; color:#1769ff; background:#eaf2ff; font-size:13px; font-weight:800; }
.order-status.pending_payment { color:#b95400; background:#fff1e4; }
.order-status.printing { color:#087a56; background:#e8f8f2; }
.order-status.queued { color:#0b5fd8; background:#eaf2ff; }
.order-status.error { color:#b43c3c; background:#fff0f0; }
.order-status.completed { color:#087a56; background:#e7f8f1; }
.pickup-status { height:30px; padding:0 11px; display:inline-flex; align-items:center; border-radius:9px; font-size:13px; font-weight:800; }
.pickup-status.pending { color:#b85b00; background:#fff1e4; }
.pickup-status.picked_up { color:#526175; background:#eef2f6; }
.order-assignment { margin-top:16px; display:grid; grid-template-columns:1.1fr .8fr 1.2fr; gap:12px; }
.order-assignment > div { min-width:0; padding:11px 13px; background:#f8fafd; border-radius:10px; }
.order-assignment span { display:block; margin-bottom:4px; color:#7b8798; font-size:11px; }
.order-assignment strong { display:block; overflow:hidden; color:#344054; font-size:14px; text-overflow:ellipsis; white-space:nowrap; }
.order-assignment .order-eta { background:#eef5ff; }
.order-assignment .order-eta strong { color:#0b3d91; }
.order-progress { margin-top:14px; }
.order-progress > div { margin-bottom:7px; display:flex; justify-content:space-between; color:#667085; font-size:12px; }
.order-progress > div strong { color:#12a87a; }
.order-progress i { height:8px; display:block; overflow:hidden; background:#edf1f6; border-radius:8px; }
.order-progress b { height:100%; display:block; background:#12a87a; border-radius:inherit; transition:width .35s ease; }
.order-error { margin-top:13px; padding:10px 12px; display:flex; align-items:center; gap:8px; color:#b43c3c; background:#fff4f4; border-radius:10px; font-size:13px; }
.order-error svg { width:17px; height:17px; }
.order-card-action { align-self:end; }
.order-card-flow { grid-column:1 / -1; min-width:0; margin-top:2px; padding:18px 18px 1px; display:flex; align-items:center; overflow-x:auto; border-top:1px solid #e8eef7; scrollbar-width:thin; }
.order-card-flow-step { min-width:112px; display:flex; align-items:center; justify-content:center; gap:9px; color:#98a2b3; font-size:13px; font-weight:750; white-space:nowrap; }
.order-card-flow-step em { width:30px; height:30px; display:grid; place-items:center; color:#8997aa; background:#edf1f6; border-radius:50%; font-style:normal; font-size:12px; transition:180ms ease; }
.order-card-flow-step.passed { color:#1769ff; }
.order-card-flow-step.passed em { color:#fff; background:#76a9ff; box-shadow:0 4px 10px rgba(23,105,255,.18); }
.order-card-flow-step.active { color:#0b3d91; }
.order-card-flow-step.active em { color:#fff; background:#1769ff; box-shadow:0 5px 13px rgba(23,105,255,.26); }
.order-card-flow-arrow { min-width:38px; flex:1; display:flex; align-items:center; color:#c3cfdf; }
.order-card-flow-arrow b { width:100%; border-top:2px dashed #cad5e4; }
.order-card-flow-arrow span { margin-left:-1px; font-size:22px; line-height:1; transform:translateY(-1px); }
.order-card-flow-arrow.passed { color:#1769ff; }
.order-card-flow-arrow.passed b { border-color:#72a7ff; }
.order-empty { padding:70px 20px; text-align:center; color:#667085; background:#fff; border:1px dashed #cfdaea; border-radius:16px; }
.order-empty h3 { margin:0 0 7px; color:#344054; }

.detail-panel { min-height:650px; padding:32px; display:flex; flex-direction:column; background:#fff; border:1px solid #e3eaf4; border-radius:24px; box-shadow:0 16px 38px rgba(28,51,84,.09); }
.detail-panel-top { min-height:46px; display:flex; align-items:flex-start; justify-content:space-between; gap:18px; }
.detail-panel-top .eyebrow { margin:0; }
.detail-file-actions { display:flex; align-items:center; gap:9px; }
.detail-file-actions button { width:42px; height:42px; display:grid; place-items:center; color:#54657d; background:#f7f9fc; border:1px solid #e3eaf4; border-radius:12px; transition:180ms ease; }
.detail-file-actions button:hover { color:#1769ff; background:#edf4ff; border-color:#bcd3ff; transform:translateY(-1px); box-shadow:0 7px 16px rgba(23,105,255,.11); }
.detail-file-actions button:focus-visible { outline:3px solid rgba(23,105,255,.2); outline-offset:2px; }
.detail-file-actions button.active { color:#fff; background:#1769ff; border-color:#1769ff; }
.detail-file-actions button.active svg { fill:currentColor; }
.detail-file-actions svg { width:20px; height:20px; }
.detail-panel h1 { margin:15px 0 12px; color:#101828; font-size:38px; line-height:1.15; letter-spacing:-1.2px; }
.detail-panel .lead { margin:0; color:#667085; font-size:15px; line-height:1.75; }
.detail-creator { margin:20px 0 0; padding:11px 13px; display:flex; align-items:center; gap:10px; align-self:flex-start; background:#f8fafd; border-radius:12px; }
.detail-creator .avatar { width:34px; height:34px; display:grid; place-items:center; color:#fff; background:#73a8ff; border-radius:50%; font-size:13px; }
.detail-creator strong,.detail-creator small { display:block; }
.detail-creator strong { color:#344054; font-size:13px; }
.detail-creator small { margin-top:2px; color:#8490a2; font-size:11px; }
.detail-panel .spec-grid { display:grid; grid-template-columns:repeat(2,1fr); gap:11px; margin:22px 0; }
.detail-panel .spec { min-height:82px; padding:15px 16px; border:1px solid #edf1f6; border-radius:14px; background:#f7f9fc; }
.detail-panel .spec span { display:block; color:#7b8798; font-size:11px; }
.detail-panel .spec strong { display:block; margin-top:7px; color:#172033; font-size:15px; }
.detail-pricing { margin-top:auto; overflow:hidden; border:1px solid #e7edf5; border-radius:14px; background:#fbfcfe; }
.detail-pricing > div { min-height:55px; padding:0 16px; display:flex; align-items:center; justify-content:space-between; color:#667085; font-size:13px; }
.detail-pricing > div + div { border-top:1px solid #e8eef6; }
.detail-pricing strong { color:#0b3d91; font-size:18px; }
.detail-pricing strong small { font-size:12px; }
.detail-actions { margin-top:14px; display:grid; gap:10px; }
.detail-actions .button { min-height:54px; border-radius:13px; font-size:16px; box-shadow:0 10px 22px rgba(255,122,0,.18); }
.detail-assurance { margin:14px 2px 0; display:flex; align-items:flex-start; gap:7px; color:#8a96a8; font-size:11px; line-height:1.55; }
.detail-assurance svg { width:16px; height:16px; flex:none; color:#1769ff; }

body.workspace-mode { overflow:hidden; background:#f5f7fa; }
body.workspace-mode .app-shell { height:100dvh; min-height:0; overflow:hidden; }
.workspace-page { max-width:1540px; }
body.workspace-mode .workspace-page { width:100vw; max-width:none; height:100dvh; margin:0; padding:0; }
.workspace-shell { min-height:720px; display:grid; grid-template-columns:224px 1fr; overflow:hidden; background:#ffffff; color:#1a1e26; border-radius:22px; box-shadow:0 22px 50px rgba(10,20,35,.06); border:1px solid #e5eaf1; }
body.workspace-mode .workspace-shell { width:100%; height:100dvh; min-height:0; border-radius:0; box-shadow:none; border:0; }
.workspace-sidebar { position:relative; padding:20px 14px; background:#f8fafd; border-right:1px solid #e5eaf1; display:flex; flex-direction:column; transition:width .25s ease; }
.workspace-brand { display:flex; align-items:center; gap:10px; padding:6px 8px 18px; font-weight:850; color:#1a1e26; }
.workspace-brand .brand-mark { width:34px; height:34px; font-size:13px; }
.workspace-back { width:100%; margin-bottom:16px; color:#475467; background:#ffffff; border:1px solid #d0d6df; }
.workspace-back:hover { background:#f5f7fa; border-color:#00AE42; color:#00AE42; }
.workspace-shell > .workspace-sidebar.collapsed { padding:20px 8px; }
.workspace-shell > .workspace-sidebar.collapsed .workspace-brand { justify-content:center; padding:6px 0 18px; }
.workspace-shell > .workspace-sidebar.collapsed .workspace-back { padding:12px 0; justify-content:center; font-size:0; }
.workspace-shell > .workspace-sidebar.collapsed .workspace-tab { justify-content:center; padding:12px 0; }
.workspace-shell:has(> .workspace-sidebar.collapsed) { grid-template-columns:64px 1fr; }
.sidebar-toggle { position:absolute; top:50%; right:-12px; transform:translateY(-50%); width:24px; height:36px; display:flex; align-items:center; justify-content:center; background:#ffffff; color:#6a7a8c; border:1px solid #d0d6df; border-radius:6px; cursor:pointer; z-index:5; transition:background .15s ease,color .15s ease,border-color .15s ease; box-shadow:0 2px 6px rgba(10,20,35,.06); }
.sidebar-toggle:hover { background:#00AE42; color:#fff; border-color:#00AE42; }
.sidebar-toggle svg { display:block; }
.workspace-nav { display:flex; flex-direction:column; gap:6px; }
.workspace-tab { width:100%; padding:12px 13px; display:flex; align-items:center; gap:10px; border-radius:10px; color:#475467; background:transparent; text-align:left; }
.workspace-tab svg { width:18px; height:18px; }
.workspace-tab:hover, .workspace-tab.active { color:#1a1e26; background:#ffffff; border:1px solid #e5eaf1; }
.workspace-tab:hover { box-shadow:0 2px 6px rgba(10,20,35,.04); }
.workspace-tab.active { box-shadow:inset 3px 0 0 #00AE42, 0 2px 6px rgba(0,174,66,.08); border-color:#d0d6df; }
.workspace-tab:disabled { color:#aab3c1; background:transparent; cursor:not-allowed; }
.workspace-tab:disabled:hover { color:#aab3c1; background:transparent; border-color:transparent; box-shadow:none; }
.workspace-content { min-width:0; min-height:0; display:flex; flex-direction:column; overflow:hidden; background:#ffffff; }
.workspace-top { height:62px; padding:0 20px; display:flex; justify-content:space-between; align-items:center; border-bottom:1px solid #e5eaf1; background:#ffffff; }
.workspace-top strong { font-size:17px; }
.workspace-top-actions { display:flex; gap:8px; }
.dark-button { min-height:36px; padding:0 13px; color:#1a1e26; background:#ffffff; border:1px solid #d0d6df; border-radius:9px; }
.dark-button:hover { background:#f5f7fa; border-color:#00AE42; color:#00AE42; }
.dark-button.primary { color:#fff; background:var(--blue); border-color:var(--blue); }
.dark-button.primary:hover { background:#0d55e8; color:#fff; }
.workspace-panel { flex:1; display:grid; grid-template-columns:minmax(0,1fr) 310px; min-height:0; overflow:hidden; transition:grid-template-columns .25s ease; }
.workspace-panel:has(> .workspace-params.collapsed) { grid-template-columns:minmax(0,1fr) 0px; }
.work-canvas { position:relative; min-width:0; min-height:0; display:grid; place-items:center; overflow:hidden; background:#f5f7fa; }
.canvas-label { position:absolute; left:18px; bottom:16px; padding:8px 11px; border-radius:8px; color:#475467; background:rgba(255,255,255,.92); border:1px solid #e5eaf1; font-size:12px; backdrop-filter:blur(8px); }
.canvas-placeholder { width:100%; height:100%; display:flex; align-items:center; justify-content:center; font-size:13px; color:#6a7a8c; }

/* ── 2026-09-06: 画布内 ImGui 风格浮窗工具栏(对照 GLCanvas3D 内部工具栏) ── */
.canvas-impl-toolbar { position:absolute; left:14px; top:50%; transform:translateY(-50%); display:flex; flex-direction:column; gap:4px; padding:6px; background:rgba(255,255,255,.95); border:1px solid #d0d6df; border-radius:10px; backdrop-filter:blur(8px); z-index:5; box-shadow:0 4px 14px rgba(10,20,35,.08); }
.impl-btn { width:36px; height:36px; display:flex; align-items:center; justify-content:center; background:transparent; border:none; border-radius:8px; color:#475467; cursor:pointer; transition:background .15s ease,color .15s ease; }
.impl-btn:hover { background:#00AE42; color:#fff; }
.impl-btn svg { width:18px; height:18px; }

/* ── 2026-09-06: 画布右上 BambuStudio SideButton 风格 ── */
.canvas-top-actions { position:absolute; top:14px; right:14px; display:flex; gap:8px; z-index:5; }
.side-btn { display:inline-flex; align-items:center; gap:6px; height:34px; padding:0 14px; border-radius:10px; font-size:13px; font-weight:700; cursor:pointer; border:1px solid transparent; transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease; }
.side-btn-secondary { background:#ffffff; color:#475467; border-color:#d0d6df; box-shadow:0 2px 6px rgba(10,20,35,.04); }
.side-btn-secondary:hover { background:#f5f7fa; color:#1a1e26; border-color:#00AE42; }
.side-btn-primary { background:#00AE42; color:#fff; border-color:#00AE42; }
.side-btn-primary:hover { background:#00c550; border-color:#00c550; }
.side-btn-primary:disabled { background:#e5eaf1; color:#aab3c1; border-color:#e5eaf1; cursor:not-allowed; }
/* 2026-09-06: 打印按钮未就绪态 — 橙色警示(可点,点开会弹具体错误) */
.side-btn-warn { background:#f59e0b; border-color:#f59e0b; color:#fff; }
.side-btn-warn:hover { background:#fbbf24; border-color:#fbbf24; }
.side-btn:active:not(:disabled) { transform:translateY(1px); }

/* ── 2026-09-06: 底部 BBLStatusBar ── */
.bbl-statusbar { position:absolute; left:0; right:0; bottom:0; height:34px; padding:0 16px; display:flex; align-items:center; gap:18px; background:rgba(255,255,255,.92); border-top:1px solid #e5eaf1; backdrop-filter:blur(8px); font-size:12px; color:#475467; z-index:4; box-shadow:0 -2px 8px rgba(10,20,35,.04); }
.statusbar-left { display:flex; align-items:center; gap:7px; min-width:160px; }
.status-dot { width:8px; height:8px; border-radius:50%; background:#c5ced9; }
.status-dot.active { background:#00AE42; box-shadow:0 0 8px rgba(0,174,66,.5); }
.statusbar-center { flex:1; display:flex; align-items:center; gap:10px; }
.status-track { flex:1; height:4px; background:#e5eaf1; border-radius:2px; overflow:hidden; }
.status-fill { height:100%; background:linear-gradient(90deg,#00AE42,#00c550); border-radius:2px; transition:width .3s ease; }
.status-pct { font-variant-numeric:tabular-nums; font-weight:700; color:#1a1e26; min-width:36px; text-align:right; }
.statusbar-right { display:flex; align-items:center; gap:8px; min-width:0; }
.status-cell { white-space:nowrap; }
.status-sep { color:#c5ced9; }

/* ── 2026-09-06: 右侧 ParamsPanel (BambuStudio 重做) ── */
.workspace-params { position:relative; background:#f8fafd; border-left:1px solid #e5eaf1; display:flex; flex-direction:column; overflow:hidden; transition:width .25s ease,opacity .2s ease; }
.workspace-params.collapsed { width:0; opacity:0; pointer-events:none; }
.workspace-shell:has(> .workspace-content .workspace-params.collapsed) { grid-template-columns:64px 1fr; }
.sidebar-toggle-left { left:-12px; right:auto; }
.params-top { padding:12px 14px; background:#ffffff; border-bottom:1px solid #e5eaf1; display:flex; flex-direction:column; gap:10px; }
.params-title { display:flex; align-items:center; gap:6px; font-size:13px; font-weight:700; color:#1a1e26; }
.params-title svg { color:#00AE42; }
.params-toggles { display:flex; gap:8px; }
.switch-pair { display:flex; background:#f5f7fa; border:1px solid #e5eaf1; border-radius:8px; overflow:hidden; flex:1; }
.switch-pair button { flex:1; height:28px; background:transparent; color:#475467; font-size:12px; font-weight:600; border:none; cursor:pointer; transition:background .15s ease,color .15s ease; }
.switch-pair button:hover { color:#1a1e26; background:#ffffff; }
.switch-pair button.on { background:#00AE42; color:#fff; }
.params-tabs { display:flex; gap:2px; padding:6px 8px 0; background:#ffffff; border-bottom:1px solid #e5eaf1; overflow-x:auto; }
.params-tab { padding:8px 12px; background:transparent; color:#6a7a8c; font-size:12.5px; font-weight:600; border:none; border-bottom:2px solid transparent; cursor:pointer; white-space:nowrap; transition:color .15s ease,border-color .15s ease; }
.params-tab:hover { color:#1a1e26; }
.params-tab.active { color:#00AE42; border-bottom-color:#00AE42; }
.params-scroll { flex:1; padding:14px; overflow-y:auto; background:#f8fafd; }
.params-section { background:#ffffff; border:1px solid #e5eaf1; border-radius:12px; padding:12px; margin-bottom:12px; box-shadow:0 2px 6px rgba(10,20,35,.03); }
.params-section h4 { margin:0 0 10px; font-size:13px; font-weight:700; color:#1a1e26; }
.params-section-expert-divider { margin:14px 0 10px; padding-top:10px; border-top:1px dashed #c5ced9; font-size:11px; font-weight:700; color:#00AE42; letter-spacing:1px; text-transform:uppercase; }

/* ★ 2026-09-20 v6:分组折叠 region 卡片 */
.region-card { background:#ffffff; border:1px solid #e5eaf1; border-radius:10px; margin-bottom:10px; box-shadow:0 2px 6px rgba(10,20,35,.03); overflow:hidden; }
.region-header { display:flex; align-items:center; gap:8px; width:100%; padding:10px 14px; background:transparent; border:0; cursor:pointer; font-size:13px; font-weight:700; color:#1a1e26; text-align:left; transition:background .15s ease; }
.region-header:hover { background:#f5f7fa; }
.region-label { flex:0 1 auto; }
.region-chevron { width:14px; height:14px; color:#6a7a8c; transition:transform .2s ease; flex-shrink:0; }
.region-chevron.collapsed { transform:rotate(-90deg); }
.region-count { margin-left:auto; padding:1px 8px; background:#e8f7ee; color:#00AE42; font-size:11px; font-weight:600; border-radius:10px; min-width:24px; text-align:center; }
.region-body { padding:4px 14px 12px; border-top:1px dashed #eef2f7; }

.field-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 0; border-bottom:1px solid #eef2f7; }
.field-row:last-child { border-bottom:0; }
.field-label { color:#475467; font-size:12.5px; }
.field-value { display:inline-flex; align-items:center; gap:4px; min-height:26px; padding:0 8px; background:#ffffff; border:1px solid #d0d6df; border-radius:6px; color:#1a1e26; font-size:12.5px; font-weight:600; cursor:pointer; transition:background .15s ease,border-color .15s ease; }
.field-value:hover { background:#f5f7fa; border-color:#00AE42; }
.field-unit { color:#6a7a8c; font-weight:500; font-size:11px; }
.field-value svg { color:#6a7a8c; }
.field-static { color:#1a1e26; font-size:12.5px; font-weight:600; font-variant-numeric:tabular-nums; }
.workspace-table { margin:18px; overflow:hidden; border:1px solid #e5eaf1; border-radius:14px; background:#ffffff; box-shadow:0 2px 8px rgba(10,20,35,.04); }
.workspace-row { display:grid; grid-template-columns:1.5fr .8fr .8fr .6fr; gap:10px; padding:14px 16px; border-bottom:1px solid #eef2f7; color:#1a1e26; font-size:13px; }
.workspace-row.header { color:#6a7a8c; background:#f8fafd; font-size:12px; font-weight:700; }
.workspace-row:last-child { border-bottom:0; }
.status-pill { justify-self:start; padding:4px 8px; color:#0d815f; background:#e7f8f1; border:1px solid #c5ead8; border-radius:7px; }
.calibration-grid, .material-grid { padding:20px; display:grid; grid-template-columns:repeat(3,1fr); gap:14px; align-content:start; }
.dark-card { padding:18px; border:1px solid #e5eaf1; border-radius:14px; background:#ffffff; box-shadow:0 2px 8px rgba(10,20,35,.04); color:#1a1e26; }
.dark-card h3 { margin:12px 0 7px; }
.dark-card p { color:#6a7a8c; font-size:12px; line-height:1.6; }
.dark-card .quick-icon { background:#eaf2ff; color:var(--blue); }
.spool { width:76px; height:76px; display:grid; place-items:center; margin-bottom:12px; border:14px solid currentColor; border-radius:50%; box-shadow:inset 0 0 0 8px #ffffff; }
.spool.orange{color:#ff7a00}.spool.blue{color:#2380ff}.spool.gray{color:#a2a8af}

.empty-state { padding:60px 20px; text-align:center; color:var(--muted); }
.empty-state .quick-icon { margin:0 auto 14px; }
.footer { max-width:1440px; margin:0 auto; padding:0 20px 28px; color:#98a2b3; font-size:12px; display:flex; justify-content:space-between; }
.mobile-nav { display:none; }

/* Upload-first homepage */
.upload-home { max-width: 1480px; }
.upload-stage {
  position: relative;
  padding: 38px 48px 28px;
  overflow: hidden;
  border: 1px solid #dfe8f5;
  border-radius: 26px;
  background: #f8fbff url("assets/images/tech-bg.png") center / cover no-repeat;
  box-shadow: var(--shadow-sm);
}
.upload-stage::before {
  content: "";
  position: absolute;
  width: 420px;
  height: 420px;
  right: -150px;
  top: -180px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(23,105,255,.15), transparent 70%);
  pointer-events: none;
}
.upload-stage.compact { max-width: 1050px; min-height: 670px; margin: 0 auto; }
.upload-heading { position: relative; z-index: 2; max-width: 880px; margin: 0 auto 26px; text-align: center; }
.upload-heading h1 { margin: 0; font-size: clamp(38px,4.3vw,62px); line-height: 1.12; letter-spacing: -3px; }
.upload-heading p { margin: 14px 0 0; color: #667085; font-size: 17px; }
.home-model-search { position:relative; z-index:3; width:min(980px,100%); margin:0 auto 18px; display:grid; grid-template-columns:1fr auto; gap:12px; }
.home-model-search label { min-height:62px; padding:0 20px; display:flex; align-items:center; gap:14px; border:1px solid #dce5f1; border-radius:17px; background:rgba(255,255,255,.96); box-shadow:0 12px 30px rgba(41,88,154,.1); }
.home-model-search label:focus-within { border-color:#77a8ff; box-shadow:0 0 0 4px rgba(23,105,255,.1),0 14px 32px rgba(41,88,154,.12); }
.home-model-search svg { width:25px; height:25px; flex:none; color:#8491a3; }
.home-model-search input { width:100%; min-width:0; border:0; outline:0; background:transparent; color:var(--ink); font:inherit; font-size:16px; }
.home-model-search input::placeholder { color:#98a2b3; }
.home-model-search .button { min-width:150px; border-radius:17px; font-size:16px; }
.mega-upload {
  position: relative;
  z-index: 2;
  width:min(1037px,96%);
  min-height: 410px;
  margin: 0 auto;
  display: grid;
  place-items: center;
  overflow: hidden;
  border: 2px dashed #8bb3ff;
  border-radius: 24px;
  background: rgba(255,255,255,.89);
  box-shadow: 0 22px 52px rgba(41,88,154,.12), inset 0 0 0 8px rgba(23,105,255,.025);
  transition: .2s ease;
}
.mega-upload:hover { border-color: var(--blue); transform: translateY(-2px); box-shadow: 0 26px 58px rgba(41,88,154,.16), inset 0 0 0 8px rgba(23,105,255,.04); }
.mega-upload::after { content:""; position:absolute; inset:16px; border:1px solid rgba(120,155,205,.18); border-radius:17px; pointer-events:none; }
.upload-blueprint { position:absolute; inset:0; opacity:.32; pointer-events:none; }
.upload-blueprint::before,.upload-blueprint::after { content:""; position:absolute; inset:0; background-image:linear-gradient(rgba(84,132,199,.13) 1px,transparent 1px),linear-gradient(90deg,rgba(84,132,199,.13) 1px,transparent 1px); background-size:34px 34px; mask-image:linear-gradient(90deg,transparent,black,transparent); }
.upload-blueprint span { position:absolute; width:110px; height:110px; border:1px solid #6da2ed; transform:rotate(30deg) skew(-10deg); }
.upload-blueprint span:nth-child(1){left:8%;top:18%}.upload-blueprint span:nth-child(2){right:11%;top:20%;width:74px;height:74px}.upload-blueprint span:nth-child(3){right:19%;bottom:13%;width:120px;height:55px}
.hero-printer-visual { position:absolute; right:30px; bottom:62px; z-index:1; width:308px; height:310px; display:grid; place-items:center; pointer-events:none; }
.hero-printer-visual span { position:absolute; width:280px; height:280px; border-radius:50%; background:radial-gradient(circle,rgba(255,196,42,.26) 0,rgba(23,105,255,.09) 48%,transparent 72%); filter:blur(2px); }
.hero-printer-visual img { position:relative; z-index:1; width:100%; height:auto; object-fit:contain; filter:drop-shadow(0 22px 22px rgba(14,27,46,.24)); transform:translateY(4px); transition:transform .3s ease; }
.mega-upload:hover .hero-printer-visual img { transform:translateY(-2px) scale(1.015); }
.mega-upload-content { position: relative; z-index: 2; padding: 38px 24px 76px; text-align:center; }
.upload-home .mega-upload-content { width:100%; padding:38px 480px 76px 48px; }
.mega-upload-icon { width:78px; height:78px; margin:0 auto 15px; display:grid; place-items:center; color:var(--blue); border-radius:24px; background:linear-gradient(145deg,#edf4ff,#dce9ff); box-shadow:0 14px 26px rgba(23,105,255,.16); }
.mega-upload-icon svg { width:34px; height:34px; }
.mega-upload h2 { margin:0 0 8px; font-size:26px; }
.mega-upload p { margin:0 0 18px; color:var(--muted); }
.mega-button { min-width:220px; min-height:52px; font-size:16px; }
.sample-link { display:block; margin:14px auto 10px; color:var(--blue); background:transparent; font-weight:750; }
.mega-upload small { display:block; color:#98a2b3; font-size:12px; }
.upload-assurance { position:absolute; left:22px; right:22px; bottom:18px; z-index:2; display:flex; justify-content:center; gap:34px; padding-top:15px; border-top:1px solid #edf0f5; color:#667085; font-size:12px; }
.upload-assurance span { display:flex; align-items:center; gap:6px; }
.upload-assurance svg { width:16px; height:16px; color:var(--green); }
.simple-flow { width:min(930px,100%); margin:22px auto 0; display:grid; grid-template-columns:auto 1fr auto 1fr auto 1fr auto; align-items:center; gap:14px; color:#7c8797; font-size:12px; }
.simple-flow span { display:flex; align-items:center; gap:8px; white-space:nowrap; }
.simple-flow b { width:26px; height:26px; display:grid; place-items:center; border-radius:50%; background:#e8edf5; color:#778497; }
.simple-flow .active { color:var(--blue); font-weight:800; }.simple-flow .active b{color:#fff;background:var(--blue)}
.simple-flow i { height:1px; background:linear-gradient(90deg,#cad5e4 50%,transparent 50%); background-size:8px 1px; }
.nearby-section { margin-top:16px; padding:22px 24px; border:1px solid #e2e8f0; border-radius:22px; background:#fff; box-shadow:var(--shadow-sm); }
.nearby-head { display:flex; align-items:center; justify-content:space-between; gap:18px; margin-bottom:17px; }
.nearby-head > div { display:grid; grid-template-columns:auto 1fr; column-gap:10px; align-items:center; }
.nearby-head h2 { margin:0; font-size:22px; }.nearby-head p { grid-column:2; margin:4px 0 0; color:var(--muted); font-size:13px; }
.live-dot { width:10px; height:10px; border-radius:50%; background:#17b26a; box-shadow:0 0 0 6px rgba(23,178,106,.12); animation:pulse 2s infinite; }
@keyframes pulse { 50% { box-shadow:0 0 0 10px rgba(23,178,106,0); } }
.nearby-printers { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.idle-printer { position:relative; min-width:0; padding:14px; display:grid; grid-template-columns:48px 1fr auto; align-items:center; gap:12px; border:1px solid #e3e8ef; border-radius:15px; background:#fbfcfe; transition:.18s; }
.idle-printer:hover { border-color:#abc6ff; transform:translateY(-2px); box-shadow:0 10px 22px rgba(28,51,84,.09); }
.idle-printer.recommended::before { content:"最近"; position:absolute; top:-8px; right:12px; padding:3px 7px; color:#fff; background:var(--blue); border-radius:6px; font-size:10px; }
.printer-orbit { width:46px; height:46px; display:grid; place-items:center; border-radius:50%; color:var(--blue); background:radial-gradient(circle,#fff 40%,#e6efff 42% 60%,transparent 62%),#f4f8ff; box-shadow:0 0 0 1px #d9e7ff; }
.printer-orbit svg { width:20px; height:20px; }
.idle-printer strong { font-size:14px; }.idle-printer p { margin:4px 0 0; color:var(--muted); font-size:11px; }
.idle-status { text-align:right; }.idle-status b { display:block; color:var(--green); font-size:12px; }.idle-status span { color:#667085; font-size:11px; }

/* Hover-to-reveal edge tools */
.edge-dock { position:fixed; right:0; top:50%; z-index:65; width:34px; min-height:270px; transform:translateY(-50%); overflow:hidden; border-radius:20px 0 0 20px; background:rgba(255,255,255,.97); border:1px solid #dfe5ee; border-right:0; box-shadow:-14px 18px 38px rgba(28,51,84,.13); backdrop-filter:blur(14px); transition:width .24s ease; }
.edge-dock:hover,.edge-dock:focus-within { width:292px; }
.edge-handle { position:absolute; left:0; top:0; bottom:0; width:34px; display:grid; place-items:center; color:var(--blue); background:linear-gradient(180deg,#edf4ff,#fff); font-size:12px; font-weight:850; }
.edge-handle span { writing-mode:vertical-rl; letter-spacing:3px; }
.edge-menu { width:257px; min-height:270px; margin-left:34px; padding:17px 14px; display:flex; flex-direction:column; justify-content:center; opacity:0; transform:translateX(16px); transition:.2s ease; }
.edge-dock:hover .edge-menu,.edge-dock:focus-within .edge-menu { opacity:1; transform:none; }
.edge-menu button { width:100%; min-height:72px; padding:12px 11px; display:grid; grid-template-columns:48px 1fr; align-items:center; gap:14px; text-align:left; color:var(--ink); border-radius:14px; background:transparent; transition:background .18s ease,transform .18s ease; }
.edge-menu button + button { border-top:1px solid #eef2f7; border-radius:0; }
.edge-menu button:hover { background:#f6f9fd; transform:translateX(-2px); }.edge-menu .quick-icon{width:48px;height:48px;border-radius:15px}.edge-menu .quick-icon svg{width:23px;height:23px}
.edge-menu strong,.edge-menu small { display:block; }.edge-menu strong{font-size:16px;letter-spacing:-.2px}.edge-menu small{margin-top:5px;color:#98a2b3;font-size:11px}

/* Upload preview and quote studio */
.preview-page { max-width: 1540px; }
.quote-workflow { margin-bottom:12px; padding:13px 22px; display:grid; grid-template-columns:auto 1fr auto 1fr auto 1fr auto; align-items:center; gap:13px; color:#8490a0; background:#fff; border:1px solid #e1e7ef; border-radius:15px; box-shadow:var(--shadow-sm); font-size:12px; }
.quote-workflow span { display:flex; align-items:center; gap:7px; white-space:nowrap; }.quote-workflow span svg{width:16px;height:16px}.quote-workflow b{width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#e9edf3}
.quote-workflow .done{color:var(--green)}.quote-workflow .active{color:var(--blue);font-weight:800}.quote-workflow .active b{color:#fff;background:var(--blue)}
.quote-workflow i{height:1px;background:repeating-linear-gradient(90deg,#cbd5e1 0 6px,transparent 6px 12px)}
.preview-studio { min-height:720px; display:grid; grid-template-columns:226px minmax(0,1fr) 370px; overflow:hidden; border:1px solid #dfe5ed; border-radius:22px; background:#fff; box-shadow:0 20px 48px rgba(28,51,84,.12); }
.file-pane { padding:16px; background:#f8fafc; border-right:1px solid #e3e8ef; }
.pane-title { display:flex; align-items:center; justify-content:space-between; margin-bottom:13px; }
.file-item { padding:11px; display:grid; grid-template-columns:38px 1fr 22px; gap:9px; align-items:center; border:1px solid #dce4ee; border-radius:12px; background:#fff; }
.file-item.active { border-color:#9bbcff; box-shadow:inset 3px 0 0 var(--blue); }
.file-cube { width:36px;height:36px;display:grid;place-items:center;color:var(--blue);border-radius:10px;background:var(--blue-soft)}.file-cube svg{width:18px;height:18px}
.file-item strong { display:block; max-width:110px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; font-size:12px; }.file-item span{display:block;margin-top:3px;color:#98a2b3;font-size:9px}.file-item>button{color:#98a2b3;background:transparent;font-size:18px}
.check-list { margin:16px 0; padding:13px; display:flex; flex-direction:column; gap:9px; border-radius:12px; background:#eef8f3; color:#367356; font-size:11px; }.check-list span{display:flex;align-items:center;gap:7px}.check-list svg{width:15px;height:15px}
.preview-canvas { position:relative; min-width:0; display:grid; place-items:center; overflow:hidden; background:radial-gradient(circle at 50% 38%,#374451,#202833 64%,#171e27); }
.preview-canvas::before { content:""; position:absolute; inset:0; opacity:.17; background-image:linear-gradient(#a7b8ca 1px,transparent 1px),linear-gradient(90deg,#a7b8ca 1px,transparent 1px); background-size:38px 38px; mask-image:linear-gradient(transparent,black 40%,transparent 96%); }
.canvas-toolbar { position:absolute; left:16px; right:16px; top:14px; z-index:3; display:flex; align-items:center; gap:6px; }.canvas-toolbar span{flex:1}.canvas-toolbar button{padding:7px 10px;display:flex;align-items:center;gap:6px;color:#b5c0cd;background:rgba(20,27,36,.74);border:1px solid #3c4754;border-radius:8px;font-size:11px}.canvas-toolbar button.active{color:#fff;background:#2f6fdb;border-color:#4f8df5}.canvas-toolbar svg{width:14px;height:14px}
.preview-bed { position:relative; width:min(42vw,510px); aspect-ratio:1.28; transform:perspective(780px) rotateX(62deg); border:2px solid #697a8c; border-radius:9px; background:repeating-linear-gradient(0deg,rgba(255,255,255,.04) 0 1px,transparent 1px 25px),repeating-linear-gradient(90deg,rgba(255,255,255,.04) 0 1px,transparent 1px 25px),#2d3742; box-shadow:0 45px 68px rgba(0,0,0,.42); }
.preview-model { position:absolute; left:50%; top:48%; width:175px; height:175px; transform:translate(-50%,-62%) rotateX(-62deg); border-radius:50%; background:repeating-conic-gradient(from 0deg,#ff8b1b 0 7deg,#c95700 7deg 10deg); box-shadow:0 22px 34px rgba(0,0,0,.36); }
.preview-model::before { content:""; position:absolute; inset:31px; border-radius:50%; background:#ff8613; box-shadow:inset 0 0 0 22px #2b343e; }.preview-model span{position:absolute;inset:0;border-radius:50%;box-shadow:inset -18px -18px 30px rgba(135,52,0,.28)}
.size-ruler { position:absolute; left:20px; bottom:55px; color:#aeb9c6; font-size:11px; }
.preview-summary { position:absolute; left:16px; right:16px; bottom:14px; display:flex; justify-content:center; gap:28px; color:#9facbb; font-size:10px; }.preview-summary span{display:flex;align-items:baseline;gap:5px}.preview-summary b{color:#fff;font-size:13px}
.estimate-pane { padding:20px; overflow:auto; background:#fff; border-left:1px solid #e3e8ef; }
.estimate-title { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:16px; }.estimate-title h2{margin:5px 0 0;font-size:21px}.status-ok{color:var(--green);font-size:11px;font-weight:800}.recommended-label{padding:5px 8px;color:var(--blue);background:var(--blue-soft);border-radius:7px;font-size:10px}
.control-label { margin-bottom:14px; display:block; color:#475467; font-size:12px; font-weight:750; }.control-label>span{display:block;margin-bottom:8px}.control-label select,.advanced-grid input,.advanced-grid select{width:100%;height:42px;margin-top:7px;padding:0 11px;color:var(--ink);background:#f8fafc;border:1px solid #dce3ec;border-radius:10px;outline:0}.control-label p{margin:7px 0 0;color:#98a2b3;font-size:10px;font-weight:400}
.color-options { display:flex; align-items:center; gap:9px; }.color-options em{margin-left:4px;color:#667085;font-size:11px;font-style:normal;font-weight:400}.color{width:28px;height:28px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 1px #cfd7e3}.color.selected{box-shadow:0 0 0 2px var(--blue),0 0 0 4px #fff}.color.orange{background:#ff7a00}.color.white{background:#f4f1e9}.color.black{background:#20242a}
.quality-tabs { display:grid; grid-template-columns:repeat(3,1fr); overflow:hidden; border:1px solid #dce3ec; border-radius:10px; }.quality-tabs button{min-height:42px;color:#667085;background:#fff;border-right:1px solid #e4e9f0;font-size:11px}.quality-tabs button:last-child{border-right:0}.quality-tabs button.active{color:var(--blue);background:var(--blue-soft);font-weight:800}.quality-tabs small{display:block;color:var(--orange);font-size:8px}
.urgent-toggle { width:100%; margin:2px 0 13px; padding:11px; display:grid; grid-template-columns:34px 1fr 38px; gap:9px; align-items:center; text-align:left; color:var(--ink); border:1px solid #e2e7ee; border-radius:11px; background:#fff; }.urgent-toggle>span{width:32px;height:32px;display:grid;place-items:center;color:var(--orange);border-radius:9px;background:var(--orange-soft)}.urgent-toggle svg{width:17px;height:17px}.urgent-toggle strong,.urgent-toggle small{display:block}.urgent-toggle strong{font-size:12px}.urgent-toggle small{margin-top:3px;color:#98a2b3;font-size:9px}.urgent-toggle i{width:36px;height:20px;position:relative;border-radius:999px;background:#dce2ea}.urgent-toggle i::after{content:"";position:absolute;left:3px;top:3px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.18);transition:.18s}.urgent-toggle.on{border-color:#ffc790;background:#fffaf5}.urgent-toggle.on i{background:var(--orange)}.urgent-toggle.on i::after{left:19px}
.advanced-settings { margin-bottom:13px; border:1px solid #e2e7ee; border-radius:11px; background:#fafbfc; }.advanced-settings summary{padding:11px;display:flex;justify-content:space-between;cursor:pointer;color:#475467;font-size:11px;font-weight:750}.advanced-settings summary span{color:#98a2b3;font-weight:400}.advanced-grid{padding:0 11px 11px;display:grid;grid-template-columns:1fr 1fr;gap:8px}.advanced-grid label{color:#667085;font-size:9px}.advanced-grid input,.advanced-grid select{height:34px;margin-top:4px;font-size:10px}
.matched-printer { margin-bottom:13px; padding:10px; display:grid; grid-template-columns:10px 1fr auto; align-items:center; gap:9px; border-radius:11px; background:#f0f8f4; }.matched-printer strong,.matched-printer small{display:block}.matched-printer strong{color:#295c45;font-size:11px}.matched-printer small{margin-top:3px;color:#6e8d7e;font-size:9px}.matched-printer button{color:var(--blue);background:transparent;font-size:10px}
.estimate-total { padding:12px 0; border-top:1px solid #edf0f4; }.estimate-total>div{display:flex;align-items:end;justify-content:space-between}.estimate-total span{color:#667085;font-size:12px}.estimate-total strong{color:var(--orange);font-size:30px}.estimate-total p{margin:5px 0 0;color:#98a2b3;font-size:9px;text-align:right}.quote-submit{min-height:48px}

.modal-backdrop { position:fixed; inset:0; z-index:100; display:none; place-items:center; padding:20px; background:rgba(15,23,42,.42); backdrop-filter:blur(7px); }
.modal-backdrop.open { display:grid; }
.modal-card { position:relative; width:min(420px,100%); padding:30px; background:#fff; border-radius:22px; box-shadow:0 30px 80px rgba(15,23,42,.28); }
.modal-card h2 { margin:10px 0 5px; text-align:center; }
.modal-card > p { margin:0 0 22px; text-align:center; color:var(--muted); }
.modal-mark { width:52px; height:52px; margin:auto; padding:5px; display:grid; place-items:center; overflow:hidden; border:1px solid #e1e8f1; border-radius:16px; background:#fff; box-shadow:0 8px 20px rgba(20,48,85,.12); }
.modal-mark img { width:100%; height:100%; object-fit:contain; }
.modal-close { position:absolute; right:12px; top:10px; font-size:23px; }
.modal-card label { display:block; margin:14px 0; color:#475467; font-size:13px; font-weight:700; }
.modal-card input { width:100%; height:46px; margin-top:7px; padding:0 12px; border:1px solid var(--line); border-radius:11px; outline:0; }
.code-row { display:flex; gap:8px; }.code-row input{flex:1}.code-row button{margin-top:7px;padding:0 12px;border-radius:10px;color:var(--blue);background:var(--blue-soft)}
.modal-card small { display:block; margin-top:13px; text-align:center; color:#98a2b3; }
.toast { position:fixed; left:50%; bottom:28px; z-index:130; transform:translate(-50%,30px); opacity:0; padding:12px 18px; color:#fff; background:#182230; border-radius:12px; box-shadow:0 15px 40px rgba(15,23,42,.26); transition:.22s; pointer-events:none; max-width:80vw; font-size:14px; }
.toast.show { transform:translate(-50%,0); opacity:1; }
.toast.error { background:#dc2626; box-shadow:0 15px 40px rgba(220,38,38,.4); }

@media (max-width: 1180px) {
  .nav-link { padding:9px 8px; }
  .top-actions .button.ghost { display:none; }
  .home-layout { grid-template-columns:1fr; }
  .quick-rail { grid-row:auto; display:grid; grid-template-columns:repeat(5,1fr); }
  .quick-card { grid-template-columns:38px 1fr; min-height:120px; padding:14px; }
  .quick-arrow { display:none; }
  .quick-icon { width:38px; height:38px; }
  .model-grid { grid-template-columns:repeat(3,1fr); }
  .catalog-grid { grid-template-columns:repeat(4,1fr); }
  .preview-studio { grid-template-columns:190px minmax(0,1fr) 340px; }
  .file-item { grid-template-columns:34px 1fr 18px; }
  .file-item strong { max-width:88px; }
  .demand-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .community-grid { grid-template-columns:repeat(4,minmax(0,1fr)); }
  .demand-toolbar { align-items:flex-start; flex-direction:column; }
  .demand-filters { width:100%; justify-content:flex-start; }
  .demand-filters label { flex:1; }
  .demand-filters select { width:100%; min-width:0; }
  .community-toolbar { grid-template-columns:minmax(260px,1fr) 160px 160px; }
}
@media (max-width: 920px) {
  .topbar { gap:14px; }
  .nav { display:none; }
  .top-actions { margin-left:auto; }
  .home-layout { display:block; }
  .hero-copy { width:100%; min-width:0; padding-right:36%; }
  .hero-art { width:48%; opacity:.68; }
  .quick-rail { margin-top:14px; grid-template-columns:repeat(2,1fr); }
  .quick-card:last-child { grid-column:span 2; }
  .model-grid { grid-template-columns:repeat(2,1fr); }
  .catalog-grid { grid-template-columns:repeat(3,1fr); }
  .catalog-filter-card { padding-right:138px; }
  .catalog-mascot { right:18px; bottom:-25px; width:108px; height:108px; }
  .flow-strip { grid-template-columns:repeat(4,1fr); }
  .flow-line { display:none; }
  .flow-step { flex-direction:column; align-items:flex-start; }
  .wizard-shell,.service-layout,.detail-layout { grid-template-columns:1fr; }
  .detail-preview { min-height:540px; }
  .detail-panel { min-height:0; }
  .preview-object { width:min(68%,430px); }
  .quote-panel,.map-card { position:static; }
  .demand-market-layout { grid-template-columns:1fr; }
  .demand-publish-panel { position:static; }
  .community-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .community-hero { min-height:250px; padding:32px; }
  .community-hero::before { display:none; }
  .community-hero h1 { font-size:38px; letter-spacing:-1.5px; }
  .community-hero-action { height:190px; gap:14px; }
  .community-hero-action img { width:220px; height:190px; }
  .community-hero-action .community-publish { min-height:48px; padding:0 17px; margin-bottom:32px; }
  .demand-hero-copy { max-width:58%; }
  .demand-fruit-display { right:-4px; top:-42px; width:47%; height:238px; }
  .content-grid { grid-template-columns:1fr 1fr; }
  .workspace-shell { grid-template-columns:78px 1fr; }
  .workspace-sidebar { padding:16px 9px; }
  .workspace-brand span,.workspace-tab span,.workspace-back span { display:none; }
  .workspace-tab { justify-content:center; }
  .workspace-brand { justify-content:center; padding:6px 0 18px; }
  .workspace-panel { grid-template-columns:minmax(0,1fr) 280px; }
  .workspace-inspector { border-left:1px solid #e5eaf1; border-top:0; }
  .order-control { align-items:stretch; flex-direction:column; }
  .order-status-flow { overflow-x:auto; padding-bottom:4px; }
  .order-status-flow button { min-width:108px; }
  .order-error-filter { align-self:flex-start; }
  .order-card { grid-template-columns:76px minmax(0,1fr); }
  .order-card-icon { width:76px; height:76px; }
  .order-card-action { grid-column:2; justify-self:start; }
  .order-assignment { grid-template-columns:1fr 1fr; }
  .order-assignment .order-eta { grid-column:1 / -1; }
  .order-card-flow-step { min-width:104px; }
  .edge-dock { display:none; }
  .upload-stage { padding:30px 24px 24px; }
  .upload-heading h1 { letter-spacing:-2px; }
  .hero-printer-visual { right:8px; width:275px; height:300px; }
  .upload-home .mega-upload-content { padding-right:300px; padding-left:28px; }
  .nearby-printers { grid-template-columns:1fr; }
  .preview-studio { grid-template-columns:1fr; overflow:visible; }
  .file-pane { border-right:0; border-bottom:1px solid #e3e8ef; }
  .file-pane .check-list { display:grid; grid-template-columns:repeat(3,1fr); }
  .preview-canvas { min-height:520px; }
  .preview-bed { width:min(70vw,520px); }
  .estimate-pane { border-left:0; border-top:1px solid #e3e8ef; }
}
@media (max-width: 660px) {
  .topbar-wrap { padding:8px 8px 0; }
  .topbar { height:58px; padding:0 11px; border-radius:14px; }
  .brand-text { font-size:17px; }
  .top-actions .button:not(.primary) { display:none; }
  .page { padding:12px 10px 94px; }
  .detail-page { padding-top:12px; }
  .detail-layout { gap:14px; }
  .detail-preview { min-height:430px; border-radius:18px; }
  .detail-preview-badge { left:14px; top:14px; }
  .detail-visual-shell { padding:58px 18px 18px; }
  .preview-object { width:min(84%,340px); border-radius:18px; }
  .detail-preview-meta { margin:0 14px 14px; padding:12px; grid-template-columns:1fr; gap:10px; }
  .detail-preview-meta > div + div { padding:10px 0 0; border-left:0; border-top:1px solid #e8eef6; }
  .detail-panel { padding:21px 18px; border-radius:18px; }
  .detail-panel h1 { margin-top:12px; font-size:30px; }
  .detail-panel .lead { font-size:14px; }
  .detail-file-actions button { width:40px; height:40px; }
  .detail-panel .spec-grid { gap:8px; margin:18px 0; }
  .detail-panel .spec { min-height:76px; padding:13px; }
  .hero-main { min-height:480px; }
  .hero-copy { padding:28px 22px; width:100%; }
  .hero-copy h1 { font-size:36px; }
  .hero-copy p { font-size:15px; }
  .hero-art { width:82%; height:55%; right:-20%; bottom:0; opacity:.62; }
  .search-row { flex-direction:column; }
  .quick-rail { grid-template-columns:1fr; }
  .quick-card:last-child { grid-column:auto; }
  .model-grid,.catalog-grid,.choice-grid,.content-grid,.calibration-grid,.material-grid { grid-template-columns:1fr; }
  .flow-strip { grid-template-columns:1fr 1fr; }
  .page-hero { padding:22px; align-items:flex-start; flex-direction:column; }
  .community-hero { min-height:300px; padding:28px 22px; }
  .community-hero > div:first-child { padding-left:0; }
  .community-hero::after { right:-210px; bottom:-130px; }
  .community-hero-action { width:100%; height:132px; align-items:flex-end; justify-content:flex-end; gap:10px; }
  .community-hero-action img { width:156px; height:140px; margin-bottom:-2px; }
  .community-hero-action .community-publish { width:auto; flex:1; margin:0 0 10px; }
  .demand-hero { height:150px; min-height:150px; padding:18px 22px; align-items:center; flex-direction:row; background:transparent; }
  .demand-hero-copy { max-width:70%; opacity:1; }
  .demand-fruit-display { right:-12px; top:-20px; width:40%; height:190px; }
  .fruit-display-group { transform:scale(.98); }
  .demand-hero::after { right:-150px; width:440px; opacity:.11; }
  .demand-hero h1,.community-hero h1 { font-size:32px; letter-spacing:-1.2px; }
  .demand-publish { width:100%; margin-top:10px; }
  .demand-toolbar { margin:12px 0 18px; padding:15px; gap:16px; }
  .demand-filters { flex-direction:column; align-items:stretch; }
  .demand-filters label,.demand-filters select { width:100%; }
  .demand-grid { grid-template-columns:1fr; gap:14px; }
  .demand-card { min-height:0; padding:18px; }
  .community-toolbar { margin:-10px 0 12px; grid-template-columns:1fr; }
  .community-toolbar > select { width:100%; }
  .community-result-row { margin:0 0 15px; align-items:flex-start; flex-direction:column; gap:10px; }
  .community-result-actions { width:100%; align-items:flex-start; flex-direction:column; }
  .community-tag-tabs { width:100%; justify-content:flex-start; }
  .community-grid { margin:0; grid-template-columns:1fr; gap:15px; }
  .community-visual { height:150px; }
  .community-post h3 { min-height:0; }
  .community-post-footer { align-items:flex-start; flex-direction:column; }
  .community-metrics { width:100%; justify-content:space-between; }
  .community-voucher-modal { padding:16px; }
  .community-voucher-dialog { width:calc(100% - 32px); max-height:90vh; padding:20px; border-radius:20px; }
  .community-voucher-close { right:14px; top:14px; width:40px; height:40px; }
  .community-voucher-heading { min-height:0; padding:0 42px 20px 0; align-items:flex-start; gap:13px; }
  .community-voucher-icon { flex-basis:52px; width:52px; height:52px; border-radius:14px; }
  .community-voucher-heading svg { width:25px; height:25px; }
  .community-voucher-heading h2 { font-size:25px; letter-spacing:-.4px; }
  .community-voucher-rules { margin:20px 0; grid-template-columns:1fr; }
  .community-voucher-rules article { min-height:0; padding:16px 15px 16px 18px; grid-template-columns:44px minmax(0,1fr); align-items:start; gap:12px; }
  .community-voucher-rules article::before { top:14px; bottom:14px; }
  .community-voucher-rules h3 { font-size:16px; }
  .community-voucher-rules p { font-size:13px; }
  .community-voucher-reward { grid-column:2; min-width:0; width:max-content; height:38px; padding:0 12px; margin-top:-2px; }
  .community-voucher-reward strong { font-size:18px; }
  .community-voucher-note { padding:0; }
  .community-voucher-confirm { height:52px; margin-top:20px; }
  .publish-modal { padding:16px; }
  .publish-dialog { width:calc(100% - 16px); max-height:90vh; padding:20px; border-radius:20px; }
  .publish-modal-close { right:14px; top:14px; }
  .publish-dialog-heading { padding:0 42px 18px 0; align-items:flex-start; gap:12px; }
  .publish-dialog-heading > span { flex-basis:48px; width:48px; height:48px; border-radius:13px; }
  .publish-dialog-heading svg { width:23px; height:23px; }
  .publish-dialog-heading h2 { font-size:23px; }
  .publish-dialog-heading p { font-size:12px; }
  .publish-form { margin-top:18px; gap:15px; }
  .publish-form-row { grid-template-columns:1fr; gap:15px; }
  .publish-uploader { min-height:96px; padding:14px; }
  .publish-file-item { flex-wrap:wrap; }
  .publish-file-item span { flex-basis:calc(100% - 76px); }
  .services-page { padding-top:40px; padding-bottom:54px; }
  .services-hero { top:66px; width:100%; min-height:100px; padding:0; background-size:auto 180px,100% 100%; background-position:center -38px,center; }
  .services-hero > * { top:-14px; }
  .services-hero h1 { font-size:30px; }
  .services-hero-action { width:100%; max-width:280px; }
  .catalog-filter-card { margin-top:16px; padding:10px; }
  .catalog-mascot { display:none; }
  .catalog-section { margin-top:14px; }
  .catalog-toolbar { padding:10px; }
  .catalog-toolbar .search-box { flex-basis:100%; }
  .catalog-toolbar .catalog-upload { width:100%; margin-left:0; }
  .wizard-main,.quote-panel { padding:17px; }
  .service-card { grid-template-columns:80px 1fr; }
  .service-cta { grid-column:2; flex-direction:row; align-items:center; }
  .workspace-page { padding-left:0; padding-right:0; }
  body.workspace-mode { overflow:auto; }
  body.workspace-mode .app-shell { height:auto; min-height:100dvh; overflow:visible; }
  body.workspace-mode .workspace-page { height:auto; min-height:100dvh; }
  body.workspace-mode .workspace-shell { height:auto; min-height:100dvh; }
  .workspace-shell { min-height:780px; border-radius:0; }
  .workspace-panel { grid-template-columns:1fr; overflow:visible; }
  .work-canvas { min-height:52dvh; }
  .workspace-inspector { border-left:0; border-top:1px solid #e5eaf1; }
  .workspace-top { padding:0 12px; }
  .workspace-top-actions .dark-button:not(.primary) { display:none; }
  .orders-hero { min-height:0; }
  .order-control { margin:12px 0 14px; padding:13px; }
  .order-status-flow { align-items:stretch; }
  .order-status-flow button { min-width:96px; height:48px; padding:0 9px; grid-template-columns:26px 1fr; gap:6px; }
  .order-status-flow button em { width:26px; height:26px; }
  .order-status-flow button small { display:none; }
  .order-flow-arrow { min-width:24px; }
  .order-card { min-height:0; padding:16px; grid-template-columns:1fr; gap:14px; }
  .order-card-icon { display:none; }
  .order-card-head h3 { font-size:18px; }
  .order-assignment { margin-top:12px; grid-template-columns:1fr; }
  .order-assignment .order-eta { grid-column:auto; }
  .order-card-action { grid-column:auto; justify-self:stretch; }
  .order-card-action .button { width:100%; }
  .order-card-flow { margin-right:-4px; margin-left:-4px; padding-right:4px; padding-left:4px; }
  .order-card-flow-step { min-width:96px; }
  .footer { padding:0 12px 86px; flex-direction:column; gap:5px; }
  .mobile-nav { position:fixed; left:10px; right:10px; bottom:10px; z-index:70; height:66px; padding:7px 8px; display:grid; grid-template-columns:repeat(5,1fr); align-items:center; background:rgba(255,255,255,.95); border:1px solid #dfe5ee; border-radius:20px; box-shadow:0 16px 44px rgba(28,51,84,.2); backdrop-filter:blur(14px); }
  .mobile-nav a { min-width:0; display:flex; flex-direction:column; align-items:center; gap:3px; color:#7a8698; font-size:10px; }
  .mobile-nav a svg { width:19px; height:19px; }
  .mobile-nav a.active { color:var(--blue); font-weight:800; }
  .mobile-nav .mobile-print { width:52px; height:52px; margin:-23px auto 0; justify-content:center; color:#fff; background:var(--orange); border-radius:17px; box-shadow:0 9px 22px rgba(255,122,0,.32); }
  .upload-stage { padding:24px 12px 18px; border-radius:20px; }
  .upload-heading { margin-bottom:20px; }.upload-heading h1{font-size:34px;letter-spacing:-1.8px}.upload-heading p{font-size:14px;line-height:1.6}
  .home-model-search { grid-template-columns:1fr; gap:8px; margin-bottom:14px; }.home-model-search label{min-height:54px;padding:0 16px}.home-model-search .button{min-height:48px;width:100%}
  .mega-upload { min-height:390px; border-radius:19px; }.mega-upload-content{padding:30px 14px 114px}.mega-upload h2{font-size:22px}.mega-upload p{font-size:13px}.mega-button{width:100%;min-width:0}.mega-upload small{font-size:10px;line-height:1.6}
  .hero-printer-visual { display:none; }
  .upload-home .mega-upload-content { padding:30px 14px 114px; }
  .upload-assurance { left:14px; right:14px; bottom:13px; display:grid; grid-template-columns:1fr; gap:6px; }
  .simple-flow { grid-template-columns:1fr 1fr; gap:9px; }.simple-flow i{display:none}.simple-flow span{white-space:normal}
  .nearby-section { padding:18px 14px; }.nearby-head{align-items:flex-start;flex-direction:column}.nearby-head .button{width:100%}.idle-printer{grid-template-columns:44px 1fr}.idle-status{grid-column:2;text-align:left;display:flex;gap:9px;align-items:center}
  .quote-workflow { grid-template-columns:1fr 1fr; padding:11px; }.quote-workflow i{display:none}.quote-workflow span{white-space:normal}
  .preview-studio { min-height:0; border-radius:17px; }
  .file-pane .check-list { grid-template-columns:1fr; }
  .preview-canvas { min-height:430px; }.preview-bed{width:82vw}.preview-model{width:130px;height:130px}.preview-model::before{inset:24px;box-shadow:inset 0 0 0 17px #2b343e}.canvas-toolbar button{font-size:9px;padding:6px}.preview-summary{gap:13px}
  .estimate-pane { padding:17px; }
}

/* ──────────────────────────────────────────────────────────
 * WorkspaceView 集成层样式(2026-09-06)
 *  - workspace-ready-dot:品牌区 printer+slicer 就绪指示
 *  - status-dot.error:状态条错误态
 *  - status-fill.indeterminate:进行中动画
 *  - field-input:字段就地编辑输入框
 *  - workspace-processing:切片/推送全屏进度遮罩(复用 PreviewView 风格)
 * ────────────────────────────────────────────────────────── */

/* 品牌区文件名截断 */
.workspace-brand-text {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
}

/* 就绪指示灯 —— 在文件名右侧 */
.workspace-ready-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
  background: #6a7a8c;
  box-shadow: 0 0 0 0 transparent;
  transition: background .15s ease, box-shadow .15s ease;
}
.workspace-ready-dot.ok {
  background: #00AE42;
  box-shadow: 0 0 6px rgba(0, 174, 66, .55);
}
.workspace-ready-dot.warn {
  background: #f59e0b;
  box-shadow: 0 0 6px rgba(245, 158, 11, .45);
}
.workspace-ready-dot.off {
  background: #d03a3a;
  box-shadow: 0 0 6px rgba(208, 58, 58, .45);
}

/* 状态条错误态 */
.status-dot.error {
  background: #d03a3a;
  box-shadow: 0 0 6px rgba(208, 58, 58, .55);
}
.status-text {
  max-width: 320px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 状态条进度条:进行中加 shimmer 动画 */
.status-fill {
  height: 100%;
  background: linear-gradient(90deg, #00AE42 0%, #00c550 100%);
  border-radius: 999px;
  transition: width .15s linear;
}
.status-fill.indeterminate {
  background: linear-gradient(90deg, #00AE42 0%, #6dffae 50%, #00AE42 100%);
  background-size: 200% 100%;
  animation: status-fill-shimmer 1.6s linear infinite;
}
@keyframes status-fill-shimmer {
  from { background-position: 100% 0; }
  to   { background-position: -100% 0; }
}

/* 字段就地编辑输入框 */
.field-input {
  flex: 0 0 auto;
  max-width: 130px;
  min-height: 26px;
  padding: 0 8px;
  background: #ffffff;
  border: 1px solid #00AE42;
  border-radius: 6px;
  color: #1a1e26;
  font-size: 12.5px;
  font-weight: 600;
  font-family: inherit;
  outline: none;
  box-shadow: 0 0 0 2px rgba(0, 174, 66, 0.12);
}
.field-input:focus {
  border-color: #00c550;
}

/* ★ 2026-09-20:ParamsPanel 新增 toggle / select 控件样式 */
.field-toggle { padding: 0 12px; }
.field-toggle.on { background: #00AE42; color: #ffffff; border-color: #00AE42; }
.field-toggle.on:hover { background: #00c550; border-color: #00c550; }
.field-toggle:not(.on):hover { background: #f5f7fa; border-color: #d0d6df; }
.field-select {
  flex: 0 0 auto;
  max-width: 130px;
  min-height: 26px;
  padding: 0 8px;
  border: 1px solid #d0d6df;
  border-radius: 6px;
  background: #ffffff;
  color: #1a1e26;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  outline: none;
}
.field-select:hover { border-color: #00AE42; }
.field-select:focus { border-color: #00c550; box-shadow: 0 0 0 2px rgba(0, 174, 66, 0.12); }
.field-select:disabled { background: #f5f7fa; color: #a0a8b3; cursor: not-allowed; opacity: 0.6; }

/* ★ 2026-09-20 v3:字段行禁用(由 enable_infill 联动填充密度/图案) */
.field-row-disabled .field-label { color: #a0a8b3; }
.field-row-disabled .field-toggle:not(.on),
.field-row-disabled .field-select { opacity: 0.55; pointer-events: none; }

/* ★ 2026-09-20 v4:数值字段三件套 [-][input][+] + 预设下拉 */
.field-stepper {
  display: inline-flex;
  align-items: stretch;
  gap: 3px;
  flex: 0 0 auto;
}
.field-stepper.is-disabled { opacity: 0.55; pointer-events: none; }
.stepper-btn {
  width: 24px;
  height: 26px;
  border: 1px solid #d0d6df;
  border-radius: 5px;
  background: #ffffff;
  color: #1a1e26;
  font-size: 14px;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  transition: background .12s ease, border-color .12s ease;
}
.stepper-btn:hover { background: #f5f7fa; border-color: #00AE42; color: #00AE42; }
.stepper-btn:active { background: #e8f7ee; }
.stepper-btn:disabled { cursor: not-allowed; background: #f5f7fa; color: #a0a8b3; }
.stepper-input {
  width: 64px;
  height: 26px;
  padding: 0 6px;
  border: 1px solid #d0d6df;
  border-radius: 5px;
  background: #ffffff;
  color: #1a1e26;
  font-size: 12.5px;
  font-weight: 600;
  font-family: inherit;
  text-align: center;
  outline: none;
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
}
.stepper-input::-webkit-outer-spin-button,
.stepper-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.stepper-input:hover { border-color: #00AE42; }
.stepper-input:focus { border-color: #00c550; box-shadow: 0 0 0 2px rgba(0, 174, 66, 0.12); }
.stepper-input:disabled { background: #f5f7fa; color: #a0a8b3; cursor: not-allowed; }
.stepper-preset {
  height: 26px;
  padding: 0 4px;
  border: 1px solid #d0d6df;
  border-radius: 5px;
  background: #ffffff;
  color: #475467;
  font-size: 11px;
  cursor: pointer;
  outline: none;
  max-width: 88px;
}
.stepper-preset:hover { border-color: #00AE42; }
.stepper-preset:focus { border-color: #00c550; }
.stepper-preset:disabled { background: #f5f7fa; color: #a0a8b3; cursor: not-allowed; }

/* 切片/推送全屏进度遮罩(WorkspaceView) */
.workspace-processing {
  background: rgba(245, 247, 250, 0.78);
  backdrop-filter: blur(8px);
}
.workspace-processing .processing-card {
  background: #ffffff;
  color: #1a1e26;
  border: 1px solid #e5eaf1;
  box-shadow: 0 24px 60px rgba(10, 20, 35, 0.18);
}
.workspace-processing .processing-icon {
  color: #00AE42;
}
.workspace-processing .progress-fill {
  background: linear-gradient(90deg, #00AE42 0%, #00c550 50%, #00AE42 100%);
  background-size: 200% 100%;
  animation: progress-shimmer 2s linear infinite;
}
.workspace-processing .progress-percent {
  color: #00AE42;
}
@keyframes progress-shimmer {
  from { background-position: 0% 0; }
  to   { background-position: 200% 0; }
}

/* 切片结果块中"已推送"行 */
.field-static-ok {
  color: #00AE42;
  font-weight: 700;
}

/* ★ 2026-09-20 订单链路打通 — 订单卡片样式 */
.order-card {
  border-color: #ffd28a;
  background: linear-gradient(180deg, #fff7e6 0%, #ffffff 65%);
}
.order-card h4 {
  color: #b06a00;
}
.order-card .field-static.mono {
  font-family: 'Consolas', 'Monaco', monospace;
  font-size: 12px;
  color: #1a1e26;
}
.order-status {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
}
.order-status-warn {
  background: #fff1d6;
  color: #b06a00;
  border: 1px solid #ffd28a;
}
.order-status-info {
  background: #e6f3ff;
  color: #0050b3;
  border: 1px solid #91caff;
}
.order-status-ok {
  background: #d9f7be;
  color: #237804;
  border: 1px solid #b7eb8f;
}
.order-status-mute {
  background: #f0f1f5;
  color: #6b7280;
  border: 1px solid #d6d9e0;
}
.order-pay-btn {
  width: 100%;
  margin-top: 10px;
  padding: 9px 12px;
  border: 0;
  border-radius: 10px;
  background: #00AE42;
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  transition: background .15s ease;
}
.order-pay-btn:hover { background: #00963a; }
.order-pay-btn:active { background: #008032; }
.order-hint {
  margin-top: 10px;
  padding: 7px 10px;
  border-radius: 8px;
  background: #f6f8fb;
  font-size: 12px;
  color: #4a5563;
}
.order-hint-ok {
  background: #f6ffed;
  color: #237804;
}
.order-hint-mute {
  background: #f0f1f5;
  color: #6b7280;
}

/* ──────────────────────────────────────────────────────────
 * Round 2 / Round 3 集成样式(2026-09-06)
 *  - .side-printer-select:画布右上打印机下拉
 *  - .canvas-impl-menu / .canvas-impl-menu:ImGui 工具栏弹层
 *  - .device-stage / .device-progress / .device-ring:设备仪表盘
 *  - .dot-mini:打印机列表在线小灯
 * ────────────────────────────────────────────────────────── */

/* 顶部打印机下拉 */
.side-printer-select {
  height: 34px;
  padding: 0 10px;
  background: #ffffff;
  color: #1a1e26;
  border: 1px solid #d0d6df;
  border-radius: 10px;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  outline: none;
  transition: background .15s ease, border-color .15s ease;
  box-shadow: 0 2px 6px rgba(10, 20, 35, 0.04);
}
.side-printer-select:hover { background: #f5f7fa; border-color: #00AE42; }

/* ImGui 工具栏弹层(mirror / rotate 选参数) */
.canvas-impl-menu {
  position: absolute;
  left: 16px;
  z-index: 6;
  background: rgba(255, 255, 255, 0.97);
  border: 1px solid #d0d6df;
  border-radius: 10px;
  padding: 8px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  box-shadow: 0 8px 24px rgba(10, 20, 35, 0.12);
  backdrop-filter: blur(8px);
  min-width: 140px;
}
.canvas-impl-menu.mirror-menu { top: 64px; }
.canvas-impl-menu.rotate-menu { top: 64px; min-width: 200px; }
.canvas-impl-menu button {
  padding: 6px 12px;
  background: #ffffff;
  border: 1px solid #e5eaf1;
  border-radius: 6px;
  color: #1a1e26;
  font-size: 12px;
  cursor: pointer;
  text-align: left;
  transition: background .15s ease, border-color .15s ease;
}
.canvas-impl-menu button:hover {
  background: #f5f7fa;
  border-color: #00AE42;
  color: #00AE42;
}
.impl-menu-row {
  display: flex;
  align-items: center;
  gap: 4px;
}
.impl-menu-row .impl-menu-axis {
  width: 18px;
  font-weight: 700;
  font-size: 11px;
  color: #6a7a8c;
  text-align: center;
}
.impl-menu-row button { flex: 1; text-align: center; }

/* Device tab 中央仪表盘 */
.device-stage {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  text-align: center;
  padding: 32px;
  color: #1a1e26;
  background: #ffffff;
}
.device-hero-icon {
  width: 76px;
  height: 76px;
  margin: 0 auto 16px;
}
.device-name {
  margin: 0 0 4px;
  font-size: 22px;
  font-weight: 700;
  color: #1a1e26;
}
.device-task {
  color: #6a7a8c;
  margin: 0 0 24px;
  font-size: 13px;
}
.device-progress {
  position: relative;
  width: 160px;
  height: 160px;
  margin-bottom: 12px;
}
.device-ring {
  display: block;
}
.device-ring circle:first-of-type {
  stroke: #e5eaf1;
}
.device-progress-text {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.device-progress-text strong {
  font-size: 36px;
  font-weight: 700;
  color: #1a1e26;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}
.device-progress-text small {
  font-size: 11px;
  color: #6a7a8c;
  margin-top: 4px;
}
.device-state {
  font-size: 13px;
  font-weight: 600;
  padding: 4px 14px;
  border-radius: 999px;
  background: #f5f7fa;
  color: #475467;
  border: 1px solid #e5eaf1;
  margin-bottom: 16px;
}
.device-state.state-running   { background: #e7f6ee; color: #15803d; border-color: #bbf7d0; }
.device-state.state-paused    { background: #fff7e6; color: #b45309; border-color: #ffd591; }
.device-state.state-failed,
.device-state.state-error     { background: #fde8e8; color: #b91c1c; border-color: #fca5a5; }
.device-state.state-finish    { background: #e7f0ff; color: #1769ff; border-color: #b6cfff; }
.device-error {
  color: #b91c1c;
  font-size: 12px;
  margin: 0 0 12px;
  max-width: 360px;
}

/* 打印机列表小灯 */
.dot-mini {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-right: 6px;
  background: #c5ced9;
  vertical-align: middle;
}
.dot-mini.dot-online  { background: #00AE42; box-shadow: 0 0 4px rgba(0,174,66,.5); }
.dot-mini.dot-idle    { background: #00AE42; box-shadow: 0 0 4px rgba(0,174,66,.5); }
.dot-mini.dot-offline { background: #d03a3a; }

/* ──────────────────────────────────────────────────────────
 * Round 4 工作台项目持久化样式(2026-09-06)
 *  - .workspace-meta:侧栏画布元信息 + 保存按钮区
 *  - .workspace-mesh-badge:模型计数徽章
 *  - .workspace-save-btn / .workspace-load-btn:保存/恢复按钮
 * ────────────────────────────────────────────────────────── */

.workspace-meta {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 0 4px 14px;
  border-bottom: 1px solid #e5eaf1;
  margin-bottom: 10px;
}
.workspace-mesh-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 8px;
  background: #e9f8f0;
  border: 1px solid #c5ead8;
  border-radius: 6px;
  font-size: 11px;
  color: #0d815f;
  font-weight: 600;
}
.workspace-mesh-selected {
  color: #b45309;
  margin-left: 4px;
  font-weight: 700;
}
.workspace-save-btn,
.workspace-load-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  padding: 6px 10px;
  background: #ffffff;
  border: 1px solid #d0d6df;
  border-radius: 6px;
  color: #1a1e26;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.workspace-save-btn:hover,
.workspace-load-btn:hover {
  background: #f5f7fa;
  border-color: #00AE42;
  color: #00AE42;
}
.workspace-save-btn svg,
.workspace-load-btn svg { color: #00AE42; }
.workspace-saved-at {
  font-size: 10px;
  color: #6a7a8c;
  text-align: center;
}
