/* === Light styles === */
.ptable{padding:16px 20px;margin-bottom:24px;overflow:hidden;position:relative}
.page-actions{position:absolute;top:14px;right:20px;display:flex;gap:6px;z-index:5}
.page-act-btn{background:var(--card);border:1px solid var(--border2);color:var(--text3);padding:5px 12px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .3s;white-space:nowrap}
.page-act-btn:hover{border-color:var(--accent);color:var(--accent)}
.act-dropdown{position:relative;display:flex;align-items:stretch;gap:6px}
.act-trigger{background:var(--card);border:1px solid var(--border2);color:var(--text3);padding:5px 9px;border-radius:8px;font-size:11px;cursor:pointer;transition:all .3s;line-height:1;display:flex;align-items:center}
.act-trigger:hover{border-color:var(--accent);color:var(--accent)}
.act-trigger.open{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-color:var(--accent)}
.act-menu{position:absolute;top:calc(100% + 4px);right:0;background:var(--card);border:1px solid var(--border2);border-radius:10px;padding:5px;min-width:120px;box-shadow:0 6px 22px var(--shadow);opacity:0;transform:translateY(-6px) scale(.96);transform-origin:top right;pointer-events:none;transition:opacity .22s,transform .22s cubic-bezier(.22,1,.36,1);z-index:10}
.act-menu.open{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}
.act-menu-item{background:0;border:none;color:var(--text2);padding:8px 14px;border-radius:7px;font-size:13px;font-weight:500;text-align:left;cursor:pointer;transition:all .2s;white-space:nowrap;width:100%}
.act-menu-item:hover{background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent)}
@media(max-width:600px){.page-act-btn{padding:4px 9px;font-size:11px}.act-trigger{padding:4px 8px;font-size:10px}}
.prow{display:grid;grid-template-columns:72px repeat(4,1fr);gap:8px;align-items:center;min-height:40px}
.prow+.prow{margin-top:6px}
.prow.header{margin-bottom:4px;min-height:auto}
.prow.header .pcell{font-size:11px;color:var(--text4);text-transform:uppercase;letter-spacing:.5px;text-align:center;user-select:none}
.prow.header .pcell:first-child{text-align:left}
.pcell{display:flex;align-items:center;justify-content:center}
.pcell:first-child{justify-content:flex-start}
.rlabel{display:flex;align-items:center;gap:5px;font-size:13px;font-weight:600;white-space:nowrap;cursor:default}
.top-bar{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:14px}
.seg{display:inline-flex;background:var(--seg-bg);border:1px solid var(--seg-border);border-radius:8px;position:relative;overflow:hidden;padding:2px;transition:border-color .3s}
.seg:hover{border-color:var(--text4)}
.seg-item{position:relative;z-index:1;padding:5px 18px;font-size:13px;font-weight:600;color:var(--seg-text);cursor:pointer;user-select:none;transition:color .3s;border:none;background:0;outline:none}
.seg-item.active{color:#fff}
.seg-slider{position:absolute;top:2px;bottom:2px;left:2px;width:calc(50% - 2px);background:linear-gradient(135deg,var(--accent),var(--accent2));border-radius:6px;transition:transform .35s cubic-bezier(.4,.2,.2,1);pointer-events:none}
.seg3 .seg-slider{width:calc(33.333% - 2px)}
.seg.right .seg-slider{transform:translateX(100%)}
.seg.right2 .seg-slider{transform:translateX(200%)}
.stp{display:inline-flex;border:1px solid var(--border2);border-radius:8px;overflow:hidden;background:var(--input-bg);transition:border-color .3s,box-shadow .3s}
.stp:focus-within{border-color:color-mix(in srgb,var(--accent) 40%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 8%,transparent)}
.stp button{background:var(--stp-bg);border:none;color:var(--accent);font-size:15px;font-weight:bold;width:28px;height:30px;cursor:pointer;transition:background .2s,transform .1s;outline:none;line-height:1}
.stp button:hover{background:var(--stp-hover)}
.stp button:active{background:var(--stp-active);transform:scale(.9)}
.stp input{width:38px;background:0;border:none;border-left:1px solid var(--border2);border-right:1px solid var(--border2);color:var(--accent);font-size:15px;font-weight:700;text-align:center;padding:4px 0;outline:none;-moz-appearance:textfield;transition:color .2s}
.stp input::-webkit-inner-spin-button,.stp input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.stp input.pulse{animation:numPulse .35s ease}
.pill{position:relative;width:28px;height:16px;cursor:pointer;flex-shrink:0}
.pill input{display:none}
.pill-bg{position:absolute;inset:0;border-radius:8px;transition:background .3s cubic-bezier(.4,.2,.2,1)}
.pill input:not(:checked)~.pill-bg{background:var(--pill-off)}
.pill input:checked~.pill-bg{background:var(--ch-color)}
.pill-dot{position:absolute;top:2px;left:2px;width:12px;height:12px;background:#fff;border-radius:50%;transition:transform .3s cubic-bezier(.34,1.56,.64,1);box-shadow:0 1px 3px rgba(0,0,0,.3)}
.pill input:checked~.pill-dot{transform:translateX(12px)}
.prow.ch-row{transition:opacity .35s}
.prow.ch-row.off{opacity:1}
.prow.ch-row.off .stp{opacity:.18;pointer-events:none;transition:opacity .35s}
.prow.ch-row.off .rlabel span:last-child{opacity:.3;transition:opacity .35s}
.prow.ch-row:not(.off) .stp{opacity:1;transition:opacity .35s}
.prow.ch-row:not(.off) .rlabel span:last-child{opacity:1;transition:opacity .35s}
.mode-content{position:relative;overflow:hidden}
.mode-panel{transition:opacity .35s cubic-bezier(.22,1,.36,1),max-height .4s cubic-bezier(.22,1,.36,1);overflow:hidden}
.mode-panel.quick{max-height:60px;opacity:1}
.mode-panel.quick.hidden{max-height:0;opacity:0;pointer-events:none}
.mode-panel.adv{max-height:0;opacity:0;pointer-events:none}
.mode-panel.adv.visible{max-height:500px;opacity:1;pointer-events:auto}
.mode-panel.perpoint{max-height:0;opacity:0;pointer-events:none}
.mode-panel.perpoint.visible{max-height:800px;opacity:1;pointer-events:auto}
.prow.ch-row+.prow.ch-row{border-top:1px solid var(--row-border)}
.chart-sec{padding:20px;margin-bottom:24px;position:relative}
.chart-sec .chart-wrap{height:380px;overflow:visible}
.chart-sec canvas{display:block}
.qr-sec{padding:20px;margin-bottom:24px;display:flex;flex-direction:column;align-items:center}
.qr-head{display:flex;align-items:center;gap:12px;margin-bottom:16px;justify-content:center}
.qr-head h3{font-size:16px;color:var(--text3);margin:0}
.qr-sel{background:var(--input-bg);border:1px solid var(--border2);color:var(--text);padding:6px 12px;border-radius:6px;outline:none;font-size:14px;cursor:pointer;transition:border-color .3s}
.qr-sel:hover{border-color:var(--text4)}
.qr-sel:focus{border-color:var(--accent)}
#qrcode{background:var(--qr-bg);padding:10px;border-radius:8px;margin-bottom:12px;min-width:276px;min-height:276px;display:flex;align-items:center;justify-content:center;transition:transform .3s,box-shadow .3s}
#qrcode:hover{transform:scale(1.02);box-shadow:0 6px 20px var(--shadow)}

/* === 逐点编辑表格(参考通道模式果冻感) === */
.pp-grid-wrap{overflow-x:auto;padding:8px 0;margin:0 -4px}
.pp-table{border-collapse:separate;border-spacing:3px;font-size:11px;width:100%;min-width:780px}
.pp-table th{position:sticky;top:0;background:var(--card);color:var(--text4);font-weight:600;padding:6px 0;text-align:center;font-size:10px;z-index:1;letter-spacing:.5px}
.pp-table th.ch-name{padding:6px 10px 6px 4px;text-align:left;font-size:12px;font-weight:700;color:var(--text3)}
.pp-table td{padding:0;text-align:center;vertical-align:middle}
.pp-table td.ch-name{padding:4px 10px 4px 4px;text-align:left;white-space:nowrap}
.pp-ch-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle;box-shadow:0 0 6px currentColor}
.pp-table td.ch-name span:last-child{font-size:12px;font-weight:600;vertical-align:middle}
.pp-table td input{width:100%;min-width:30px;max-width:38px;padding:6px 0;border:1px solid transparent;border-radius:8px;text-align:center;font-size:11px;font-weight:600;color:var(--text);background:transparent;transition:all .2s;outline:none;-moz-appearance:textfield}
.pp-table td input::-webkit-inner-spin-button,.pp-table td input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.pp-table td input.zero{color:var(--text4);background:transparent}
.pp-table td input.nonzero{color:var(--ch-color);background:color-mix(in srgb,var(--ch-color) 14%,var(--card))}
.pp-table td input:focus{border-color:var(--ch-color,var(--accent));background:var(--input-bg);box-shadow:0 0 0 3px color-mix(in srgb,var(--ch-color,var(--accent)) 15%,transparent);z-index:2;position:relative;transform:scale(1.08)}
.pp-table td input:hover:not(:focus){background:color-mix(in srgb,var(--text4) 8%,transparent)}
.pp-table tr:hover td{background:transparent}

/* === 光谱记录弹窗 === */
.rec-name-input{flex:1;background:var(--input-bg);border:1px solid var(--border2);color:var(--text);padding:9px 12px;border-radius:8px;outline:none;font-size:14px;transition:border-color .3s,box-shadow .3s;min-width:0}
.rec-name-input:focus{border-color:color-mix(in srgb,var(--accent) 50%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent)}
.btn-accent{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;border:none;padding:9px 20px;border-radius:9px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:transform .1s,box-shadow .2s;outline:none}
.btn-accent:hover{box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 35%,transparent)}
.btn-accent:active{transform:scale(.96)}
.rec-list{display:flex;flex-direction:column;gap:8px;max-height:50vh;overflow-y:auto;padding-right:2px}
.rec-list::-webkit-scrollbar{width:6px}
.rec-list::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px}
.rec-card{background:var(--input-bg);border:1px solid var(--border2);border-left:3px solid var(--accent);border-radius:10px;padding:12px 14px;transition:border-color .3s,transform .2s,box-shadow .2s}
.rec-card:hover{border-color:color-mix(in srgb,var(--accent) 40%,transparent);border-left-color:var(--accent);transform:translateY(-1px);box-shadow:0 4px 14px var(--shadow)}
.rec-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.rec-card-name{font-size:14px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-card-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text4)}
.rec-card-mode{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent);padding:2px 8px;border-radius:6px;font-size:10px;font-weight:700;letter-spacing:.5px}
.rec-card-actions{display:flex;gap:6px;flex-shrink:0}
.rec-act-btn{background:0;border:1px solid var(--border2);color:var(--text3);padding:4px 12px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}
.rec-act-btn:hover{border-color:var(--accent);color:var(--accent)}
.rec-act-btn.del:hover{border-color:#e74c3c;color:#e74c3c}
.rec-empty{text-align:center;color:var(--text4);font-size:13px;padding:28px 12px;line-height:1.6}
