:root{--pri:#3f6fd8;--pri-d:#2f57b4;--bd:#e4e7ee;--bg:#f5f6f9;--tx:#232a35;--tx2:#7c8698;--ok:#1f9d55;--bad:#d9453d;--wait:#c98a00}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--tx);font:15px/1.6 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;-webkit-text-size-adjust:100%}.hide{display:none!important}.wrap{max-width:680px;margin:0 auto;padding:0 14px calc(40px + env(safe-area-inset-bottom,0px))}.hd{background:#fff;border-bottom:1px solid var(--bd);position:-webkit-sticky;position:sticky;top:0;z-index:5}.hd-in{max-width:680px;margin:0 auto;padding:13px 14px;padding-top:calc(13px + env(safe-area-inset-top,0px));padding-left:calc(14px + env(safe-area-inset-left,0px));padding-right:calc(14px + env(safe-area-inset-right,0px));display:flex;align-items:center;gap:10px}.hd-t{font-size:17px;font-weight:600;flex:1}.card{background:#fff;border:1px solid var(--bd);border-radius:10px;padding:16px;margin-top:14px}.card h3{margin:0 0 12px;font-size:15px;font-weight:600}label{display:block;font-size:13px;color:var(--tx2);margin:12px 0 6px}select,input{width:100%;padding:11px 12px;border:1px solid var(--bd);border-radius:8px;background:#fff;font-size:16px;color:var(--tx);outline:none;font-family:inherit}select{-webkit-appearance:none;appearance:none;padding-right:34px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%237c8698' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}select:focus,input:focus{border-color:var(--pri)}.btn{width:100%;padding:12px;min-height:44px;border:0;border-radius:8px;background:var(--pri);color:#fff;font-size:15px;font-weight:500;cursor:pointer;margin-top:14px;-webkit-tap-highlight-color:transparent}.btn:active{background:var(--pri-d)}.btn:disabled{background:#c3cbd9;cursor:not-allowed}.btn.ghost{width:auto;margin:0;padding:7px 14px;min-height:44px;background:#fff;color:var(--tx2);border:1px solid var(--bd);font-size:13px;font-weight:400}.btn.sec{background:#fff;color:var(--pri);border:1px solid var(--pri)}.btn.sec:disabled{color:#b6bfcd;border-color:var(--bd);background:#fff}.row{display:flex;gap:10px;margin-top:14px}.row .btn{margin:0}.info dl{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:0;font-size:14px}.info dt{color:var(--tx2)}.info dd{margin:0;word-break:break-all}.hint{font-size:13px;color:var(--tx2);margin-top:10px}.msg{margin-top:12px;padding:10px 12px;border-radius:8px;font-size:14px;white-space:pre-wrap;word-break:break-word}.msg.ok{background:#eef9f1;color:#14663a;border:1px solid #cbead6}.msg.bad{background:#fdeeed;color:#8f2b25;border:1px solid #f6cfcc}.msg.wait{background:#fff8e6;color:#8a5f00;border:1px solid #f4e2b4}.log{border-top:1px solid var(--bd);padding:11px 0;display:flex;gap:10px;align-items:flex-start}.log:first-child{border-top:0}.log .tag{flex:none;font-size:12px;padding:2px 8px;border-radius:6px;background:#eef1f7;color:#48536b}.log .tag.k-punch{background:#e9f1ff;color:#2b5cc4}.log .tag.k-report{background:#eef9f1;color:#14663a}.log .tag.k-stu{background:#f2f0fb;color:#4b3fa8}.log .bd{flex:1;min-width:0}.log .tm{font-size:12px;color:var(--tx2)}.log .tx{margin-top:2px;font-size:14px;word-break:break-word;white-space:pre-wrap}.st{font-size:12px;margin-left:6px}.st.success{color:var(--ok)}.st.failed{color:var(--bad)}.st.pending{color:var(--wait)}.link{color:var(--pri);cursor:pointer;font-size:13px}.empty{color:var(--tx2);font-size:14px;padding:16px 0;text-align:center}.more{width:100%;margin-top:12px;padding:10px;min-height:44px;border:1px solid var(--bd);background:#fff;border-radius:8px;color:var(--tx2);font-size:14px;cursor:pointer}.more:disabled{color:#b6bfcd;cursor:not-allowed}.toast{position:fixed;left:50%;bottom:calc(34px + env(safe-area-inset-bottom,0px));transform:translate(-50%);background:#1e242ef0;color:#fff;padding:10px 18px;border-radius:20px;font-size:14px;z-index:99;max-width:88vw}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#181c2480;z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:18px;padding-top:calc(18px + env(safe-area-inset-top,0px))}.modal-box{background:#fff;border-radius:10px;width:100%;max-width:640px;max-height:calc(100dvh - 36px - env(safe-area-inset-top,0px));display:flex;flex-direction:column}.modal-hd{display:flex;align-items:center;padding:14px 16px;border-bottom:1px solid var(--bd);font-weight:600}.modal-hd span{flex:1;word-break:break-all}.modal-hd button{border:0;background:none;font-size:24px;line-height:1;color:var(--tx2);cursor:pointer;padding:0 4px;min-width:44px;min-height:44px;-webkit-tap-highlight-color:transparent}.modal-body{padding:16px;overflow:auto;font-size:14px;white-space:pre-wrap;word-break:break-word;font-family:inherit}.ph-sub{font-size:13px;color:var(--tx2);margin:14px 0 8px}.ph-sub.first{margin-top:0}.ph-grid{display:grid;grid-template-columns:repeat(auto-fill,90px);gap:8px}.ph-i,.ph-add{width:90px;height:90px;border-radius:8px}.ph-i{position:relative;border:1px solid var(--bd);overflow:hidden;background:#f2f4f8}.ph-i img{width:100%;height:100%;object-fit:cover;display:block}.ph-i.err:after{content:"加载失败";color:var(--tx2);font-size:12px;position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.ph-i .del{position:absolute;top:0;right:0;width:44px;height:44px;padding:0;line-height:1;border:0;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}.ph-i .del:before{content:"×";position:absolute;top:3px;right:3px;width:22px;height:22px;border-radius:50%;background:#181c249e;color:#fff;font-size:15px;display:flex;align-items:center;justify-content:center}.ph-i .del:disabled{cursor:not-allowed}.ph-i .del:disabled:before{opacity:.45}.ph-add{border:1px dashed var(--bd);background:#fff;color:var(--tx2);font-size:24px;line-height:1;cursor:pointer}.ph-add:disabled{opacity:.45;cursor:not-allowed}.ph-note{font-size:12px;color:var(--tx2);margin-top:6px}.rg-tabs{margin-top:0}.rg-tabs .btn{font-size:14px}.rg-tabs .btn.on{background:var(--pri);color:#fff;border-color:var(--pri)}.rg-list{margin-top:6px}.rg-i{border-top:1px solid var(--bd);padding:11px 0}.rg-i:first-child{border-top:0}.rg-i .hd2{display:flex;align-items:center;gap:8px}.rg-i .dt{flex:1;font-size:14px;font-weight:500;word-break:break-all}.rg-i .ops{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.rg-i .ops button{width:auto;margin:0;padding:6px 13px;min-height:44px;font-size:13px;border-radius:7px;border:1px solid var(--bd);background:#fff;color:var(--pri);cursor:pointer}.rg-i .ops button.z{color:var(--bad);border-color:#f6cfcc}.rg-i .ops button:disabled{color:#b6bfcd;border-color:var(--bd);cursor:not-allowed}.badge{flex:none;font-size:12px;padding:2px 8px;border-radius:6px;background:#eef1f7;color:#48536b}.badge.ok{background:#eef9f1;color:#14663a}.badge.bad{background:#fdeeed;color:#8f2b25}.badge.wait{background:#fff8e6;color:#8a5f00}.rg-ed .fld{margin-top:12px}.rg-ed .fld:first-child{margin-top:0}.rg-ed label{display:block}.rg-ed textarea{width:100%;min-height:92px;padding:11px 12px;border:1px solid var(--bd);border-radius:8px;font-size:14px;line-height:1.6;color:var(--tx);outline:none;resize:vertical;font-family:inherit;-webkit-appearance:none;appearance:none}.rg-ed textarea:focus{border-color:var(--pri)}.rg-ed textarea:disabled{background:#f7f8fa;color:var(--tx2)}.yl-picks{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:8px}.yl-pick-tip{font-size:12px;color:var(--tx2)}.yl-pick{max-width:100%;min-height:44px;padding:8px 12px;border:1px solid var(--bd);border-radius:7px;background:#fff;color:var(--pri);font-size:13px;line-height:1.3;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.yl-pick:active{border-color:var(--pri)}@media(max-width:480px){.wrap{padding-left:10px;padding-right:10px}.card{padding:14px}.hd-t{font-size:16px}.ph-grid{grid-template-columns:repeat(auto-fill,84px);gap:7px}.ph-i,.ph-add{width:84px;height:84px}.toast{max-width:92vw;font-size:13px;padding:9px 14px}}
