:root{--g:#1A6E8E;--g2:#e3f0f5;--bg:#f4f6f8;--t:#1d2733;--m:#7a8794;--r:#d64545;--line:#e5e9ee}
*{box-sizing:border-box}body{margin:0;font:14px/1.5 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--t)}
.demo{position:fixed;top:0;left:0;right:0;height:26px;background:#fff7e0;color:#8a6200;font-size:12px;text-align:center;line-height:26px;z-index:30}
aside{position:fixed;top:26px;bottom:0;left:0;width:200px;background:#0e2f3d;color:#cfe;overflow:auto;z-index:20}
.brand{font-size:17px;font-weight:700;padding:18px;color:#fff}
aside a{display:block;position:relative;padding:11px 22px;color:#bcd;text-decoration:none;transition:background-color var(--dur-s) var(--ease),color var(--dur-s) var(--ease)}aside a::before{content:'';position:absolute;left:0;top:6px;bottom:6px;width:3px;border-radius:0 3px 3px 0;background:#3fd1a0;transform:scaleY(0);opacity:0;transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease)}aside a.on,aside a:hover{background:#174a5e;color:#fff}aside a.on::before{transform:scaleY(1);opacity:1}
main{margin-left:200px;padding:42px 24px 90px}#menu{display:none}
h1{font-size:20px;margin:0 0 14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}h1 small{font-size:12px;color:var(--m);font-weight:400}
.card{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 3px #0001;margin-bottom:16px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:#fff;border-radius:12px;padding:14px 16px;box-shadow:0 1px 3px #0001}.kpi b{display:block;font-size:24px;margin-top:4px}.kpi span{color:var(--m);font-size:12px}
.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 14px;cursor:pointer;font-size:14px;color:var(--t)}.btn:hover{border-color:var(--g)}
.btn.pri{background:var(--g);color:#fff;border-color:var(--g)}.btn.dan{color:var(--r);border-color:#f2c4c4}.btn.sm{padding:3px 9px;font-size:12px}
input,select{border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:14px;background:#fff;max-width:100%}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.sp{flex:1}.muted{color:var(--m)}.err{color:var(--r)}
table{width:100%;border-collapse:collapse}th,td{padding:9px 8px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}th{color:var(--m);font-weight:500;font-size:12px;background:#fafbfc}
.tw{overflow:auto}.num{text-align:right}
.tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:#eef}.t-已付{background:#e3f6ec;color:#127a46}.t-未付{background:#fff1dc;color:#a76200}.t-已退款,.t-部分退款{background:#fde8e8;color:#b33}.t-已取消{background:#eee;color:#888}
.grid{display:grid;gap:2px;min-width:720px}.gw{overflow:auto}
.gh,.gc{font-size:12px;text-align:center;padding:6px 2px}.gh{color:var(--m)}.gn{font-size:12px;padding:6px;font-weight:600;display:flex;align-items:center;gap:4px;justify-content:space-between;background:#fafbfc;border-radius:6px}
.gc{border-radius:6px;cursor:pointer;min-height:44px;line-height:1.25;overflow:hidden;user-select:none}
.c-free{background:#f1f4f6;color:#9aa}.c-free:hover{background:#d9efe6}.c-sel{background:#3fd1a0!important;color:#fff;font-weight:700}
.c-会{background:#cfe8ff;color:#0b4f8a}.c-散{background:#d8f3e3;color:#11633a}.c-固{background:#e5dcff;color:#4b2ea3}.c-课{background:#ffe1c7;color:#8a4300}.c-锁{background:repeating-linear-gradient(45deg,#e4e4e4,#e4e4e4 5px,#f2f2f2 5px,#f2f2f2 10px);color:#666}
.c-past{opacity:.45}.c-unpaid{outline:2px dashed #e5a000;outline-offset:-2px}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--m);margin:8px 0}.legend i{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:4px}
.bulb{font-size:13px;cursor:pointer;opacity:.35}.bulb.on{opacity:1;filter:drop-shadow(0 0 4px #ffd400)}
#selbar{position:fixed;left:200px;right:0;bottom:0;background:#0e2f3d;color:#fff;padding:12px 24px;display:flex;gap:10px;align-items:center;z-index:25;flex-wrap:wrap}#selbar.hide{display:none}
#modal{position:fixed;inset:0;background:#0006;z-index:40;display:flex;align-items:center;justify-content:center;padding:12px}#modal.hide{display:none}
.mbox{background:#fff;border-radius:14px;padding:20px;width:440px;max-width:100%;max-height:90vh;overflow:auto}.mbox h3{margin:0 0 12px}
.f{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.f label{font-size:12px;color:var(--m)}.f input,.f select{width:100%}
.ft{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}.danger-zone{border-top:1px dashed #f2c4c4;margin-top:12px;padding-top:12px}
#toast{position:fixed;top:40px;left:50%;transform:translateX(-50%);background:#1d2733;color:#fff;padding:10px 18px;border-radius:8px;z-index:50;display:none;max-width:90vw}
.bar{height:10px;background:#eef2f4;border-radius:5px;overflow:hidden}.bar i{display:block;height:100%;background:var(--g)}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}.chart{display:flex;align-items:flex-end;gap:4px;height:150px}.chart div{flex:1;background:var(--g);border-radius:4px 4px 0 0;position:relative;min-height:2px}.chart div span{position:absolute;bottom:-18px;left:0;right:0;text-align:center;font-size:10px;color:var(--m)}
.lights{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.lt{border:2px solid var(--line);border-radius:12px;padding:14px;text-align:center;cursor:pointer}.lt.on{border-color:#ffc400;background:#fffbe6}.lt .b{font-size:34px}
.tabs{display:flex;gap:4px;margin-bottom:12px;flex-wrap:wrap}.tabs a{padding:6px 14px;border-radius:8px;text-decoration:none;color:var(--t);background:#fff}.tabs a.on{background:var(--g);color:#fff}
.login{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#0d2a35,#1A6E8E)}.loginbox{width:340px;text-align:center}.loginbox input{width:100%;margin:12px 0}.logo{font-size:44px}
@media(max-width:800px){aside{left:-210px}body.open aside{left:0}main{margin-left:0;padding:40px 12px 100px}#menu{display:block;position:fixed;top:30px;right:10px;z-index:35;border:0;background:var(--g);color:#fff;border-radius:8px;padding:6px 12px;font-size:18px}#selbar{left:0}.cols{grid-template-columns:1fr}.kpi b{font-size:20px}}
.gn{position:sticky;left:0;z-index:2}

.me{margin-top:16px;padding:10px 14px;font-size:13px;color:var(--m);border-top:1px solid var(--line)}.me a.logout{color:var(--g);padding:0;display:inline}
body.ro #selbar{display:none!important}

.gc.c-订{background:#e8ecf0;color:#7a8794}.legend i.c-订{background:#a9b4bf}

@media(max-width:800px){table.mt tr:first-child{display:none}table.mt,table.mt tbody,table.mt tr,table.mt td{display:block;width:auto}table.mt tr{border:1px solid #e3e8e6;border-radius:10px;margin:8px 0;padding:6px 10px}table.mt td{border:0;padding:3px 0;text-align:left!important}table.mt td[data-l]:before{content:attr(data-l)'：';color:#889;margin-right:6px}}

/* ===== 动效（仿苹果官网手感）：只用 transform/opacity 做动画 ===== */
:root{--ease:cubic-bezier(0.25,0.1,0.25,1);--dur:210ms;--dur-s:180ms;--rise:8px}
@keyframes pgIn{from{opacity:0;transform:translate3d(0,var(--rise),0)}to{opacity:1;transform:none}}
main.pg-in{animation:pgIn var(--dur) var(--ease) both}
.btn,.card,.kpi,.lt,.tabs a{transition:transform var(--dur-s) var(--ease),opacity var(--dur-s) var(--ease)}
@media(hover:hover){.btn:hover{transform:translateY(-1px)}.btn:active{transform:scale(.98)}.kpi:hover,.lt:hover,.card.hov:hover{transform:translateY(-2px)}}
.skel{padding-top:2px}.sk{display:block;border-radius:10px;background:#e7ecf0;margin-bottom:14px;animation:skP 1.2s var(--ease) infinite alternate}
.sk-h{width:180px;height:24px}.sk-k{height:74px;margin:0}.sk-c{height:260px}
@keyframes skP{from{opacity:1}to{opacity:.55}}
#modal:not(.hide){animation:fdIn var(--dur-s) var(--ease) both}#modal:not(.hide) .mbox{animation:pgIn var(--dur) var(--ease) both}
@keyframes fdIn{from{opacity:0}to{opacity:1}}
@media(max-width:800px){aside{left:0;transform:translate3d(-210px,0,0);transition:transform var(--dur-s) var(--ease)}body.open aside{transform:none}}
@media(prefers-reduced-motion:reduce){:root{--rise:0px}
 *,*::before,*::after{transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}
 .btn:hover,.kpi:hover,.lt:hover,.btn:active{transform:none}}

/* 经营简报 */
aside a.dot::after{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:#e5484d;margin-left:6px;vertical-align:middle}
.rdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#e5484d;margin-right:6px;vertical-align:middle;animation:rpulse 2s ease-in-out infinite}
@keyframes rpulse{50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.rdot,.hb i{animation:none}}
.heat{display:flex;gap:4px;align-items:flex-end;height:120px;margin-top:10px}
.hb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;min-width:0}
.hb i{display:block;width:100%;background:linear-gradient(#34c38f,#1a9e6e);border-radius:4px 4px 0 0;min-height:2px;transform-origin:bottom;animation:hbIn .5s cubic-bezier(.25,.1,.25,1) both}
@keyframes hbIn{from{transform:scaleY(0)}}
.hb span{font-size:10px;color:#888}.hb em{font-size:10px;font-style:normal;color:#555}
.btxt{white-space:pre-wrap;word-break:break-all;background:#f6f8f7;border-radius:8px;padding:12px;font-size:13px;line-height:1.7;margin:8px 0}
@media (max-width:700px){.heat{gap:2px;height:100px}.hb span{font-size:8px}}

/* 提速：点击立即反馈（按下态只用 transform） */
aside a:active{background:#174a5e}.btn:active{transform:scale(.97)}
/* 照馆客多布局：首页快捷入口、灯状态、日期条 */
.quick{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:6px 0 14px}.qk{background:var(--g);color:#fff;text-decoration:none;padding:10px 18px;border-radius:10px;font-weight:600}
.lstat{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.ls{font-size:12px;padding:3px 8px;border-radius:12px;background:#eef1f4;color:#6b7785}.ls-on{background:#fff4c2;color:#7a5a00}.ls-off{background:#e6e9ed;color:#333}
.dstrip{display:flex;gap:6px;margin:10px 0;overflow-x:auto}.dstrip a{cursor:pointer;text-align:center;padding:6px 12px;border-radius:8px;background:#f2f4f6;font-size:13px;min-width:60px}.dstrip a.on{background:var(--g);color:#fff}
.tbar{font-size:12px;margin-bottom:6px}.tbar .dz{color:#d64545}.vsep{width:1px;height:24px;background:#ffffff55;margin:0 6px}
.otabs a{cursor:pointer}.tabs a{cursor:pointer}
.tierpick{display:flex;flex-wrap:wrap;gap:8px}.tp{cursor:pointer;border:2px solid var(--line);border-radius:10px;padding:8px 12px;min-width:92px;text-align:center;display:flex;flex-direction:column}.tp.on{border-color:var(--g);background:#eaf4f8}.tp small{color:var(--m)}
.rql{max-height:320px;overflow:auto}

/* 「比赛·相册·积分」入口：打开中 / 打不开 遮罩（只用 opacity/transform） */
#kfov{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,40,52,.35);z-index:200}
#kfov.on{display:flex;animation:fdIn var(--dur-s) var(--ease) both}
.kfbox{background:#fff;border-radius:14px;padding:22px 26px;min-width:280px;max-width:420px;text-align:center;box-shadow:0 10px 40px rgba(0,0,0,.18);animation:pgIn var(--dur) var(--ease) both}
.kfbox b{display:block;font-size:16px;margin:6px 0}.kfbox p{margin:6px 0 0;font-size:13px}#kfov.err .kfbox b{color:#c0392b}
.kfbox .ft{justify-content:center;margin-top:14px}
.kfspin{display:inline-block;width:26px;height:26px;border:3px solid #d6e4ea;border-top-color:var(--g);border-radius:50%;animation:kfr .8s linear infinite}
@keyframes kfr{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.kfspin{animation-duration:2s!important;animation-iteration-count:infinite!important}}

/* 灯控 L1（模拟版） */
.lmode{display:inline-block;font-size:12px;font-weight:600;padding:1px 8px;border-radius:10px;background:#fff1dc;color:#a76200;vertical-align:middle}
.lbar{background:#fff6d6;border:1px solid #f3d27a;color:#7a5a00;border-radius:12px;padding:10px 14px;margin-bottom:12px}
.lar+.lar{margin-top:14px}.lat{font-size:13px;margin-bottom:8px}
.lgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.lc{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:#fff;transition:border-color var(--dur-s) var(--ease),box-shadow var(--dur-s) var(--ease)}
.lc.on{border-color:var(--g);box-shadow:0 0 0 2px var(--g2)}
.lh{display:flex;justify-content:space-between;align-items:center}.ls{font-size:13px;color:var(--m)}.lc.on .ls{color:var(--g);font-weight:600}
.li{font-size:12px;color:var(--m);margin-top:4px;min-height:16px}.li.lbz{color:#a76200}
.lb{margin-top:10px}.lb .btn{flex:1;min-height:36px}.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none!important}
.lpre .btn{min-width:64px}.lchk{display:grid;grid-template-columns:repeat(2,1fr);gap:6px 12px;margin:8px 0 12px}.lres{padding-left:18px;margin:8px 0}.lres li{margin:3px 0}
@media(max-width:800px){.lgrid{grid-template-columns:repeat(2,1fr);gap:8px}.lc{padding:10px}.lq{width:100%}.lchk{grid-template-columns:1fr}}
.lsrc{font-size:11px}.lpend{color:#a76200;font-weight:600}
.lfail{font-size:11px;color:#b42318;font-weight:600}
.lmode.lreal{background:#b42318;color:#fff;font-weight:700}.lrealtip{color:#b42318}

/* 灯控未开放提示（正式环境灯控关闭时） */
.lclosed{border-left:4px solid #f0b429}.lclosed b{font-size:16px}.lclosed p{margin:8px 0 0}

/* 第二批：订场付款状态分色（颜色+文字双重提示，手机上也能分清） */
.gc .pl{font-style:normal;font-size:10px;font-weight:700;opacity:.85}
.p-paid,.gc.p-paid{background:#d8f3e3;color:#11633a}.p-unpaid,.gc.p-unpaid{background:#fff1c9;color:#8a5a00;box-shadow:inset 0 0 0 2px #e5a000}
.p-part,.gc.p-part{background:#ffe0e6;color:#9b2c48}.p-refunded,.gc.p-refunded{background:#eceff1;color:#7b8790;text-decoration:line-through}
.p-lock,.gc.p-lock{background:repeating-linear-gradient(45deg,#e4e4e4,#e4e4e4 5px,#f2f2f2 5px,#f2f2f2 10px);color:#666}
.p-fixed,.gc.p-fixed{background:#e5dcff;color:#4b2ea3}.p-course,.gc.p-course{background:#ffe1c7;color:#8a4300}.p-mine,.gc.p-mine{background:#ffc995;color:#6b3300}
.p-taken,.gc.p-taken{background:#e8ecf0;color:#7a8794}.p-unknown,.gc.p-unknown{background:#fff;color:#999;box-shadow:inset 0 0 0 1px #c9d1d6}
.legend i[class^="p-"]{box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.steps{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 12px}.steps span{font-size:12px;padding:4px 8px;border-radius:12px;background:#f1f4f6;color:#7a8794}.steps .on{background:var(--g);color:#fff}.steps .done{background:#d8f3e3;color:#11633a}
.tag.t-退卡{background:#eceff1;color:#555}.tag.t-过期{background:#ffe0e6;color:#9b2c48}.tag.t-将到期{background:#fff1c9;color:#8a5a00}
.xgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-top:12px}.xb{padding:14px;font-size:15px}
tr.erow td{background:#fff6f6}
@media(max-width:800px){.legend{gap:6px 10px;font-size:11px}.gc{min-height:48px}.xgrid{grid-template-columns:1fr 1fr}#mbox .kpis{grid-template-columns:1fr 1fr}}

/* r2 界面修复 */
.btn.dng{background:#d64545;border-color:#d64545;color:#fff;font-weight:600}.btn.dng:hover{background:#b83232}
.crk{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:stretch}.crk .kpi{display:flex;flex-direction:column;justify-content:space-between}.crk .kpi span{white-space:nowrap}
.crnote{font-size:13px;margin:10px 0 4px}.crwarn{display:block;color:#9b2c48;background:#fff3f5;border-radius:8px;padding:8px 10px;margin:8px 0;font-size:13px}
td.ops{white-space:nowrap;min-width:180px}td.ops .btn.sm{padding:4px 8px}td.nw{white-space:nowrap}
.c-past{opacity:1;filter:saturate(.55) brightness(1.02)}.c-past.c-free{color:#8a959e}
.gc.p-refunded{background:#e3e7ea;color:#56626b;box-shadow:inset 0 0 0 1px #9aa5ad;text-decoration:line-through}.legend i.p-refunded{box-shadow:inset 0 0 0 1px #9aa5ad}
.legend i.c-订{background:#e8ecf0;box-shadow:inset 0 0 0 1px #c3ccd3}.gc.c-订{color:#56626b}
#impres td,.erow td{overflow-wrap:anywhere;word-break:break-word}input[type=file]{max-width:100%}
@media(max-width:800px){main{overflow-x:hidden}.card{max-width:100%;box-sizing:border-box}.gw{max-width:100%}table.mt td{overflow-wrap:anywhere}td.ops{min-width:0;white-space:normal}.row{flex-wrap:wrap}}
/* r3：对账会员退卡/线下已退单列、待办、退款类型；手机合计行；导入报错换行；过去时段价格；延期勾选间距 */
tr.rspec td{background:#fafbfc}.rnote{font-size:12px;font-weight:400;white-space:normal;margin-top:2px}
.card.todo{border:1px solid #f0c36d;background:#fffbf0}.tag.t-card{background:#eef3ff;color:#2f4fa8}.tag.t-todo{background:#fff1d6;color:#9a5b00}td.wrap{white-space:normal;max-width:320px}
.erow td,.erow td *{white-space:normal!important;overflow-wrap:anywhere;word-break:break-all}
.c-past.c-free{color:#5f6b75}
label.exl{display:block;margin:4px 0 12px}
@media(max-width:800px){table.mt tr.tot{display:flex!important;flex-wrap:wrap;gap:4px 12px}table.mt tr.tot th{display:inline-block;padding:2px 0;border:0;white-space:normal}table.mt tr.tot th:empty{display:none}td.wrap{max-width:none}}
.kpi span.kb{display:block}
/* r4 低5：过去的空格子要比未来的浅（之前反了） */
.c-past.c-free{background:#f8fafb!important;color:#b8c0c6!important;filter:none;opacity:1}
/* r4 低10：会员合计行对比度；简报数字不在中间断行 */
tr.tot th{background:#e8efec;color:#1d2b25;font-weight:700}
.btxt{word-break:normal;overflow-wrap:break-word}.btxt .nb{white-space:nowrap}
@media(max-width:800px){tr.tot th{display:inline-block;border:0;padding:4px 8px}tr.tot th:empty{display:none}}
/* 第三批：储值扣款一色 + 状态图标（色弱友好）+ 快到期卡片 */
.p-stored,.gc.p-stored{background:#d6ebf3;color:#0f4f68;box-shadow:inset 0 0 0 2px #1A6E8E}
.legend i[class^="p-"]{width:auto;min-width:16px;height:16px;padding:0 2px;font-style:normal;font-size:10px;line-height:16px;text-align:center;font-weight:700}
.gc .pi{display:inline-block;margin-right:2px;font-weight:800}
.tag.t-soon{background:#fff1c9;color:#8a5a00}.expcard b{color:#1A6E8E}
/* fp 修复轮：手机上档位表/固定预订表右侧操作列固定可见 + 滑动提示 */
.swipe-hint{display:none;font-size:12px;color:var(--m);margin:0 0 6px}
@media(max-width:800px){.opscroll .swipe-hint{display:block;padding:0 12px}.opscroll{overflow-x:auto;padding-left:0;padding-right:0}.opscroll table td:first-child,.opscroll table th:first-child{padding-left:12px}.opscroll table td:last-child,.opscroll table th:last-child{position:sticky;right:0;background:#fff;box-shadow:-6px 0 6px -6px rgba(0,0,0,.25);z-index:1}}
