:root{--bg:#f8f5ef;--paper:#fffdf9;--ink:#382f35;--muted:#736972;--plum:#654866;--darker:#523853;--line:#ded6cb;--purple:#e8e0ed;--serif:"Songti SC","STSong","Noto Serif CJK SC","SimSun",serif;--sans:"PingFang SC","Microsoft YaHei",system-ui,sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.6 var(--sans)}button,input,select,textarea{font:inherit}button,.button,nav a,summary,.brand,.book-card{cursor:pointer}button,.button{display:inline-flex;gap:8px;align-items:center;justify-content:center;line-height:1.4;min-height:44px;padding:9px 17px;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:10px;font-weight:600;text-decoration:none}button:hover,.button:hover{border-color:#a88fa5;background:#f3edf2}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid #9a729b;outline-offset:3px}
.primary{color:white;background:var(--plum);border-color:var(--plum)}.primary:hover{background:var(--darker);border-color:var(--darker)}.quiet{background:transparent;border-color:transparent;color:var(--muted);padding:6px 8px}.danger{color:#973d44}header{border-bottom:1px solid var(--line);background:#fcfaf6}.top,main{max-width:1240px;margin:auto;padding:0 44px}.top{height:78px;display:flex;align-items:center;gap:26px}.brand{display:inline-flex;align-items:center;gap:12px;font-family:var(--serif);font-weight:700;color:var(--ink);font-size:28px;white-space:nowrap;text-decoration:none}.brandmark{display:flex;align-items:center;justify-content:center;gap:3px;width:43px;height:43px;background:var(--plum);border-radius:13px;color:#fffbef}.brandmark b,.wave i{display:block;border-radius:3px;background:currentColor;width:3px;height:13px}.brandmark b:nth-child(2),.brandmark b:nth-child(4){height:22px}.brandmark b:nth-child(3){height:30px}.byline{border-left:1px solid #c9bdb9;padding-left:12px;font:16px var(--sans);color:var(--muted)}nav{display:flex;align-items:center;justify-content:center;gap:4px;flex:1}nav a{color:var(--muted);padding:7px 16px;font-weight:600;text-decoration:none;border-radius:24px;white-space:nowrap}nav a.current{background:var(--purple);color:var(--darker)}nav a:hover{background:#efe9e3}#identity{white-space:nowrap;font-size:15px}main{padding-top:40px;padding-bottom:80px}h1,h2,h3,p{margin:0}h1,h2,h3{line-height:1.27}h1,h2,.serif{font-family:var(--serif)}h1{font-size:clamp(34px,4vw,52px);letter-spacing:.02em}h2{font-size:30px}h3{font-size:21px}p,.muted,small{color:var(--muted)}small{font-size:14px}.row,.sectionhead,.panelhead,.pagehead,.actions,.total,.rowtop{display:flex;align-items:center;gap:12px}.sectionhead,.panelhead,.pagehead,.total,.rowtop{justify-content:space-between}.pagehead{margin-bottom:25px;align-items:flex-end}.pagehead p,.sectionhead p{margin-top:7px}.date{font-size:16px;color:var(--muted)}.actions{flex-wrap:wrap}.workspace{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(260px,1fr);gap:20px}.upload,.manual{padding:27px 29px;border-radius:20px;border:1px solid #d5c5d6;position:relative;overflow:hidden;min-height:215px;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;gap:17px}.upload{background:radial-gradient(ellipse at 82% 68%,#e0d3e2 0%,transparent 57%),#ece5ed}.upload:after{content:"";position:absolute;inset:11px;border:1px dashed #c6b1c5;border-radius:13px;pointer-events:none}.upload.drag{background:#ddcde1}.manual{background:#f3ebde;border-color:#dfd1c2}.upload h2,.manual h2{font-size:27px}.upload p,.manual p{margin-top:5px;color:#625663}.upload>*:not(.art),.manual>*:not(.art){position:relative;z-index:1}.art{position:absolute;right:6%;bottom:25px;width:29%;height:78px;opacity:.68;display:flex;align-items:center;justify-content:center;color:#ad91af;gap:3px;transform:rotate(-5deg);pointer-events:none}.wave i{width:4px;height:var(--h)}.manual .art{font:90px var(--serif);color:#baa386;right:2%;bottom:8px;transform:rotate(-14deg)}.sectionhead{margin:35px 0 17px}.count{font:16px var(--sans);color:var(--muted);margin-left:13px}.shelf{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.book-card{display:block;text-decoration:none;color:var(--ink);border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--paper);transition:transform .18s,box-shadow .18s}.book-card:hover{transform:translateY(-3px);box-shadow:0 6px 16px #57414b15}.artcover{height:154px;display:block;width:100%;object-fit:cover;object-position:center 63%}.book-meta{padding:17px 19px;display:flex;align-items:center;justify-content:space-between;gap:6px}.book-meta h3{font:700 23px/1.4 var(--serif)}.book-meta small{display:block;margin-top:4px}.arrow{font-size:24px;color:var(--plum)}.panel,.editrow,.group,.login-card{background:var(--paper);border:1px solid var(--line);border-radius:16px;padding:22px}.panel+.panel,.editrow+.editrow,.group+.group{margin-top:14px}.panelhead{margin-bottom:14px}.empty{padding:32px 15px;text-align:center;color:var(--muted)}.login-wrap{max-width:890px;margin:4vh auto;display:grid;grid-template-columns:.9fr 1.1fr;border:1px solid var(--line);border-radius:24px;overflow:hidden;background:var(--paper)}.login-art{background:url('/static/cover-3.webp') 52% center/cover}.login-card{border:0;border-radius:0;padding:clamp(28px,4vw,55px)}.login-card h1{font-size:38px;margin-bottom:10px}.login-card form{margin-top:26px}.login-card .primary{margin-top:16px;width:100%}label{display:flex;flex-direction:column;gap:5px;font-size:15px;font-weight:600;color:#675961}input,select,textarea{min-width:0;width:100%;padding:9px 11px;background:white;border:1px solid #ccbfbd;border-radius:8px;color:var(--ink);font-size:16px;min-height:44px}textarea{resize:vertical}input[type=checkbox]{width:19px;min-height:19px;height:19px;accent-color:var(--plum)}.check{display:inline-flex;flex-direction:row;align-items:center;gap:8px;white-space:nowrap}.fields{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 14px}.fields .wide{grid-column:span 2}.fields .full{grid-column:1/-1}.editrow{margin:12px 0}.editrow .rowtop{margin-bottom:15px}.filename{overflow-wrap:anywhere;font-weight:650}.warn,.error{color:#8c462e}.warn{background:#f8ead7;border-radius:6px;padding:2px 7px;display:inline-block;font-size:14px;margin:4px 0}.error{margin:10px 0;white-space:pre-line}.money{font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap;color:var(--plum)}.sum{font-size:23px}.sticky{position:sticky;bottom:8px;background:#fcfaf7f7;margin-top:18px;z-index:2;box-shadow:0 5px 16px #37213314}.scroll{overflow:auto}table{width:100%;border-collapse:collapse;font-size:15px}th,td{padding:11px 10px;border-bottom:1px solid #e8e0d7;text-align:left;white-space:nowrap}th{color:var(--muted);font-size:14px;background:#f8f4ef}td.note{white-space:normal;min-width:110px;overflow-wrap:anywhere}.table-btn{min-height:34px;font-size:15px;padding:4px 10px}.toolbar{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin:15px 0}.toolbar input,.toolbar select{width:auto;max-width:100%}.toolbar label{min-width:130px}.back{display:inline-block;text-decoration:none;color:var(--plum);margin-bottom:14px}.group h3{font-size:23px}.group h4{margin:18px 0 6px}.paycodes{display:flex;gap:14px;flex-wrap:wrap}.paycodes figure{margin:12px 0 0;color:var(--muted);font-size:15px}.qr{width:150px;height:150px;object-fit:contain;background:white;border:1px solid var(--line);border-radius:6px}.group .total{border-top:1px solid var(--line);padding-top:12px;margin-top:12px}.metrics{display:flex;gap:10px;flex-wrap:wrap}.metric{padding:15px 22px;border-radius:13px;background:#eee6ee;flex:1;min-width:150px}.metric strong{display:block;font-size:26px}.subtext{font-size:15px;color:var(--muted)}dialog{width:min(580px,94vw);max-height:88dvh;padding:24px;color:var(--ink);border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 18px 85px #24132144}dialog::backdrop{background:#332b3766}dialog .fields{grid-template-columns:repeat(2,minmax(0,1fr))}dialog form>.actions{justify-content:flex-end;margin-top:20px}#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#49384b;color:white;padding:11px 20px;border-radius:12px;display:none;z-index:10;max-width:90vw}#toast.show{display:block}details{margin:12px 0}summary{font-weight:650}button svg,.button svg,.quiet svg{width:19px;height:19px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round}.compact{margin:10px 0}.hidden,[hidden]{display:none!important}
@media(max-width:850px){.top,main{padding-left:22px;padding-right:22px}.top{gap:12px;flex-wrap:wrap;height:auto;min-height:68px;padding-top:10px;padding-bottom:9px}.top nav{order:3;flex-basis:100%;justify-content:flex-start;overflow-x:auto}.top nav:empty{display:none}#identity{margin-left:auto}nav a{padding:6px 13px}.fields{grid-template-columns:repeat(2,minmax(0,1fr))}.shelf{gap:12px}.book-meta{padding:12px}.book-meta h3{font-size:20px}.workspace{grid-template-columns:1.42fr 1fr}.art{opacity:.4}.date{font-size:14px}.top .brand{font-size:24px}}
@media(max-width:600px){main{padding:23px 15px 65px}.top{padding-left:15px;padding-right:15px}.byline{font-size:14px}.pagehead,.sectionhead{align-items:flex-start;flex-wrap:wrap;gap:8px}.pagehead{margin-bottom:18px}.date{display:none}.workspace{grid-template-columns:1fr;gap:10px}.upload,.manual{min-height:150px;padding:20px;gap:14px}.manual{min-height:auto;flex-direction:row;align-items:center}.manual h2,.upload h2{font-size:23px}.manual p,.upload p{font-size:15px}.manual .art{display:none}.manual button{white-space:nowrap}.sectionhead{margin-top:25px}.sectionhead h2{font-size:26px}.shelf{grid-template-columns:1fr}.book-card{display:flex;align-items:stretch}.artcover{width:32%;height:105px}.book-meta{flex:1;padding:13px}.book-meta h3{font-size:22px}.panel,.group,.editrow{padding:15px}.rowtop,.total,.panelhead{flex-wrap:wrap}.login-wrap{grid-template-columns:1fr;margin:1vh auto}.login-art{height:115px;background-position:center 60%}.fields{gap:10px}.login-card{padding:24px}.sticky{position:static}.toolbar input{width:100%}.group .scroll{margin:0 -4px}.actions{gap:7px}.wide{grid-column:1/-1}}
