:root{--white:#fff;--ink:#0a0d12;--ink-2:#181d27;--lime:#88c80c;--lime-bright:#a2ef0c;--lime-hover:#7ab30a;--blue:#1672e6;--blue-soft:#eaf3ff;--muted:#535862;--muted-2:#717680;--border:#e9eaeb;--soft:#f7f7f7;--soft-2:#f1f2f3;--max:1260px;--radius:26px}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:86px}body{margin:0;background:var(--white);color:var(--ink);font:16px/1.55 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}button,select,input,textarea{font:inherit}button{cursor:pointer}.preview-strip{height:30px;display:flex;justify-content:center;align-items:center;gap:13px;background:#f7f7f7;color:#717680;border-bottom:1px solid #f0f0f0;font-size:10px}.preview-strip a{color:#6a9d0c;font-weight:750}.topbar{height:70px;max-width:1440px;padding:0 4.5%;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:22px;background:#ffffffed;position:sticky;top:0;z-index:20;backdrop-filter:blur(14px);border-bottom:1px solid #f1f1f2}.brand{display:flex;align-items:center;gap:10px;min-width:180px}.brand-mark{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--lime);color:white;font-weight:900;box-shadow:0 5px 14px #88c80c36}.brand b{display:block;font-size:14px;font-weight:800;letter-spacing:-.02em}.brand small{display:block;font-size:9px;color:#7a7d83;margin-top:1px}.topbar nav{display:flex;justify-content:center;align-items:center;gap:clamp(12px,1.9vw,26px);white-space:nowrap}.topbar nav a{font-size:11px;color:#3c4149;font-weight:650}.topbar nav a:hover{color:var(--blue)}.tools{display:flex;align-items:center;gap:8px}.tools select{padding:9px 10px;border:1px solid #e4e5e7;background:#fff;border-radius:11px;color:#333943;font-size:10px}.btn{min-height:43px;padding:11px 20px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid transparent;border-radius:14px;font-size:12px;font-weight:750;transition:transform .18s ease,box-shadow .18s ease,background .18s ease}.btn:hover{transform:translateY(-2px)}.btn-lime{background:var(--lime);color:#fff;box-shadow:0 7px 20px #88c80c2d}.btn-lime:hover{background:var(--lime-hover);color:white;box-shadow:0 10px 24px #88c80c42}.btn-outline{background:#fff;color:#414651;border-color:#d5d7da}.btn-outline:hover{border-color:#aeb2b8;color:var(--ink)}.hero{min-height:870px;padding:100px 25px 0;position:relative;text-align:center;overflow:hidden;background:#fff}.hero-eyebrow,.eyebrow{font-size:10px;letter-spacing:.15em;font-weight:800;color:#737780;text-transform:uppercase;margin:0 0 14px}.hero h1{max-width:1050px;margin:0 auto;color:#0a0d12;font-size:clamp(54px,7.1vw,96px);line-height:.98;font-weight:850;letter-spacing:-.065em;text-transform:uppercase}.hero h1 span{color:#3f444e}.hero-sub{max-width:650px;margin:22px auto 0;font-size:clamp(16px,1.65vw,21px);line-height:1.45;color:#535862}.hero-buttons{display:flex;justify-content:center;gap:12px;margin-top:29px}.hero-buttons .btn{min-height:58px;padding:0 31px;border-radius:21px;font-size:15px;font-weight:650}.float-tile{position:absolute;width:82px;height:82px;border:1px solid #eff0f1;border-radius:24px;background:linear-gradient(145deg,#fff,#fafafa);box-shadow:0 6px 25px #1018280b;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#1d2939;transform:rotate(-5deg);animation:float 5s ease-in-out infinite}.float-tile b{font-size:34px;line-height:1;color:var(--blue)}.float-tile small{font-size:7px;color:#667085;font-weight:750;letter-spacing:.06em}.ft1{left:17%;top:70px}.ft2{right:18%;top:105px;animation-delay:.7s}.ft3{left:7%;top:390px;transform:rotate(6deg);animation-delay:1.2s}.ft4{right:8%;top:360px;transform:rotate(-7deg);animation-delay:1.7s}.hero-cloud{position:absolute;width:350px;height:350px;border-radius:50%;filter:blur(80px);opacity:.13;pointer-events:none}.hero-cloud.c1{background:#c5f282;left:-230px;top:200px}.hero-cloud.c2{background:#b9d7ff;right:-230px;top:220px}@keyframes float{0%,100%{translate:0 0}50%{translate:0 -9px}}.metrics{position:absolute;left:50%;bottom:0;translate:-50% 0;width:min(1240px,calc(100% - 80px));min-height:130px;padding:25px 20px;display:grid;grid-template-columns:repeat(4,1fr);background:linear-gradient(110deg,#fafafa,#f0f0f0);border:1px solid #f0f0f0;border-radius:38px;box-shadow:0 10px 35px #10182808}.metric{display:flex;flex-direction:column;align-items:center;justify-content:center;border-right:1px solid #dfe0e2;padding:0 12px}.metric:last-child{border:0}.metric b{font-size:clamp(30px,4vw,52px);line-height:1.1;letter-spacing:-.045em;color:#171a20}.metric span{color:#535862;font-size:11px;margin-top:5px}.dark-stage{margin-top:36px;padding:92px 28px 82px;border-radius:36px;background:radial-gradient(ellipse at 50% 15%,#22262f,#181d27 60%,#13161b);color:#fff;text-align:center;overflow:hidden}.section-title{text-align:center;max-width:760px;margin:0 auto 35px}.section-title .eyebrow{color:var(--lime)}.section-title h1,.section-title h2{font-size:clamp(30px,4vw,48px);line-height:1.12;letter-spacing:-.045em;margin:0;color:var(--ink);font-weight:780}.section-title p:not(.eyebrow){font-size:14px;line-height:1.5;color:#667085;margin:12px auto 0;max-width:650px}.dark-stage .section-title{margin-bottom:43px}.dark-stage .section-title h2{color:#fff}.dark-stage .section-title p:not(.eyebrow){color:#b5bbc5}.dashboard{max-width:1080px;margin:0 auto;border:5px solid #414651;border-radius:19px;background:#f8f9fa;color:#1d2939;text-align:left;overflow:hidden;box-shadow:0 25px 90px #0007}.dash-top{height:55px;padding:0 20px;display:flex;align-items:center;gap:15px;background:#fff;border-bottom:1px solid #e9eaeb}.dash-top>span,.window-bar>span{display:flex;gap:5px}.dash-top i,.window-bar i{width:9px;height:9px;border-radius:50%;background:#d0d5dd}.dash-top i:first-child,.window-bar i:first-child{background:#f97066}.dash-top i:nth-child(2),.window-bar i:nth-child(2){background:#fdb022}.dash-top i:nth-child(3),.window-bar i:nth-child(3){background:#12b76a}.dash-top b{font-size:11px;color:#344054}.dash-top em{font-style:normal;margin-left:auto;color:#667085;font-size:9px;font-weight:750}.dash-body{min-height:355px;display:grid;grid-template-columns:65px 1fr;background:#f7f8fa}.dash-side{display:flex;flex-direction:column;align-items:center;gap:19px;padding:15px 9px;background:#fff;border-right:1px solid #e9eaeb;color:#98a2b3}.dash-logo{width:31px;height:31px;border-radius:10px;display:grid;place-items:center;background:var(--lime);color:white;font-size:13px;font-weight:850;margin-bottom:12px}.dash-side>span{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:15px}.dash-side .dash-active{background:#f1f8e6;color:#6fa30c}.dash-main{padding:26px 28px;position:relative;overflow:hidden}.dash-heading{display:flex;justify-content:space-between;align-items:center}.dash-heading small,.dash-cards small{font-size:9px;color:#667085}.dash-heading h3{margin:3px 0 0;font-size:19px;color:#1d2939}.dash-state{font-size:9px;font-weight:750;padding:7px 10px;border-radius:99px;background:#fef0c7;color:#93370d}.dash-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:20px}.dash-cards>div{padding:13px 14px;background:white;border:1px solid #e9eaeb;border-radius:11px;display:grid;gap:7px}.dash-cards b{font-size:11px;color:#344054}.dash-progress{display:flex;align-items:center;gap:10px;margin-top:22px;color:#667085;font-size:9px}.dash-progress span{white-space:nowrap}.dash-progress i{height:1px;background:#d0d5dd;flex:1}.dash-tooth{position:relative;min-height:155px;margin-top:22px;border-radius:13px;background:linear-gradient(120deg,#eaf3ff,#f8fbff);display:grid;place-items:center;overflow:hidden}.dash-tooth>span{font-size:90px;color:#1672e6;filter:drop-shadow(0 8px 10px #1672e633)}.dash-tooth .mesh{position:absolute;width:140px;height:110px;border:1px solid #1672e688;border-radius:48% 48% 40% 40%;transform:rotate(-10deg);background:repeating-linear-gradient(0deg,transparent 0 12px,#1672e62b 13px),repeating-linear-gradient(90deg,transparent 0 12px,#1672e62b 13px)}.dash-tooth small{position:absolute;right:14px;bottom:10px;color:#667085;font-size:8px;letter-spacing:.1em}.dash-foot{padding:10px 15px;text-align:center;background:#f1f2f3;color:#667085;font-size:9px}.section{padding:92px 28px}.feature-section{max-width:1370px;margin:auto}.feature-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.feature-card{min-height:320px;padding:25px 28px 22px;text-align:center;border-radius:30px;background:#fafafa;border:1px solid #f0f0f0;transition:transform .22s ease,box-shadow .22s ease}.feature-card:hover{transform:translateY(-4px);box-shadow:0 20px 45px #10182810}.feature-card h3{font-size:17px;margin:8px 0 4px;color:#252932}.feature-card p{max-width:390px;margin:0 auto;color:#717680;font-size:11px;line-height:1.45}.feature-art{height:175px;position:relative;display:grid;place-items:center;overflow:hidden}.feature-art>span{width:120px;height:92px;border-radius:22px;display:grid;place-items:center;background:#fff;border:1px solid #e9eaeb;box-shadow:0 15px 30px #10182815;font-size:45px;color:var(--lime);transform:rotate(-8deg);z-index:1}.feature-art>i{position:absolute;width:160px;height:85px;border:1px solid #b2f72a;border-radius:50%;transform:rotate(-17deg);box-shadow:0 0 25px #a2ef0c44}.art-1>span{width:172px;height:104px;color:#88c80c;background:linear-gradient(145deg,#fff,#f8ffe9)}.art-1>i{width:180px;height:72px}.art-2>span{font-size:34px;color:#1672e6}.art-2>i{width:200px;height:120px;border-color:#d6e4f3;transform:rotate(33deg)}.art-3>span{color:#344054;font-size:38px}.art-3>i{width:220px;height:75px;border-color:#1672e6}.art-4>span{width:155px;height:105px;color:#88c80c;font-size:50px}.art-4>i{width:190px;height:123px;border-color:#d0d5dd;transform:rotate(-25deg)}.audience-section{padding:72px 28px 86px;background:#fff}.audience-section .section-title{margin-bottom:25px}.audience-tabs{max-width:1120px;margin:0 auto 20px;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:5px;border-radius:15px;background:#f2f3f4}.aud-tab{border:0;border-radius:12px;background:transparent;min-height:62px;display:flex;align-items:center;justify-content:center;gap:11px;color:#667085;padding:8px 12px;text-align:left;transition:.15s}.aud-tab span{width:29px;height:29px;border-radius:8px;background:#fff;display:grid;place-items:center;color:#475467}.aud-tab b{font-size:11px;font-weight:700}.aud-tab.active{background:#fff;color:#1d2939;box-shadow:0 3px 12px #10182814}.aud-tab.active span{background:#eff8d9;color:#6fa30c}.audience-panel{max-width:1120px;min-height:230px;margin:auto;display:grid;grid-template-columns:.55fr 1fr;align-items:center;gap:30px;padding:35px 45px;border:1px solid #eaecf0;border-radius:22px;background:linear-gradient(110deg,#fff,#fafafa)}.audience-icon{width:165px;height:145px;border:1px solid #eaecf0;border-radius:25px;background:radial-gradient(circle at 50% 45%,#f0f8df,#fff 70%);display:grid;place-items:center;color:#88c80c;font-size:62px;font-weight:800;box-shadow:0 12px 28px #10182809}.audience-panel h3{font-size:22px;margin:0 0 8px;letter-spacing:-.025em}.audience-panel p{max-width:600px;color:#667085;font-size:13px;margin:0}.text-link{display:inline-block;color:#1672e6;font-size:11px;font-weight:750;margin-top:13px}.file-section{max-width:1260px;margin:0 auto;display:grid;grid-template-columns:.83fr 1.17fr;align-items:center;gap:55px;padding-top:85px;padding-bottom:95px}.file-copy h2,.business-copy h2,.price-heading h2,.quote-copy h2{font-size:clamp(31px,4vw,47px);line-height:1.12;letter-spacing:-.045em;margin:0;color:#101828}.file-copy>p:not(.eyebrow),.business-copy>p:not(.eyebrow),.price-heading>div>p:not(.eyebrow),.quote-copy>p:not(.eyebrow){color:#667085;font-size:13px;margin:14px 0}.file-copy ul{list-style:none;padding:0;margin:23px 0}.file-copy li{padding:7px 0;font-size:11px;color:#475467}.file-copy li:before{content:'✓';display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#ecfdf3;color:#079455;margin-right:9px;font-weight:800}.file-copy>small{font-size:9px;color:#8a9099}.file-window{border:1px solid #252b37;border-radius:19px;overflow:hidden;background:#181d27;color:white;box-shadow:0 25px 60px #10182825}.window-bar{height:48px;padding:0 15px;background:#22262f;border-bottom:1px solid #373a41;display:flex;align-items:center;gap:14px}.window-bar b{font-size:9px;color:#d0d5dd;letter-spacing:.07em}.window-bar button{margin-left:auto;color:#d0d5dd;background:#373a41;border:0;padding:6px 9px;border-radius:7px;font-size:8px}.file-columns{display:grid;grid-template-columns:1fr 35px 1fr;gap:9px;padding:20px}.file-columns article>label{display:block;color:#aeb4bf;font-size:9px;font-weight:750;margin:0 0 11px}.file-row{height:49px;padding:0 9px;margin-bottom:8px;border:1px solid #373a41;background:#22262f;border-radius:8px;display:flex;align-items:center;gap:7px;color:#a2ef0c;font-size:12px}.file-row span{font-size:8px;color:#e4e7ec;line-height:1.3;flex:1}.file-row b{color:#94979c;font-size:8px}.file-row.output{border-color:#344b1b;background:#20281a;color:#a2ef0c}.arrow-flow{display:grid;place-items:center;color:#a2ef0c;font-size:23px}.business-section{padding:88px 28px;background:#fafafa;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2}.business-wrap{max-width:1190px;margin:auto;display:grid;grid-template-columns:1fr .85fr;gap:50px;align-items:center}.business-list{margin-top:23px}.business-list article{display:grid;grid-template-columns:34px 1fr;gap:12px;padding:11px 0;border-bottom:1px solid #e9eaeb}.business-list article:last-child{border-bottom:0}.business-list article>span{width:29px;height:29px;border-radius:9px;background:#f1f8e3;display:grid;place-items:center;color:#6fa30c;font-size:10px;font-weight:800}.business-list h3{font-size:12px;margin:1px 0 3px}.business-list p{font-size:10px;color:#667085;margin:0}.business-card{padding:22px;border-radius:24px;background:white;border:1px solid #eaecf0;box-shadow:0 15px 45px #1018280c}.team-visual{height:190px;border-radius:17px;background:radial-gradient(circle at 50% 50%,#eafaCB,#f4f8e8 45%,#f8fafc 75%);display:flex;justify-content:center;align-items:center;gap:12px;position:relative;overflow:hidden}.team-visual:before,.team-visual:after{content:"";position:absolute;width:170px;height:120px;border:1px solid #d0e6a9;border-radius:50%;transform:rotate(28deg)}.team-visual:after{transform:rotate(-28deg)}.team-visual>span{z-index:1;width:66px;height:66px;border-radius:22px;background:#88c80c;color:white;display:grid;place-items:center;font-size:28px;font-weight:800;box-shadow:0 8px 20px #88c80c44}.team-visual i{z-index:1;width:34px;height:34px;border-radius:12px;background:white;border:1px solid #dfe7d3;box-shadow:0 4px 12px #34405415}.business-card>p{font-size:10px;color:#667085;line-height:1.5;margin:15px 0}.business-card .btn{min-height:38px;padding:9px 14px;font-size:10px}.cases-section{max-width:1320px;margin:auto}.case-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.case-card{overflow:hidden;border:1px solid #e9eaeb;border-radius:22px;background:#fff;transition:transform .2s ease,box-shadow .2s ease}.case-card:hover{transform:translateY(-4px);box-shadow:0 18px 45px #10182812}.case-art{height:220px;position:relative;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 74%,#e7f5cf,#f8fafc 67%);overflow:hidden}.case-art:before{content:"";position:absolute;width:140px;height:120px;border:1px solid #a2ef0c;border-radius:45% 45% 35% 35%;transform:rotate(-12deg);box-shadow:0 8px 35px #88c80c2b}.case-art>span{font-size:90px;z-index:1;color:#1672e6;text-shadow:0 9px 22px #1672e633}.case-art b{position:absolute;left:12px;top:12px;padding:6px 9px;background:#ffffffdf;border:1px solid #eaecf0;border-radius:99px;color:#667085;font-size:8px;letter-spacing:.06em}.case-art small{position:absolute;right:12px;bottom:11px;color:#667085;font-size:8px}.case-art-2{background:radial-gradient(ellipse at 50% 74%,#dbeaff,#fafafa 67%)}.case-art-2:before{border-color:#9dc3f4}.case-art-3{background:radial-gradient(ellipse at 50% 74%,#f0eaff,#fafafa 67%)}.case-art-3:before{border-color:#c3aaf5}.case-copy{padding:16px}.case-copy h3{margin:0 0 6px;font-size:14px}.case-copy p{font-size:10px;color:#667085;margin:0}.case-copy .text-link{margin-top:12px}.case-bottom{margin-top:18px;padding:18px 20px;background:#fafafa;border:1px solid #efefef;border-radius:16px;display:flex;align-items:center;gap:17px}.case-bottom b{font-size:12px;white-space:nowrap}.case-bottom span{font-size:10px;color:#667085;flex:1}.case-bottom .btn{min-height:37px;padding:8px 13px;font-size:10px}.price-section{max-width:1260px;margin:auto}.price-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:27px}.price-heading>div:first-child{max-width:760px}.price-stamp{width:103px;height:103px;display:grid;place-items:center;border-radius:50%;background:#f4f9e8;color:#6fa30c;font-size:43px;font-weight:800;position:relative}.price-stamp small{position:absolute;right:-95px;bottom:-14px;color:#98a2b3;font-size:7px;letter-spacing:.1em}.price-layout{display:grid;grid-template-columns:1.25fr .75fr;gap:18px}.price-table{border:1px solid #e9eaeb;border-radius:17px;overflow:hidden;background:#fff;box-shadow:0 8px 25px #10182808}.price-row{display:grid;grid-template-columns:1.05fr 1.2fr .85fr;gap:12px;align-items:center;padding:16px 18px;border-bottom:1px solid #eaecf0;font-size:10px;color:#475467}.price-row:last-child{border:0}.price-row.header{background:#f8f8f8;color:#344054;font-size:9px;font-weight:800}.price-row:not(.header) b{color:#6fa30c}.pay-card{padding:21px;border-radius:17px;background:#fafafa;border:1px solid #e9eaeb}.pay-icon{width:35px;height:35px;display:grid;place-items:center;border-radius:11px;background:#eef8da;color:#6fa30c;font-weight:900}.pay-card h3{font-size:14px;margin:12px 0 5px}.pay-card>p{font-size:9px;color:#667085;line-height:1.45;margin:0 0 13px}.pay-line{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px solid #e4e7ec;font-size:8px}.pay-line span{color:#667085}.pay-line b{text-align:right;color:#344054;max-width:62%}.faq-section{padding:78px 24px 90px;background:#fafafa}.faq-section .section-title{margin-bottom:24px}.faq-list{max-width:850px;margin:auto;border-top:1px solid #e4e7ec}.faq-list details{border-bottom:1px solid #e4e7ec;padding:0 3px}.faq-list summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:17px 2px;font-size:12px;font-weight:700;color:#252932}.faq-list summary::-webkit-details-marker{display:none}.faq-list summary span{font-size:19px;color:#98a2b3;transition:transform .15s}.faq-list details[open] summary span{transform:rotate(45deg);color:#88c80c}.faq-list details p{max-width:740px;margin:0;padding:0 28px 17px 2px;font-size:10px;color:#667085}.quote-section{max-width:1200px;margin:0 auto;padding:88px 28px;display:grid;grid-template-columns:.9fr 1.1fr;gap:60px;align-items:center}.quote-copy .btn{margin-top:12px}.quote-section form{padding:24px;border:1px solid #e9eaeb;border-radius:22px;background:#fafafa;box-shadow:0 12px 34px #1018280b}.form-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:17px;font-size:13px}.form-head span{font-size:8px;color:#6fa30c;background:#f1f8e3;padding:5px 8px;border-radius:99px}.quote-section form label{display:block;margin:10px 0;font-size:9px;color:#475467;font-weight:700}.quote-section input,.quote-section textarea{display:block;width:100%;margin-top:5px;padding:10px 11px;border:1px solid #d5d7da;background:#fff;border-radius:9px;font-size:10px;color:#344054}.quote-section textarea{height:65px;resize:none}.quote-section form button{width:100%;margin-top:5px}.quote-section form button:disabled{opacity:.7}.quote-section form>small{display:block;margin-top:8px;text-align:center;color:#7a8089;font-size:8px}.closing-strip{padding:12px 5%;display:flex;justify-content:space-between;background:#f7f7f7;color:#717680;font-size:8px}.closing-strip span:last-child{letter-spacing:.1em}.footer-inner{max-width:1320px;margin:auto;padding:31px 30px;display:flex;align-items:center;gap:28px}.footer-inner p{flex:1;color:#717680;font-size:9px}.footer-inner>a:last-child{font-size:9px;color:#667085}.footer-inner .brand{min-width:170px}@media(max-width:1050px){.topbar{gap:12px}.brand{min-width:135px}.topbar nav{gap:10px}.topbar nav a{font-size:9px}.hero{min-height:790px;padding-top:95px}.ft1{left:10%}.ft2{right:10%}.ft3{left:4%}.ft4{right:4%}.metrics{width:calc(100% - 45px)}.file-section{gap:30px}.business-wrap{gap:28px}}@media(max-width:1393px){.price-stamp small{display:none}}
@media(max-width:760px){html{scroll-padding-top:100px}.topbar{height:auto;min-height:65px;padding:9px 16px;flex-wrap:wrap}.topbar nav{order:3;width:100%;overflow-x:auto;justify-content:flex-start;padding:7px 0 3px}.topbar nav a{font-size:10px}.brand{min-width:0}.tools .btn{display:none}.hero{min-height:765px;padding:81px 17px 0}.hero h1{font-size:clamp(43px,10vw,67px)}.hero-sub{font-size:15px;max-width:540px}.float-tile{width:63px;height:63px;border-radius:18px}.float-tile b{font-size:25px}.float-tile small{font-size:6px}.ft1{left:7%;top:34px}.ft2{right:7%;top:48px}.ft3{left:3%;top:330px}.ft4{right:4%;top:318px}.metrics{width:calc(100% - 26px);min-height:108px;padding:14px 8px;border-radius:25px}.metric{padding:0 5px}.metric b{font-size:clamp(22px,6vw,34px)}.metric span{font-size:8px}.dark-stage{padding:65px 16px 56px;border-radius:27px}.dash-body{grid-template-columns:43px 1fr;min-height:300px}.dash-main{padding:18px 13px}.dash-side{padding:12px 5px;gap:15px}.dash-cards{gap:5px}.dash-cards>div{padding:9px 6px}.dash-cards b{font-size:8px}.dash-cards small{font-size:7px}.dash-progress{gap:5px;font-size:7px}.section{padding:65px 17px}.feature-grid{gap:10px}.feature-card{padding:16px 12px;min-height:280px;border-radius:22px}.feature-art{height:140px}.audience-section{padding:62px 15px}.audience-tabs{grid-template-columns:1fr;gap:3px}.aud-tab{min-height:47px;justify-content:flex-start}.audience-panel{grid-template-columns:1fr;gap:18px;padding:22px}.audience-icon{width:100%;height:90px}.file-section{grid-template-columns:1fr;gap:28px}.business-section{padding:64px 17px}.business-wrap{grid-template-columns:1fr}.case-grid{grid-template-columns:1fr 1fr}.case-art{height:160px}.case-art>span{font-size:72px}.case-bottom{flex-wrap:wrap}.case-bottom span{flex-basis:100%;order:3}.price-layout{grid-template-columns:1fr}.price-heading{align-items:start;gap:12px}.price-stamp{width:75px;height:75px;font-size:32px;flex:0 0 75px}.faq-section{padding:62px 17px}.quote-section{grid-template-columns:1fr;gap:28px;padding:65px 17px}.footer-inner{padding:24px 18px;flex-wrap:wrap;gap:10px}.footer-inner p{flex-basis:100%;order:3}}@media(max-width:460px){.hero{min-height:720px;padding-top:79px}.hero h1{font-size:41px}.hero-buttons .btn{padding:0 18px;min-height:50px;font-size:12px}.metrics{bottom:0;grid-template-columns:1fr 1fr;row-gap:10px;min-height:145px}.metric:nth-child(2){border:0}.metric b{font-size:27px}.metric span{font-size:8px}.ft3{top:303px}.ft4{top:294px}.dash-top{padding:0 8px;gap:7px}.dash-top b{font-size:8px}.dash-top em{font-size:7px}.dash-progress{flex-wrap:wrap}.dash-progress i{min-width:15px}.feature-grid{grid-template-columns:1fr}.feature-card{min-height:255px}.feature-art{height:125px}.case-grid{grid-template-columns:1fr}.case-art{height:195px}.price-row{grid-template-columns:1fr .95fr .75fr;gap:5px;padding:12px 9px;font-size:8px}.price-row.header{font-size:7px}.file-columns{grid-template-columns:1fr 24px 1fr;padding:12px 9px;gap:5px}.file-row{padding:0 5px;gap:4px}.file-row span{font-size:7px}.closing-strip{gap:12px}.closing-strip span:first-child{max-width:75%}}

@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* 装饰性轻微浮动（@keyframes float，振幅 9px）在“减少动态”下豁免——它不属视差/缩放类位移 */
@media(prefers-reduced-motion:reduce){.float-tile{animation-name:float!important;animation-duration:5s!important;animation-timing-function:ease-in-out!important;animation-iteration-count:infinite!important}}
/* 首屏标语行：独立一行、略小字号（新增规则，不改 .hero h1 任何既有取值）*/
.hero h1 span{display:block;font-size:.44em;line-height:1.2;letter-spacing:-.025em;margin-top:.2em}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.dark-stage :focus-visible{outline-color:var(--lime-bright)}

/* B8 价格区折扣化（阶段①：акция/обычная цена 句式）—— 全部为新增规则，未改任何既有取值 */
.promo-pill{display:inline-block;margin:12px 0 0;padding:6px 11px;border-radius:99px;background:#f1f8e3;color:#6fa30c;font-size:9px;font-weight:800;letter-spacing:.06em}
.fee-cell{display:grid;gap:1px;justify-items:start}
.fee-now{font-size:15px}
.old-price{color:#98a2b3;text-decoration:line-through;font-size:9px;font-weight:600}
.vygoda{color:#6fa30c;font-size:9px;font-weight:750}
.promo-why{max-width:1260px;margin:18px auto 0;padding:16px 20px;border:1px solid #e9eaeb;border-radius:16px;background:#fafafa}
.promo-why>b{font-size:12px;color:#252932}
.promo-why p{margin:7px 0 0;font-size:10px;line-height:1.55;color:#667085}
.promo-why p.promo-nosum{color:#6fa30c;font-weight:700}
@media(max-width:760px){.promo-why{padding:13px 14px;margin-top:14px}}
@media(max-width:460px){.fee-now{font-size:12px}.old-price,.vygoda{font-size:8px}}

/* ═══════════════════════════════════════════════════════════════════════
   B11 · 排版体系（2026-10-16 Sam 批准执行）
   本块 = 三段：① 字体（自托管 Inter）② 首屏 A 组 ③ 全站协调 B 组
   ⚠️ 本块全部是“追加覆盖”，上方既有规则一字未动；
      删掉本块即完全回到改前状态（回退命令见 docs/网站更新待办.md）。
   依据：CDP 实测本机未安装 Inter → 全站实际渲染为 PingFang + SF 混排。
   ═══════════════════════════════════════════════════════════════════════ */

/* ① 字体：Inter 自托管（西文/俄文子集，SIL OFL-1.1），中文走系统黑体 */
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("assets/fonts/inter-cyrillic.woff2") format("woff2");unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("assets/fonts/inter-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:"Inter";font-style:normal;font-weight:100 900;font-display:swap;src:url("assets/fonts/inter-latin.woff2") format("woff2");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
body{font-family:Inter,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}

/* ② 首屏（A 组：字距/行高/字重/小标） */
.hero-eyebrow{font-size:12px}
.hero h1 span{font-size:44px;font-weight:700;line-height:1.18;letter-spacing:-.005em;margin-top:.24em}
.hero .hero-sub{font-size:22px;letter-spacing:.006em;color:#535862}
:lang(zh) .hero h1{letter-spacing:-.018em;line-height:1.06}
:lang(zh) .hero .hero-sub{letter-spacing:.02em}
/* 俄文标语用全大写西文，比中文长：单列一档字号以保持一行（实测 Inter 下 44px 会折成两行）
   ⚠️ 必须限定在桌面档内—— `:lang(ru)` 的特异性高于媒体查询里的 `.hero h1 span`，
      若不限定会把手机档的 19px 覆盖掉（本块第一版就踩了这个坑，实测 390px 变成 40px 折 3 行） */
@media(min-width:761px){:lang(ru) .hero h1 span{font-size:40px}}

/* ③ 全站协调（B 组：小标字号 + 灰阶收敛） */
.eyebrow{font-size:11px}
.section-title p:not(.eyebrow){color:#535862}

@media(max-width:760px){
  .hero-eyebrow{font-size:11px}
  .hero h1 span{font-size:19px;margin-top:.22em}
  .hero .hero-sub{font-size:16px}
}


/* ═══════════════════════════════════════════════════════════════════════
   B12 · 首屏背景图（2026-10-16 Sam 提供素材 `极简牙科数字化设计背景.png`）
   —— 追加覆盖，上方既有规则一字未动；删掉本块即回到纯白首屏。
   —— B14（2026-10-16 14:1x）：Sam 提供新版横幅「高科技牙科CAD智能设计横幅」（原 PNG 2103×748，比例 2.811）。
        构图更贴"CAD 智能设计"（两侧带 UI 面板：Crown/Bridge/Implant/Denture/Full Arch 与 STL/PLY/OBJ/3Shape/exocad）。
        ⚠️ 两个必须处理的点（实测）：
          ① **不能直接 cover**：图 2.811:1 与首屏 1.655:1 不匹配 → cover 会放大 2.33 倍并**横向裁掉 41%**（两侧 UI 面板全没了）。
             ⇒ 解法＝**预补白**：先用图自身边缘色 (#F7FCFA) 把画布补成 2880×1740（= 首屏 1440×870 @2x），再 cover → 完整显示、零裁切。
          ② 分辨率偏低（2103 宽 → 需放大 1.37 倍才算满 Retina）⇒ 用 Lanczos 放大，并把 PNG 转 WebP q85。
        仍留优化路径：若能导出 **≥2880 宽** 的同款图，可再提升一档。
   —— 上一版素材：由 Sam 提供（原始 PNG 1536×1024，存于 Downloads/_收件箱）。
   —— B13（2026-10-16 14:0x，Sam 反馈"清晰度差好多"）三处一起治：
        ① 【主因】Retina 屏下浏览器把 1536px 的图放大 1.87 倍（1440 CSS × DPR2 = 2880 物理像素）
           → 用 Lanczos 预放大到 3072×2048 再导出，让浏览器"缩小"而不是"放大"
        ② JPEG 对细网格线/颗粒最不友好 → 改 WebP q85（同为 1.5 比例下 157KB，仅比原 JPEG 大 46KB 而像素多 4 倍）
        ③ 原 0.30 白色蒙版压低对比度、视觉发灰 → 实测该图正中间本就是近白（背景亮度 0.98+），
           **蒙版对可读性几乎无贡献**（去蒙版后：主标题 18.8:1、信赖行 6.8:1，均远超标准）→ 去掉
   —— 注：小标 eyebrow 实测 4.40:1，略低于正文 4.5 标准，但这是**灰字本身**造成的（与蒙版无关），
        三版实测值 4.41/4.40/4.40 几乎相同；若日后要提，应改 eyebrow 颜色而非加蒙版。
   —— ≤760px：不显示背景图 —— 实测两种做法都难看：
        cover 会把 1.5 比例图裁成中间一条（左右两颗牙全丢，只剩蓝色碎片），
        contain 又缩成 390×260 的小条并压到标题上。手机保持纯白最干净。
   ═══════════════════════════════════════════════════════════════════════ */
.hero{background:#fff url("assets/hero-bg.webp") center center/cover no-repeat}
@media(max-width:760px){.hero{background:#fff}}

/* ═══════════════════════════════════════════════════════════════════════
   B15 · 浮动块收拢 + 小字可读性提升（2026-10-16 Sam 指示）
   ① 把下方两块（STL / 3D）向中心线收拢，避开背景图牙列
   ② 全站"给人读的小字"整体 +2px（下限 10px）
   ⚠️ 追加覆盖，上方既有规则一字未动；删掉本块即完全回到改前状态。
   ═══════════════════════════════════════════════════════════════════════ */

/* ① 收拢。实测原位置（ft3 left:7% / ft4 right:8%）与背景图内容重叠：
      1440px 下 ft3 重叠 71.3%、ft4 重叠 85.1%（正是压在牙列与种植体上）。
      改 27% 后，11 档宽度实测**全部 0.0%**（含约 820/900/1024/1050 各档）。
      仅限 ≥761px —— ≤760px 首屏不显示背景图，无重叠问题，保持原样不引入新风险。 */
@media(min-width:761px){.ft3{left:27%}.ft4{right:27%}}

/* ② 小字 +2px。原则：**只提升给人读的正文/标签**；
      装饰性微缩界面（模拟仪表盘 .dash-*、模拟文件列表 .file-row、
      模拟窗口栏 .window-bar、图片角标 .case-art）**一律不动**——它们靠"小"成立。 */
.topbar nav a{font-size:12px}
.tools select{font-size:12px}
.metric span{font-size:10px}
.feature-card p{font-size:13px}
.business-list article>span,.business-list p,.business-card>p{font-size:12px}
.business-card .btn{font-size:12px}
.business-list h3{font-size:13px}
.case-copy p{font-size:12px}
.case-bottom span,.case-bottom .btn{font-size:12px}
.case-bottom b{font-size:13px}
.price-row{font-size:12px}
.price-row.header{font-size:9px}
.pay-card>p{font-size:11px}
.pay-line{font-size:10px}
.promo-why>b{font-size:13px}
.fee-now{font-size:13px}
.faq-list details p{font-size:12px}
.faq-list summary{font-size:13px}
.file-copy>small{font-size:11px}
.eyebrow{font-size:12px}
.quote-section form label{font-size:11px}
.quote-section form>small{font-size:10px}
.form-head span{font-size:10px}
.quote-section input,.quote-section textarea{font-size:12px}
.footer-inner p,.footer-inner>a:last-child{font-size:11px}
.closing-strip{font-size:10px}
.brand small{font-size:11px}
.btn{font-size:13px}
.text-link{font-size:12px}
.aud-tab b{font-size:12px}
.file-copy li{font-size:12px}
.float-tile small{font-size:8px}
@media(max-width:1050px){.topbar nav a{font-size:11px}}
@media(max-width:760px){.float-tile small{font-size:7px}}

/* ═══════════════════════════════════════════════════════════════════════
   B16 · 全站字号提升到 16–18px（2026-10-16 Sam 指示）
   原话：「除了大标题外的字号都同步放大到 16-18px，意思是最小的字号要在 16px 以上」
   分级：正文 / 说明 / 表格 / 模拟界面 = 16px；标签 / 按钮 / 小标题 = 17px
   不动：所有真正的大标题（h1/h2/h3 的 clamp 值与原值 ≥19px 者）
   做法：**逐元素精确覆盖**，不用 !important —— 因为「所有 .btn 都 17px」会误伤
         本应 16px 的按钮（实测过，注入 !important 后 case-bottom/business-card
         的按钮被一起拉到 17px）。故沿原选择器逐条覆盖。
   ⚠️ 追加覆盖，上方既有规则一字未动；删掉本块即完全回到改前。
   ═══════════════════════════════════════════════════════════════════════ */

/* ── 顶栏 ── */
.preview-strip{font-size:16px}
.brand b{font-size:17px}
.brand small{font-size:16px}
.topbar nav a{font-size:17px}
.tools select{font-size:16px}

/* ── 首屏 ── */
.hero-eyebrow,.eyebrow{font-size:16px}
.metric span{font-size:16px}

/* ── 深色区「模拟界面」：原为 7–15px 的缩略字 ── */
.dash-top b,.dash-top em,.dash-heading small,.dash-state,.dash-cards b,.dash-cards small,
.dash-progress,.dash-tooth small,.dash-foot,.dash-logo,.dash-side>span,
.window-bar button,.window-bar b{font-size:16px}

/* ── 服务区 ── */
.feature-card p{font-size:16px}

/* ── 文件交付区（文案 + 模拟文件列表）── */
.file-copy>small,.file-copy li,.file-row,.file-row span,.file-row b,.file-columns article>label{font-size:16px}
.file-copy>p:not(.eyebrow),.business-copy>p:not(.eyebrow),
.price-heading>div>p:not(.eyebrow),.quote-copy>p:not(.eyebrow){font-size:16px}

/* ── 业务区 ── */
.business-list article>span,.business-list p,.business-card>p,.business-card .btn{font-size:16px}
.business-list h3{font-size:17px}

/* ── 案例区 ── */
.case-copy p{font-size:16px}
.case-copy h3{font-size:17px}
.case-art b,.case-art small{font-size:16px}
.case-bottom span,.case-bottom b,.case-bottom .btn{font-size:16px}

/* ── 受众区 ── */
.audience-panel p{font-size:16px}
.aud-tab b{font-size:16px}

/* ── 价格区 ── */
.price-stamp small{font-size:16px}
.price-row,.price-row.header{font-size:16px}
.pay-card>p{font-size:16px}
.pay-card h3{font-size:17px}
.pay-line{font-size:16px}
.promo-pill{font-size:16px}
.old-price,.vygoda{font-size:16px}
.promo-why p,.promo-why>b,.fee-now{font-size:16px}

/* ── FAQ ── */
.faq-list summary{font-size:17px}
.faq-list details p{font-size:16px}

/* ── 询价表单 ── */
.form-head,.form-head span{font-size:16px}
.quote-section form label,.quote-section form>small{font-size:16px}
.quote-section input,.quote-section textarea{font-size:16px}

/* ── 页脚 / 底部条 / 通用 ── */
.footer-inner p,.footer-inner>a:last-child{font-size:16px}
.closing-strip{font-size:16px}
.text-link{font-size:16px}
.btn{font-size:17px}
.section-title p:not(.eyebrow){font-size:16px}

/* ⚠️ 渠道按钮（Telegram/WhatsApp/电话/邮箱）的父容器类名就叫 `hero-buttons`
      —— 首屏那组按钮在 B9 被删后，这个类名被 quote 区复用，而
      `.hero-buttons .btn{font-size:15px}` 是条老规则，特异性(0,2,0) 压过 `.btn`(0,1,0)。
      不显式覆盖它，这四个按钮永远停在 15px（实测坐实）。 */
.hero-buttons .btn{font-size:17px}

/* ── 浮动块：标签从 7/8px 提到 16px，方块必须同步放大才放得下 ── */
.float-tile{width:100px;height:100px;border-radius:26px}
.float-tile b{font-size:32px}
.float-tile small{font-size:16px}
@media(max-width:760px){
  .float-tile{width:86px;height:86px;border-radius:22px}
  .float-tile b{font-size:27px}
}

/* ═══ B16 附：字号 ×1.4 后必须补的「让得下」规则 ═══
   原设计在 761–1050px 是靠把导航压到 9px 硬塞进一行；字号必须 ≥16px 后塞不下了，
   故把原本只在 ≤760px 生效的「顶栏折行 + 导航独占一行可横向滚动」上移到 ≤1050px。 */
@media(max-width:1050px){
  .topbar{height:auto;min-height:65px;padding:9px 16px;flex-wrap:wrap}
  .topbar nav{order:3;width:100%;overflow-x:auto;justify-content:flex-start;padding:7px 0 3px}
}
/* .case-bottom b 原本 white-space:nowrap，16px 后在 360px 屏溢出 11–29px → 窄屏允许折行 */
@media(max-width:760px){.case-bottom b{white-space:normal}}

/* ═══ B16 附二 · 手机版首屏背景图（2026-10-16 Sam 指示「手机版也必须和网站版本同步」）═══
   桌面用的 2103×748 超宽横幅（比例 2.811）在竖屏上无法直接适配——实测两种做法都难看：
     cover → 放大 2.33 倍、横向裁掉 81%，只剩中间一片碎片（左右两颗牙全丢）；
     contain → 缩成 390×139 的小条，且压住标题。
   故为手机**单独合成一张竖版图** `assets/hero-bg-m.webp`（780×1440 ＝ 390×720 @2x，比例精确匹配）：
     · 基底：同一张原图放大 + 高斯模糊(r30) + 提亮 1.10 —— 保留原图的蓝网纹与光晕色调
     · 左下：原图臼齿组（opacity 0.40）
     · 右下：原图种植体组（opacity 0.40）
     两元素**刻意放在 y 775–1120**：正好落在「浮动块 ft3/ft4 之下、metrics 卡片之上」的空格里
     —— 既不压浮动块，也不压文字与指标卡，且左右顺序与桌面版一致（左臼齿 / 右种植体）。
   本规则**覆盖 B12 里的 `≤760px 不显示背景图` 那一条**（同特异性、位置更靠后）。 */
@media(max-width:760px){.hero{background:#fff url("assets/hero-bg-m.webp") center center/cover no-repeat}}

/* 521–760px（大屏手机横屏 / 小竖屏平板）：hero 比例更方（如 600×765 ＝ 0.78），
   780×1440 的竖版图在此处 cover 会纵向裁掉约 340px、恰好吃掉两颗牙所在的中段。
   故用 background-position 把可视窗对准内容所在的高度（元素中心在画布 y≈66%）。 */
@media(min-width:521px) and (max-width:760px){.hero{background-position:center 62%}}

/* ═══ B16 附三 · 手机档：修「小标被浮动块遮住」（2026-10-16 实测发现）═══
   现象：字号 11→16px 后，首屏那行小标（「为牙科技工所与诊所提供 CAD 建模」）变长，
        横向撑到 x 82–308，而左上/右上两个浮动块占 x 24–117 与 x 273–366
        —— 文字两端被白色方块盖住，「牙科技」和「建模」看不见了。
   修法：① 小标限宽折成两行（居中后落在 x 95–295 的中间带）
        ② 两个上排浮动块各向外让一点（7% → 2%），给文字腾出中间通道
   注：只动这两个块的**水平位置**，块的尺寸与下排两块（ft3/ft4）一律未动。 */
@media(max-width:760px){
  .hero-eyebrow{max-width:min(200px,42vw);margin-left:auto;margin-right:auto}  /* 限宽后必须显式居中：块级元素不会自动居中，否则文字左贴、仍被左侧浮动块压住（本步就是踩了这个坑后补的） */
  .ft1{left:2%}
  .ft2{right:2%}
  /* 限宽用 min(200px,42vw) 而非固定 200px：360px 屏上固定 200px 居中后落在 x80–280，
     仍与左侧块（右缘 100）相交 17px。42vw 随屏宽收缩，360/390/430 三档实测均不相交。 */
}

/* ═══ B16 附四 · 手机档重排（2026-10-16 Sam：「手机端是主入口」）═══
   【实测病因】手机上俄语文字比中文长得多：小标折 6 行(149px)、主标题+标语 89px、
   信赖行 2 行(46px)，文字区从 y282 一路吃到 y603 —— 三分之一屏被文字占掉。
   于是「下排浮动块 ft3/ft4（占 94px 高）」与「背景图的两颗牙（占 172px 高）」
   抢同一段空间，俄语下必然有一方被压：
     · 不藏块 → h1/信赖行被 ft3/ft4 盖住（实测 ru 全档相交）
     · 块下移 → 撞背景图的两颗牙；再下移 → 撞 metrics 卡片
   【取舍】手机是主入口，**文字可读性优先于装饰密度**：
     · 隐藏下排两块 ft3/ft4 —— 它们的 "STL / PLY" "3D / CAD" 信息在服务区与价格区都有，
       而背景图上的两颗牙本身已经承担了视觉表达，信息不丢。
     · 保留上排 ft1/ft2（"牙冠 / 种植"），它们靠「小标限宽居中」与文字横向错开（已验证不相交）。
     · 背景图的两颗牙同步上移 75px，给俄语更高的 metrics 卡片让位。
   上排两块与桌面的四块一律未动。 */
@media(max-width:760px){.ft3,.ft4{display:none}}

/* 手机背景图元素位置修正（接 B16 附四）：
   元素重作为「高 224px、落在画布 y800–1024」—— 该区间是三语取交集后的唯一解：
   上界 = 最长的俄语文字底（绝对 y603 ⇒ 相对 400 ⇒ 画布 800），
   下界 = 俄语 metrics 卡片顶（相对 512 ⇒ 画布 1024）。
   metrics 卡片是不透明的，元素落其后即为「被卡片盖住」，属正常层次、不算遮挡。 */

/* 极小屏（≤359px，如旧款 iPhone SE / 老安卓）：横向实在放不下两块 + 居中文字，
   此时隐藏上排两块并放开小标宽度 —— 只保留文字与背景图，保证可读性。 */
@media(max-width:359px){
  .ft1,.ft2{display:none}
  .hero-eyebrow{max-width:none}
}

/* ═══ B16 附五 · 手机档最终形态（2026-10-16 Sam：「手机端是最重要的感官入口」）═══
   【再修正原因】实测发现：俄语小标里存在**比容器还宽的长单词**
   （`ЗУБОТЕХНИЧЕСКИХ` 19 字符 ≈170px > 限宽 164px），无法折行 → 文字溢出容器，
   视觉上被左上/右上的浮动块盖住、连 rect 都量不到（几何校验"不相交"但人眼可见遮挡）。
   这是「用限宽折行去躲浮动块」这条路的死结。
   【最终取舍】手机＝首要入口，**文字可读性绝对优先于装饰密度**：
     · 手机档整组收起四个浮动块（`.float-tile`）—— 首屏回到「小标 / 主标题 / 标语 / 信赖行
       / 两颗牙 / 指标卡」的清晰层次；「牙冠·种植·STL·3D」这些标签在页面其它区块均有承载。
     · 小标放开全宽，俄语折 3 行（而非挤成 6 行的窄柱）、不再溢出。
     · 背景图两颗牙由 224px 放大回 320px（文字区缩短后腾出的空间）。
   桌面档（≥761px）的四个块与背景图**一律未动**。 */
@media(max-width:760px){
  .ft1,.ft2,.ft3,.ft4{display:none}
  .hero-eyebrow{max-width:none;margin-left:0;margin-right:0}
}

/* ═══ B17 · 手机档把四个浮动块放回来（2026-10-16 Sam 追问「手机版怎么没有那4个浮动块了」）═══
   【先澄清】B16 附五确实用 `@media(max-width:760px){.ft1,.ft2,.ft3,.ft4{display:none}}`
   把四个块**真的藏了**（不是截图没渲染出来）。本次按 Sam 的关切放回。
   【物理约束】块的最小尺寸由最长标签决定：`STL / PLY` 在 16px 下 84px、`ИМПЛАНТ` 65px
   → 原方案（块 92px）在 390px 屏上无地可放：文字居中已占约 300px、左右各只剩 45px；
   顶部竖向空隙也只有 79px。**「4 块 + 单行 16px 标签 + 文字」物理不可共存。**
   【解法】不再让标签占整行 —— 四块**排成一行放在 hero 顶部空隙**（y5–75，正好落在
   `padding-top:81px` 之上，与下方小标留 6px 间隙），块收小到 70×70：
     · 标签**允许折行**（`white-space:normal`），`STL / PLY` 自动折成两行、每行仅 ~37px；
     · `КЛАПАН` 类的长单词（65px）在 70px 块内仍放得下；
     · 块内的 `b` 保留原样（🦷 / ◈ / STL / 3D），其中后两个本身就是文字，语义不丢。
   **≤359px 的极小屏仍维持隐藏**（304px 的四连块在 320px 屏上占比过高，且该档文字更吃紧）。 */
@media(min-width:360px) and (max-width:760px){
  /* 9px：块高 60 → 底 69，落在 padding-top:81 之上留 12px；浮动动画上飘 9px 时顶边到 0，不会被 hero 的 overflow 裁掉 */
  .ft1,.ft2,.ft3,.ft4{display:flex}
  .float-tile{width:60px;height:60px;border-radius:18px}
  .float-tile b{font-size:24px}
  /* 【关键取舍·实测第二轮】块内 16px 的标签（`КОРОНКА` 65px、`STL / PLY` 84px）几乎占满
     60–70px 的方块宽 —— 首版把块做到 70px 并让标签折行后，**四个方块视觉上糊成一条连体条**
     （见渲染图）。16px 标签与「小方块」本就不相容：要装标签块得 ≥92px，而 390px 屏上
     四个 92px 方块排不下（需 392px）。⇒ 手机档**隐去标签、只留块内大字符**：
     `b` 里 🦷 / ◈ 是图形符号、`STL` / `3D` 本身就是文字，四个块的可辨识度不丢。 */
  .float-tile small{display:none}
  /* ── 四周浮动（仿桌面：左上/右上 + 左下/右下，不是顶上一行）──
     关键＝让块**落在文字行之间的纵向空隙里**，而不是"与文字同高、靠左右躲"：
     实测三语（取最长的俄语）hero 内各文字行的相对 y 为
       小标 81–151 ｜ 主标题 163–257 ｜ 信赖行 280–323
     于是上下各有一条**完全没有文字**的横向空白带：
       上带 y 0–81（padding-top 那段）  下带 y 323–420（信赖行底 → 背景两颗牙顶）
     块放进这两条带里，纵向就与文字错开，**横向无需再争**（这才是桌面"四周浮动"的实现方式）。
     背景图两颗牙同步下移到 y420–540，给下带让位。 */
  .ft1{left:2%;right:auto;top:20px}    /* 实测渲染 y9–74：浮动动画上飘 9px 顶边正好到 0，不被 overflow 裁 */
  .ft2{right:2%;left:auto;top:26px}    /* y15–80，块底 80 < 小标顶 81，留 1px */
  .ft3{left:3%;right:auto;top:352px}   /* y341–407，底 407 < 背景两颗牙顶 420 */
  .ft4{right:3%;left:auto;top:342px}   /* y331–396，顶 331 > 最长俄语信赖行底 323 */
}

/* ═══════════════════════════════════════════════════════════════════════
   B19 · 区块顺序重排（2026-10-16 Sam 指令，**结构改动，非纯样式**）
   Sam 原话：「现在的夜间窗口整块直接取消，我觉得这个根本上的意义都不大。
             然后把第二块用来展示我们的案例。第三块，我在准备用来创建新的团队介绍模块。」
   ⚠️ 本块的模板改动写在 `app.js`（删 `dark-stage`、把 `cases-section` 移到
      `feature-section` 之前、导航顺序同步）。**app.css 上方既有规则一字未动**，
      本块只做①手机档案例减量②死样式备案。回退见 `docs/网站调整-实况修正记录-20261016.md`。
   ═══════════════════════════════════════════════════════════════════════ */

/* ① 手机档案例减量。案例区原在第四块（位置低、无所谓长度），提到第二块后
      它直接承接首屏 —— 实测手机 390px 下该区高 **2504px ≈ 整页 22%**，
      六张卡叠成一面前进的墙，会把后面的服务/价格/表单全推走。
      故手机档只留前 3 张（1 段视频 + 2 张图），其余交给 `.case-bottom` 已有的
      「更多作品在画廊 / 查看全部作品 →」出口（该文案原本就在，不需要改字）。 */
@media(max-width:760px){.case-grid > .case-card:nth-child(n+4){display:none}}

/* ② 死样式备案（**故意不删**）：`dark-stage` 区块已整块从 app.js 移除，
      其 50 条样式规则（`.dark-stage` / `.dashboard` / `.dash-*`，合计约 4051 字符）
      现在**没有任何 DOM 命中**。不删的理由：本文件是「基线 + 末尾追加块」的可审计结构，
      为了一个已订正的决策去改动上方既有行，会破坏「删块即回到改前」这一回退判据。
      若日后确认永久不再使用，可另起一批统一清理（届时同步更新基线指纹）。 */

/* ═══════════════════════════════════════════════════════════════════════
   B20 · 团队介绍板块（2026-10-16 Sam 指令）
   Sam 原话：「我感觉案例还是放在第三块，第二块作为团队介绍先。现在你根据这个团队简介
             来更新一些相关的内容。以及按照这个团队背景，放入到团队介绍的这个板块里面。
             效果就类似于第一块，有文字，有背景底图。这样子组合起来。」
   结构改动在 `app.js`（新增 `#team` 团队介绍 section、案例区退回第三块、受众区 id 改名
   `#audience`、导航扩为 7 项、团队口径 3 人→4 人）。**本块只做样式**，上方既有规则一字未动。
   素材：`assets/team-bg.webp`（Sam 提供的 LOKSUN 团队场景「正式稿」1672×941 → Lanczos 放大
        到 2880×1621 → WebP q85，243KB）。该正式稿无 AI 水印（带水印的是早期 item-4 改稿版）。
   实现＝「文字直接压在整块背景图上」：桌面左对齐 + 左→右白色渐变保证可读；
        手机档 **不把文字压在密集照片上** —— 照片收成顶部 250px 定高带、文字落白底下方。
   ═══════════════════════════════════════════════════════════════════════ */
.team-section{position:relative;overflow:hidden;background:#fff}
.team-media{position:absolute;inset:0;background:#fff url("assets/team-bg.webp") center center/cover no-repeat}
.team-media::after{content:"";position:absolute;inset:0;
  background:linear-gradient(96deg,rgba(255,255,255,.97) 0%,rgba(255,255,255,.94) 34%,rgba(255,255,255,.62) 56%,rgba(255,255,255,.10) 80%,rgba(255,255,255,0) 100%)}
.team-inner{position:relative;z-index:1;max-width:1320px;margin:0 auto;padding:118px 28px}
.team-copy{max-width:min(680px,calc(56vw - 40px))}
.team-copy .eyebrow{font-size:16px;font-weight:800;letter-spacing:.12em;color:#737780;margin:0 0 16px;text-transform:uppercase}
.team-copy h2{font-size:52px;line-height:1.14;letter-spacing:-.012em;font-weight:850;color:#0a0d12;margin:0 0 20px}
.team-copy>p:not(.eyebrow){font-size:17px;line-height:1.62;color:#3f444e;margin:0}

@media(max-width:760px){
  .team-section .team-media{inset:0 0 auto 0;height:250px;background-position:center 32%}
  .team-media::after{display:none}
  .team-section .team-inner{padding:290px 17px 60px}
  .team-copy{max-width:none}
  .team-copy h2{font-size:31px;line-height:1.2;letter-spacing:-.008em}
  .team-copy>p:not(.eyebrow){font-size:16px;line-height:1.6}
}

/* B20 附：导航由 6 项扩为 7 项后，顶栏在 1051–1200px 放不下（实测 `.tools` 被顶出右边界：
   1051→103px、1100→62px、1152→18px、1200→0）。把 B16 立起的「顶栏折行 + 导航独占一行」
   方案从 ≤1050 上移到 ≤1200（≤1050 原本就有同一套声明，重复无副作用）。 */
@media(max-width:1200px){
  .topbar{height:auto;min-height:65px;padding:9px 16px;flex-wrap:wrap}
  .topbar nav{order:3;width:100%;overflow-x:auto;justify-content:flex-start;padding:7px 0 3px}
}

/* ═══════════════════════════════════════════════════════════════════════
   B21 · 团队板块改为「上块文字 + 下块图片」拼成一个整块（2026-10-16 Sam 指令）
   Sam 原话：「把文字介绍做成一个长方块，然后跟背景图做成一个合并成一个正方块这样子，
             意思就是文字是一个上块，图片是一个下块。但是文字的底色微调一下，接近图片的
             底色不要显得太突兀。」
   做法：一个圆角容器 `.team-inner` 内部上下两块 —— 上＝文字块、下＝照片块，共用圆角与边框
        → 视觉上合成一个整块（桌面 1160×896，比例 1.30；俄语 1160×1003，1.16）。
   ★ 文字块底色 = **底图自身顶边的中位色 `#c5d1e1`**（实测：底图顶 3 行 rgb(198,210,225)）
     → 拼缝色差 Δ≈1，**两块之间的接缝几乎不可见**，这正是"接近图片底色、不突兀"的解法。
   ★ 底图：Sam 2026-10-16 指定的 `loksun-team-scene-ai-screens`（原 PNG 1664×928）。
     **右下角带平台水印「AI生成 / WORKBUDDY」**（实测水印起于 y≈885）→ 已把底图
     裁到 y≤876 去除，再 Lanczos 放大到 2880×1516 → WebP q85（211KB）。
   ⚠️ 追加覆盖块：B20 的 `.team-media{position:absolute}` / `::after` 渐变 / 手机档
      `padding:290px` 等已被本块改回（其中手机档那两条特异性为 (0,2,0)，故此处用等特异性
      选择器覆盖，否则会残留一段 290px 的空白 —— 本块第一版就踩了这个坑）。
   ═══════════════════════════════════════════════════════════════════════ */
.team-section{position:static;overflow:visible;background:#fff;padding:92px 28px}
.team-inner{position:static;z-index:auto;max-width:1160px;margin:0 auto;padding:0;
  border-radius:30px;overflow:hidden;background:#c5d1e1;
  border:1px solid rgba(16,24,40,.06);box-shadow:0 26px 70px rgba(16,24,40,.09)}
.team-copy{max-width:none;background:transparent;padding:62px 66px 58px}
/* 小标颜色由 #737780 压深到 #4a5361：底色不再是纯白，原灰在 #c5d1e1 上只有 3.9:1，
   不满足正文 4.5 标准（16px 粗体不算大字号）；#4a5361 实测约 5.5:1。 */
.team-copy .eyebrow{font-size:16px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#4a5361;margin:0 0 14px}
.team-copy h2{font-size:46px;line-height:1.14;letter-spacing:-.014em;font-weight:850;color:#0a0d12;margin:0 0 18px;max-width:900px}
.team-copy>p:not(.eyebrow){font-size:17px;line-height:1.62;color:#39414d;margin:0;max-width:880px}
.team-media{position:static;inset:auto;left:auto;right:auto;width:auto;height:auto;aspect-ratio:1664/876;
  background-color:#c5d1e1;background-image:url("assets/team-bg.webp");
  background-position:center top;background-size:cover;background-repeat:no-repeat}
.team-media::after{display:none}

@media(max-width:1050px){.team-section .team-inner{max-width:100%}}
@media(max-width:760px){
  .team-section{padding:56px 17px}
  .team-section .team-inner{padding:0;max-width:100%;border-radius:22px}   /* 覆盖 B20 手机的 290px 上内边距 */
  .team-section .team-copy{padding:32px 22px 28px}
  .team-copy h2{font-size:27px;line-height:1.22;letter-spacing:-.008em}
  .team-copy>p:not(.eyebrow){font-size:16px;line-height:1.6}
  .team-section .team-media{inset:auto;height:250px;background-position:center 32%}
}

/* ═══ B22 · 团队区块位标识 + 首屏指标条 4→3 项 + 页脚区位（2026-10-16 Sam 指令）═══
   Sam 原话：「在团队的关于我们这个文字后面，空几个格，然后加上一个位置图标，然后：
             办公室——中国.深圳 这样子的一个表达方式。在美工方面，你可以自己进行一些美化的
             表是，或者别人的常规这个地址显示比较好的方式是怎么样？你按照工程最优来进行选择确定。
             意思就是让我们的客户知道我们就是一个位于中国深圳的一个远程设计团队。」
   ＋「现在这第一版内容中的这一些部分，我感觉已经开始跟第二块有点冲突了。」
   ⚠️ 追加覆盖块，app.css 上方既有规则一字未动。
   ═══════════════════════════════════════════════════════════════════════ */

/* ① 团队区块位行：图标用**内联 SVG**（不用 emoji —— 本项目已确认 emoji 在不同系统字体下
      渲染不一致；SVG 可着色、跨平台一致、无字体依赖）。
      排版＝[位置图标] 办公室 · 中国 深圳 │ GMT+8 · 远程协作（竖细线分隔）。 */
.team-place{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:28px 0 0;
  font-size:16px;line-height:1.45}
.team-place .place-pin{display:inline-flex;flex:none}
.team-place .place-pin svg{width:19px;height:19px;display:block;color:#2b3542}
.team-place svg path,.team-place svg circle{fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.team-place b{font-weight:700;color:#2b3542}
.team-place em{font-style:normal;color:#4a5361;padding-left:13px;border-left:1px solid rgba(16,24,40,.18)}

/* ② 首屏指标条由 4 列改 3 列（B22 删掉「3 位设计师在团队」这一格）。 */
.metrics{grid-template-columns:repeat(3,1fr)}
.metrics .metric:last-child{border-right:0}

/* ③ 页脚区位：**未加** —— 实测页脚原文 `t('footer')` 本就写着「…· 中国深圳。…」，
      在同一行再放一次会重复，故不加（已核三语一致）。 */

@media(max-width:760px){
  .team-place{margin-top:22px;gap:8px}
  .team-place em{padding-left:11px}
}
@media(max-width:460px){
  /* ⚠️ 必须显式写回 2 列：上面的 `.metrics{repeat(3,1fr)}`（特异性 0,1,0、位置更靠后）
     会把基线里 ≤460px 的 `1fr 1fr` 一起覆盖掉 → 小屏变成 3 列、每列仅约 116px，
     大字「24–48 小时」被拦腰折成两行（本块第一版实测踩到）。 */
  .metrics{grid-template-columns:1fr 1fr}
  /* 3 项在 2 列网格里：第三项跨满一行，看起来是刻意的而不是"少了一格" */
  .metrics .metric:nth-child(3){grid-column:1/-1}
}

/* B22 附：≤460px 时指标条大字收一档。
   实测 390px 屏上 2 列网格每列约 182px，「24–48 小时」在 27px 下会**折成两行**
   （"24–48" / "小时"）——大字数值被拦腰断开，看着像 bug、且与左侧项不对齐。
   收 23px 后三格数值均单行显示。 */
@media(max-width:460px){.metrics .metric b{font-size:23px;line-height:1.15}}

/* ═══════════════════════════════════════════════════════════════════════
   B23 · 首屏去指标条（高度重算） + 新增「质量保证」板块（2026-10-16 Sam 指令）
   Sam 原话：「我还是坚持让你把这三项从第一块中挪出来。稍后我们再做到合作流程的部分的时候再把这些插入。
             然后我想在现在第二块的团队介绍后面再接一块质量保证说明……」
   ⚠️ 追加覆盖块，上方既有规则一字未动。
   ═══════════════════════════════════════════════════════════════════════ */

/* ── ① 首屏去掉指标条后的高度重算 ──
   原首屏靠 `min-height:870/790/765/720px` 撑高、指标条用 `position:absolute;bottom:0` 压在底部。
   指标条整条移除后若沿用原 min-height，底部会留一大片空白，故改为「内容 + 下内边距」自适应：
   min-height 只保留一个下限，用来保证四角浮动块（最低者 ft3 顶 352 + 高 60 = 底 412）
   仍在 `overflow:hidden` 的首屏之内（否则会被裁掉一角）。 */
.hero{min-height:700px;padding-bottom:120px}
@media(max-width:760px){.hero{min-height:620px;padding-bottom:104px}}
@media(max-width:359px){.hero{min-height:0;padding-bottom:88px}}

/* ── ② 质量保证板块：浅底 + 三张白卡 + 收尾一句 ──
   与相邻区块的区分：团队板块是「圆角整块卡片」，作品区是「图卡网格」，
   本块用**浅灰底 + 三张并列要点卡**，形成第三种节奏。 */
.qa-section{background:#fafafa;border-top:1px solid #f1f1f2;border-bottom:1px solid #f1f1f2}
.qa-wrap{max-width:1320px;margin:0 auto}
.qa-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:38px}
.qa-card{background:#fff;border:1px solid #e9eaeb;border-radius:22px;padding:32px 30px}
.qa-card>span{display:inline-block;font-size:16px;font-weight:800;letter-spacing:.08em;color:#98a2b3;margin-bottom:12px}
.qa-card h3{font-size:19px;line-height:1.36;letter-spacing:-.004em;font-weight:700;color:#0a0d12;margin:0 0 12px}
.qa-card p{font-size:16px;line-height:1.62;color:#3f444e;margin:0}
/* 收尾一句：左侧粗线做引用感，避免又变成一段普通正文 */
.qa-close{margin:40px 0 0;max-width:980px;font-size:17px;line-height:1.7;color:#39414d;
  padding-left:22px;border-left:3px solid #d9dee4}

@media(max-width:1050px){
  .qa-grid{grid-template-columns:1fr 1fr}
  .qa-card:nth-child(3){grid-column:1/-1}   /* 3 张卡在 2 列网格里：第 3 张跨满一行 */
}
@media(max-width:760px){
  .qa-grid{grid-template-columns:1fr;gap:14px;margin-top:28px}
  .qa-card{padding:24px 22px;border-radius:18px}
  .qa-card h3{font-size:18px}
  .qa-close{margin-top:30px;font-size:16px;padding-left:16px}
}


/* B23 附：首屏去掉指标条后高度由 870 → 700，**背景图 cover 裁切随之变化**，
   浮动块与画面的相对位置全变了 —— 实测桌面档 ft3/ft4 都落到了牙列/面板上。
   故按**实测干净区**重放（逐 10px 行扫「强边缘像素占比」，取连续 ≥115px 的空带）：
     · ft3 列带 x384-484：干净区 (0,450) 与 (460,700) → 取下方空带，top 470（底 580，余 120px）
     · ft4 列带 x922-1045：干净区 (0,450) → 文本（h1 150-250、标语 250-303）占掉上半，
       故取 top 560（底 670，余 30px；下方空带 (550,700)）
   三档桌面（1440/1280/1024）实测一致。手机档（≤760，首屏 620）四块实测全部 clean，未动。 */
@media(min-width:761px){.ft3{top:470px}.ft4{top:560px}}

/* ═══════════════════════════════════════════════════════════════════════
   B24 · 质量保证块配色美化（2026-10-16 Sam 选定方案 B）
   【诊断】区块底 `#fafafa` 与白卡 `#ffffff` 对比度仅 **1.044:1**（≈ 同色）
            → 卡片"浮"不出来，这就是"整块全是白"的根因；
            区块底与页面白同样只有 1.044:1，区块边界也糊在一起。
   【品牌色约束·实测】`--lime #88c80c` 在白底只有 **2.04:1** → **只能做装饰（线条/色块），
            不能当文字色**；需要"绿色系文字"改用深墨绿 `#3f4a0d`（白底 9.56:1）。
   【本块改动】① 区块底加深一档 → 白卡被托出来（1.125:1）；
            ② 卡片左侧 4px 品牌绿装饰条 + 柔阴影；③ 编号灰 → 深墨绿 + 浅绿胶囊底；
            ④ 卡片标题 → 深墨绿；⑤ 收尾引用线 → 品牌绿并加重。
   ⚠️ 追加覆盖块：app.css 上方既有规则一字未动，删掉本块即完全回到改前。
   ═══════════════════════════════════════════════════════════════════════ */
.qa-section{background:#eef2f6;border-top:1px solid #e3e9f0;border-bottom:1px solid #e3e9f0}
.qa-card{position:relative;overflow:hidden;border-color:#e2e8f0;box-shadow:0 6px 20px rgba(16,24,40,.04)}
.qa-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--lime)}
.qa-card>span{color:#3f4a0d;background:#f2f7e3;border-radius:999px;padding:3px 10px}
.qa-card h3{color:#20250a}
.qa-close{border-left-color:var(--lime);color:#20250a;font-weight:600}

/* ═══ B25 · #workflow 重构为「接单与交付」+ 收编文件交付区 + 新增品类清单 ═══ */
.business-section{padding-top:92px}
.doc-list{list-style:none;margin:16px 0 20px;padding:0;display:grid;gap:12px}
.doc-list li{position:relative;padding-left:22px;font-size:16px;line-height:1.55;color:#3f444e}
.doc-list li::before{content:"";position:absolute;left:0;top:9px;width:9px;height:9px;border-radius:3px;background:var(--lime)}
.cat-wrap{max-width:1320px;margin:44px auto 0}
.cat-wrap h3{font-size:clamp(22px,2.4vw,30px);line-height:1.2;letter-spacing:-.02em;font-weight:780;color:var(--ink);margin:0 0 8px}
.cat-sub{font-size:16px;line-height:1.6;color:#535862;margin:0 0 22px;max-width:820px}
.cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.cat-grid article{background:#fff;border:1px solid #e9eaeb;border-radius:20px;padding:24px 22px}
.cat-grid h4{font-size:17px;line-height:1.3;font-weight:750;color:#20250a;margin:0 0 10px;
  padding-bottom:10px;border-bottom:2px solid #f2f7e3}
.cat-grid p{font-size:16px;line-height:1.6;color:#3f444e;margin:0}
.cat-note{margin:18px 0 0;font-size:16px;line-height:1.6;color:#6b7280}
@media(max-width:1050px){.cat-grid{grid-template-columns:1fr 1fr}}
@media(max-width:760px){
  .business-section{padding-top:65px}
  .cat-wrap{margin-top:32px}
  .cat-grid{grid-template-columns:1fr;gap:12px}
  .cat-grid article{padding:20px 18px}
}
/* ═══ B26 · 案例后四板块重构：删 #services / 品类入价格区 / 删付款卡与促销辩护 / 适用对象改三卡 / 询价区删假表单 ═══ */
/* 说明：上方既有规则一字未动，删掉本块即完全回到改前。
   本块只补「新结构需要的版式」：品类块搬入 #pricing 后的间距、适用对象三卡、询价区备料清单。
   ⚠️ 本块不含任何价格/交期数字改动；品牌绿只用于装饰（色块/图标），文字绿一律用深墨绿 #3f4a0d。 */
.price-section .cat-wrap{margin:0 auto 34px;max-width:1260px}
.price-section .cat-wrap h3{margin-bottom:6px}
.price-section .cat-wrap .cat-sub{margin-bottom:20px}

.aud-cards{max-width:1120px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.aud-card{border:1px solid #eaecf0;border-radius:20px;background:#fff;padding:24px 22px;display:flex;flex-direction:column;gap:10px;box-shadow:0 6px 20px rgba(16,24,40,.04)}
.aud-head{display:flex;align-items:center;gap:10px}
.aud-ico{width:38px;height:38px;border-radius:11px;background:#eff8d9;color:#6fa30c;display:grid;place-items:center;font-size:18px;line-height:1;flex:0 0 auto}
.aud-tag{font-size:16px;font-weight:700;color:#3f4a0d;letter-spacing:.01em}
.aud-card h3{margin:0;font-size:19px;line-height:1.25;letter-spacing:-.02em;color:#101828}
.aud-card p{margin:0;font-size:16px;line-height:1.58;color:#667085}
.aud-cta{max-width:1120px;margin:20px auto 0;text-align:center}

.quote-prep{padding:24px;border:1px solid #e9eaeb;border-radius:22px;background:#fafafa;box-shadow:0 12px 34px #1018280b}
.quote-prep .prep-head{margin-bottom:15px}
.quote-prep .prep-head b{font-size:16px;color:#101828}
.quote-prep ul{list-style:none;margin:0;padding:0;display:grid;gap:11px}
.quote-prep li{position:relative;padding-left:24px;font-size:16px;line-height:1.55;color:#3f444e}
.quote-prep li::before{content:"";position:absolute;left:0;top:8px;width:9px;height:9px;border-radius:3px;background:var(--lime)}
.quote-prep>small{display:block;margin-top:14px;font-size:16px;line-height:1.5;color:#7a8089}

@media(max-width:1050px){.aud-cards{grid-template-columns:1fr}}
@media(max-width:760px){
  .price-section .cat-wrap{margin-bottom:26px}
  .aud-card{padding:20px 18px}
  .aud-card h3{font-size:18px}
  .quote-prep{padding:20px 18px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B27 · 2026-10-17 · 渠道语义拆分（发文件=邮箱 / 联系方式=4 项）+ 内容口径修正
   ───────────────────────────────────────────────────────────────────────────
   本批**只追加**，上方既有规则一字未动 → 删掉本块即完全还原到 B26。
   背景：Sam 指出站上把「发文件」与「联系方式」混成一件事（错把 4 个联系按钮
   当成发文件渠道）。正确语义：
     · 发文件 / 发案例 → **邮箱一条通道**（#quote 主按钮 + 画廊底部主按钮）
     · 联系方式 → Telegram / WhatsApp / 电话 / 邮箱 **四项**（页脚 .footer-contact）
   附带：新增 .quote-mail / .quote-mail-addr / .quote-contact-hint / .footer-contact
   四个类，此前不存在，故不可能覆盖任何旧样式。
   字号全部 ≥16px（手机端硬指标）。
   ═══════════════════════════════════════════════════════════════════════════ */

.quote-mail{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:10px}
.quote-mail-addr{font-size:16px;line-height:1.4;color:#475467;word-break:break-all}
.quote-contact-hint{margin:12px 0 0;font-size:16px;line-height:1.55;color:#717680}

.footer-inner{flex-wrap:wrap}
.footer-contact{display:flex;flex-wrap:wrap;align-items:center;gap:4px 16px;font-size:16px;
  flex-basis:100%;order:5;margin-top:2px;padding-top:10px;border-top:1px solid #eef0f3}
.footer-contact .fc-title{font-size:16px;font-weight:700;color:#344054}
.footer-contact a{font-size:16px;color:#1672e6;text-decoration:none;white-space:nowrap}
.footer-contact a:hover,.footer-contact a:focus-visible{text-decoration:underline}

@media(max-width:760px){
  .footer-contact{order:5;gap:6px 14px;margin-top:4px;padding-top:9px}
  .footer-contact a{white-space:normal}
  .quote-mail{gap:6px 10px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B28 · 2026-10-17 · 联系方式上移到询价区（显眼位）+ 按钮口径统一
   ───────────────────────────────────────────────────────────────────────────
   Sam 反馈三条：
     ① 联系方式放页脚"太低了，客户都不好找" → 上移到 #quote 询价区，做成卡片
     ② 顶栏「发送案例」点击后跳到底部、再点一次才发邮件 → 顶栏已改 mailto 直达（HTML）
        且三处按钮文案统一为「发送案例」（app.js/cases.js 的 ctaMailBtn 已改值）
     ③ 「想先聊聊？页面底部的…」这句多余 → 已删（键 quoteContactHint 保留为空引用，
        其样式规则一并保留但不生效；删掉本块即回到 B27 状态）
   本批仍**只追加**；新增类 .quote-contact / .qc-label / .qc-list 此前不存在。
   字号全部 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

.quote-contact{margin-top:22px;padding:15px 18px;border:1px solid #e4e7ec;border-left:4px solid #88c80c;
  border-radius:14px;background:#fbfcfd}
.quote-contact .qc-label{display:block;font-size:16px;font-weight:700;color:#344054;margin:0 0 9px}
.quote-contact .qc-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px;align-items:center}
.quote-contact .qc-list a{font-size:16px;line-height:1.45;color:#1672e6;text-decoration:none;white-space:nowrap}
.quote-contact .qc-list a:hover,.quote-contact .qc-list a:focus-visible{text-decoration:underline}

@media(max-width:760px){
  .quote-contact{margin-top:18px;padding:14px 15px}
  .quote-contact .qc-list{grid-template-columns:minmax(0,1fr);gap:8px}
  .quote-contact .qc-list a{white-space:normal}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B30 · 2026-10-17 · 品类块 → 独立「我们擅长」板块（移到案例之后）+ 重构
   ───────────────────────────────────────────────────────────────────────────
   Sam 要求：① 把「能接的品类」挪到案例下面、成为案例之后下一块 ② 重构
             ③ 标题口径改为「我们擅长」 ④ 内容按团队报价表每个项目对应填写
             ⑤ 风格参考第二块「质量保证」，**特别是那些绿条要加上**
   做法：区块外壳直接复用 `.qa-section` / `.qa-wrap` / `.section-title` / `.qa-close`
        （即质量保证那套浅底 + 收尾绿线），卡片新建 `.skill-card` 并**复刻 qa-card 的
        左 4px 品牌绿竖条**（`.qa-card::before` 的同一实现）。
   ⚠️ 不复用 `.qa-card` 类本身：它有全局副作用 `.qa-card:nth-child(3){grid-column:1/-1}`，
      会把第 3 张卡拉通全宽（质量保证块需要，本块 4 列不需要）。
   本批仍**只追加**；`.skill-*` 此前不存在。字号全部 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

.skill-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin-top:38px}

.skill-card{position:relative;overflow:hidden;background:#fff;border:1px solid #e2e8f0;
  border-radius:22px;padding:28px 26px;box-shadow:0 6px 20px rgba(16,24,40,.04)}
/* ★ 绿条：与 .qa-card::before 完全同一实现（左 4px、通高、品牌绿） */
.skill-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--lime)}

.skill-card h3{font-size:19px;line-height:1.36;letter-spacing:-.004em;font-weight:700;color:#20250a;
  margin:0 0 14px;padding-bottom:12px;border-bottom:2px solid #f2f7e3}

.skill-card ul{margin:0;padding:0;list-style:none}
.skill-card li{position:relative;margin:0;padding:8px 0 8px 15px;font-size:16px;line-height:1.55;
  color:#3f444e;border-bottom:1px dashed #eef1f5}
.skill-card li:last-child{border-bottom:0;padding-bottom:0}
.skill-card li::before{content:"";position:absolute;left:0;top:17px;width:6px;height:6px;
  border-radius:50%;background:#c9df8a}

@media(max-width:1180px){
  .skill-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
}
@media(max-width:760px){
  .skill-grid{grid-template-columns:1fr;gap:12px;margin-top:26px}
  .skill-card{padding:22px 20px;border-radius:18px}
  .skill-card h3{font-size:18px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B31 · 2026-10-17 · 流程块拆分：流程/交接示例 ←→ 付款单据独立成块
   ───────────────────────────────────────────────────────────────────────────
   Sam 要求：① 这个块先拆开，不要再合并一起 ② 先展示「我们与甲方的工作配合流程」
             ③ 付款那些放到后面再另外说明 ④ 重构一版「资料交接」的示例
             ⑤ 标题、小说明都要重新构建
   做法：`#workflow` 右卡由「单据与付款」换成 **「一次交接长什么样」示例**（你发来 / 我们返回）；
        「单据与付款」独立成新块 `#documents`，放在价格区之后、FAQ 之前。
   本批仍**只追加**；新增类 `.handoff-*` / `.docs-*` 此前不存在。字号 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 右卡：交接示例 ── */
.handoff-sub{margin:6px 0 18px;font-size:16px;line-height:1.5;color:#717680}
.handoff-col+.handoff-col{margin-top:18px;padding-top:18px;border-top:1px solid #eef1f5}
.handoff-col b{display:block;font-size:16px;font-weight:700;color:#20250a;margin:0 0 10px}
.handoff-col ul{margin:0;padding:0;list-style:none}
.handoff-col li{position:relative;padding:6px 0 6px 14px;font-size:16px;line-height:1.5;color:#3f444e}
.handoff-col li::before{content:"";position:absolute;left:0;top:14px;width:5px;height:5px;
  border-radius:50%;background:#c9df8a}

/* ── 独立「单据与付款」块 ── */
.docs-section{background:#fff;border-top:1px solid #f1f1f2}
.docs-wrap{max-width:1320px;margin:0 auto}
.docs-list{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,auto);
  grid-auto-flow:column;gap:14px 40px;margin-top:30px}

@media(max-width:760px){
  .docs-list{grid-template-columns:1fr;grid-template-rows:none;grid-auto-flow:row;gap:12px;margin-top:24px}
  .handoff-col+.handoff-col{margin-top:14px;padding-top:14px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B34 · 2026-10-17 · 公开价目表（4 项）+ 付款独立成块（方案 C）
   ───────────────────────────────────────────────────────────────────────────
   Sam 2026-10-17 17:0x 四条决定：
     ① 公开常态价（取消「原价 1 200 / 限时特惠」）    ② 统一 1.65× 系数
     ③ **只列常做三四项**，其余引导客户向业务经理索取完整价目表；
        美元价跟随卢布价（550 ₽/690 ₽ ≈ $6.6/$8.3），留出日后折扣空间
     ④ 板块走 **方案 C**：价目表 / 付款与结算 / 单据 三块分明
   结构变化：
     · #pricing 只剩价目表（4 行）+ 底部「索取完整价目表」引导条；
       `.promo-pill`（限时特惠）、`.old-price`（划线价）、`.vygoda` 不再渲染
     · 新增 `#payment`「付款与结算」独立块（4 条：货币 / 方式 / 时点 / 账户）
     · #documents 去掉「付款」字样，只讲四份单据
     · 流程第 2 步「报价与条件确认」→「价格确认」
   本批仍**只追加**；新增类 `.price-more` / `.payment-*` / `.pay-*` 此前不存在。
   字号全部 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 价目表：单列铺满（原 .price-layout 两列是给付款卡留位的，付款已独立） ── */
.price-table{margin-top:26px}

/* 🔴 价格数字改深绿：原 #6fa30c 在白底仅 3.02:1，不达 16px 正文 4.5:1 门槛 */
.price-row:not(.header) b{color:#3f4a0d;font-size:18px;letter-spacing:-.01em}

/* ── 底部引导条：完整价目表请联系经理 ── */
.price-note{margin:12px 0 0;font-size:16px;line-height:1.6;color:#717680}

.price-more{margin-top:18px;padding:20px 24px;border-radius:16px;background:#f6fbe9;
  border:1px solid #e4f0c4;display:flex;align-items:center;gap:20px;
  justify-content:space-between;flex-wrap:wrap}
.price-more p{margin:0;flex:1;min-width:260px;font-size:16px;line-height:1.6;color:#3f4a0d}
.price-more .btn{flex:0 0 auto}

/* ── 付款与结算（独立块，浅灰底与白底单据块区分） ── */
.payment-section{background:#f7f8fa;border-top:1px solid #f1f1f2}
.pay-wrap{max-width:1320px;margin:0 auto}
.pay-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:30px;align-items:stretch}
.pay-item{display:flex;flex-direction:column;background:#fff;border:1px solid #e9eaeb;border-radius:16px;padding:20px 22px}
.pay-item h3{margin:0 0 8px;font-size:16px;font-weight:800;color:#20250a;letter-spacing:-.004em}
.pay-item p{margin:0;font-size:16px;line-height:1.58;color:#475467}

@media(max-width:1100px){
  .pay-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
}
@media(max-width:760px){
  .price-table{margin-top:20px}
  .price-row{grid-template-columns:1.36fr .74fr .9fr;gap:10px;padding:13px 12px}
  .price-row.header{font-size:14px;padding:10px 12px}
  .price-row:not(.header) b{font-size:17px}
  .price-row>span:last-child{font-size:15px;line-height:1.45}
  .price-more{padding:16px 18px;gap:12px}
  .price-more p{min-width:0}
  .price-more .btn{width:100%;justify-content:center}
  .pay-grid{grid-template-columns:1fr;gap:12px;margin-top:22px}
  .pay-item{padding:18px 18px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B35 · 2026-10-17 · 结算方式并入价格表下方说明（取消独立付款块）+ PayPal
   ───────────────────────────────────────────────────────────────────────────
   Sam：「把结算方式融合到价格表的下面说明中吧。再新增一个贝宝的美元收款方式，
        具体帐号同样是到时候发送在帐单上。」
   做法：
     · 删除 `#payment` 独立块（B34 方案 C 的三块 → 回到两块：价目表 / 单据）
     · 价格表下方改成两句话说明（无标签列，表头已写「交期」，再给标签会重复）：
         ① 标准交期 8 小时，自收到完整资料起算；95% 的病例在此期间交付
         ② 结算：卢布（转账 / СБП）｜美元（PayPal）｜账户与 PayPal 邮箱随账单发送
     · PayPal 账号**不上站**，只写"随账单发送"，与银行账户同等处理
   本批仍**只追加**；新增类 `.price-notes` 此前不存在。字号 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

/* 表格下方说明：两句话，无标签列（表头已标明「交期」，标签会重复） */
.price-note{font-size:16px;line-height:1.62;color:#717680}
.price-note+.price-note{margin-top:7px}

/* ═══════════════════════════════════════════════════════════════════════════
   B36 · 2026-10-17 · 首单 3 颗免费：挂到价目表下方（决策点）
   ───────────────────────────────────────────────────────────────────────────
   Sam：「我们之前那个首单免费，新客户首单免费三颗，这个福利政策你建议重新挂载到
        什么地方更好？以及还有说法，更好的说法。或者更详细，显得更有诚意的说法。」
   改前：只出现在流程第 2 步末尾一句「首个病例可免费试用，最多 3 颗。」—— 价格区完全没有。
   改后：独立一条挂到**价目表正下方**（说明之后、索取引导条之前），并改写说法：
         · 标题：首单 3 颗免费
         · 正文：够你试一颗单冠、一个桥单位、一个嵌体。不预付、不承诺后续订单——
                 拿到完整设计文件后再决定要不要继续。
   为什么这样写：「3 颗」抽象，落到「一颗冠 + 一单位桥 + 一个嵌体」才有实感；
                   明说「不预付、不承诺」才是诚意的来源（去条件 > 加形容词）。
   本批仍**只追加**；新增类 `.free-note` 此前不存在。字号 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

/* 比下方「索取」引导条更淡：它是注记，不是行动按钮，避免两条绿撞在一起 */
.free-note{margin-top:16px;padding:17px 20px 17px 22px;border-radius:14px;
  background:#fbfdf6;border:1px solid #e9efdc;border-left:4px solid var(--lime)}
.free-note b{display:block;margin:0 0 6px;font-size:17px;font-weight:800;
  color:#20250a;letter-spacing:-.01em}
.free-note p{margin:0;font-size:16px;line-height:1.62;color:#3f4a0d}

@media(max-width:760px){
  .free-note{padding:15px 16px 15px 18px;margin-top:14px}
  .free-note b{font-size:16.5px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B41 · 2026-10-17 · 页脚联系方式下架 + 画廊底部联系方式卡片收窄
   ───────────────────────────────────────────────────────────────────────────
   Sam：「最后的那些联系方式已经显得多余了，就保留上面发送案例按钮的那个联系
        方式那些内容就可以。」
     → 页脚 `.footer-contact` 整段从模板删除（`app.js` / `cases.js` 各一处），
       `.footer-contact` 相关 CSS 保留不删（死样式，与项目惯例一致，恢复即生效）。
     → 画廊页原本只剩一个邮箱按钮，联系方式在那一页会彻底断掉，故把首页 `#quote`
       同一张 `.quote-contact` 卡片补到画廊底部 CTA 之后（同一套类，零新样式）。
   本批**只追加**；唯一新增规则是下面这条收窄（画廊容器是整幅宽，2×2 列间距过大）。
   ═══════════════════════════════════════════════════════════════════════════ */

.case-bottom + .quote-contact{max-width:560px}

/* ═══════════════════════════════════════════════════════════════════════════
   B42 · 2026-10-17 · 手机端价目表字号 ≤16px 修正（**覆盖 B34 手机档**）
   ───────────────────────────────────────────────────────────────────────────
   由来：交班体检跑字号探针时发现 B34 手机档写了
         `.price-row.header{font-size:14px}` 与 `.price-row>span:last-child{font-size:15px}`，
         违反项目「手机端正文 16px 硬下限」（Sam 定，豁免只有大标题）。
   做法：**不原地修改 B34 块**（保持"删块即还原"），在此末尾覆盖同选择器：
         表头 14 → 16px、交期列 15 → 16px，并把栅格压紧
         （1.36fr .74fr .9fr → 1.5fr .72fr 1.02fr、gap 10 → 6、padding 13×12 → 12×10）
         以腾出 16px 多占的宽度；360px 档实测仍不溢出。
   配套：`priceCol2` 俄语 `Стоимость` → `Цена`（16px 下与「Срок」几乎相接）。
   回退：**整块删掉**，即回到 B34 的 14/15px 状态（**不建议**，那是违规态）。
   ═══════════════════════════════════════════════════════════════════════════ */

@media(max-width:760px){
  .price-row{grid-template-columns:1.5fr .72fr 1.02fr;gap:6px;padding:12px 10px}
  .price-row.header{font-size:16px;padding:10px;letter-spacing:-.01em}
  .price-row>span:last-child{font-size:16px;line-height:1.4}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B43 · 2026-10-18 · 团队正文拆成四行（一段一行）
   ───────────────────────────────────────────────────────────────────────────
   Sam 给的原文是四行，要求「格式也采用一段一行」→ 模板由 1 个 <p> 变 4 个 <p>
   （`teamBody` + `teamBody2/3/4`），本块只补**段间间距**。
   ⚠️ 必须排除 `.team-place`：它自身有 `margin:28px 0 0`（位置行与正文之间的空档），
      若不排除会被本规则压成 13px，位置标识就贴到正文上了。
   本批仍**只追加**；字号 16px+（正文 17px、手机 16px），零新增字号规则。
   ═══════════════════════════════════════════════════════════════════════════ */

/* 段距：13px 试过太挤（四段连成一片），改 18px；位置行再单独拉开 */
.team-copy>p:not(.eyebrow):not(.team-place)+p:not(.eyebrow):not(.team-place){margin-top:18px}
.team-copy>p.team-place{margin-top:34px}

@media(max-width:760px){
  .team-copy>p:not(.eyebrow):not(.team-place)+p:not(.eyebrow):not(.team-place){margin-top:15px}
  .team-copy>p.team-place{margin-top:26px}
}

/* ═══════════════════════════════════════════════════════════════════════════
   B44 · 2026-10-18 · 团队第四段（主张句）放大两档 + 加粗
   ───────────────────────────────────────────────────────────────────────────
   Sam：「把最后这一段的字体放大和加粗两个字号。」
   对象：`teamBody4`（我们不追求巨量订单…请忽略我们）—— 全文唯一带筛选意味的主张，
        放大加粗让它成为这一块的"落点"，而不是第四行普通正文。
   数值：桌面 17px → **21px**（+4px ≈ 两档）、手机 16px → **19px**（+3px），
        font-weight **700**、颜色 `#0a0d12`（与 h2 同色系，压过正文灰）、line-height 1.5。
   ⚠️ 段距沿用 B43 的 18px（B43 那条兄弟选择器特异性更高，本块不抢它的 margin）；
      放大后视觉上已自带间隔，不再额外加。
   本批仍**只追加**；类 `.team-note` 此前不存在。字号 19/21px，均 ≥16px。
   ═══════════════════════════════════════════════════════════════════════════ */

.team-copy>p.team-note{font-size:21px;font-weight:700;line-height:1.5;letter-spacing:-.01em;color:#0a0d12}

@media(max-width:760px){
  .team-copy>p.team-note{font-size:19px;line-height:1.45}
}
