:root{--bg:#f6f4f0;--paper:#fff;--ink:#242321;--muted:#8f8c86;--line:#e8e4df;--orange:#b95b37;--orange-dark:#914528;--sage:#798e74;--blue:#587a8c;--serif:'Noto Serif SC',serif;--sans:'Manrope','PingFang SC',sans-serif;--mono:'DM Mono',monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans)}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{display:flex;min-height:100vh}.sidebar{width:242px;background:#292825;color:#eee8df;padding:34px 25px 24px;display:flex;flex-direction:column;flex-shrink:0}.brand{display:flex;align-items:center;gap:9px;font-size:20px;font-weight:800;letter-spacing:.04em}.brand-mark{font-size:29px;color:#dd805a;line-height:1}.brand small{font-family:var(--mono);color:#89847c;font-size:8px;letter-spacing:.16em;margin-left:2px;margin-top:4px}nav{margin-top:74px}.nav-item{display:flex;align-items:center;gap:14px;height:49px;padding:0 13px;color:#9e9992;text-decoration:none;font-size:13px;border-radius:9px;margin-bottom:5px}.nav-item span{font-size:20px;color:#aaa49d;width:20px;text-align:center}.nav-item b{font:11px var(--mono);margin-left:auto;color:#77736d}.nav-item.active{color:#fff;background:#3b3935}.nav-item.active span{color:#de825d}.nav-item.active b{color:#db7d58}.sidebar-bottom{margin-top:auto}.quote{font-family:var(--serif);font-size:12px;line-height:1.8;color:#827d74;padding:17px 5px 24px;border-bottom:1px solid #46433e}.profile{display:flex;align-items:center;gap:10px;padding:19px 2px 0}.avatar{width:29px;height:29px;border-radius:50%;background:#cb7752;display:grid;place-items:center;color:#fff;font-size:11px;font-weight:700}.avatar.small{width:32px;height:32px;background:#dfb092;color:#653522}.profile strong{display:block;font-size:10px;letter-spacing:.1em}.profile span{font-size:9px;color:#77736d}.profile i{margin-left:auto;color:#77736d}.main-content{max-width:1390px;width:100%;padding:0 5.5% 90px}.topbar{height:88px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.breadcrumb,.eyebrow{font:10px var(--mono);letter-spacing:.14em;color:#a09b93}.breadcrumb span{padding:0 8px;color:#ccc5bd}.top-actions{display:flex;align-items:center;gap:18px}.icon-btn{border:0;background:none;font-size:22px;color:#807b74;position:relative}.icon-btn em{width:5px;height:5px;background:var(--orange);border-radius:50%;position:absolute;top:3px;right:1px}.hero-section{display:flex;align-items:end;justify-content:space-between;padding:56px 0 31px}.hero-section h1{font-family:var(--serif);font-size:38px;line-height:1.2;margin:12px 0 5px;font-weight:600;letter-spacing:-.04em}.hero-section h1 span{font:22px var(--sans);color:var(--orange);vertical-align:top;margin-left:7px}.subtle{color:#9c9891;font-size:14px;margin:0}.primary-btn,.secondary-btn{border:0;border-radius:6px;padding:13px 17px;font-size:12px;font-weight:700}.primary-btn{color:#fff;background:var(--orange);box-shadow:0 5px 14px #b95b3720}.primary-btn:hover{background:var(--orange-dark)}.primary-btn span{font-size:18px;vertical-align:-1px;margin-right:7px}.secondary-btn{color:var(--orange);background:#f7ebe5;border:1px solid #eed6cc}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px}.stat-card{background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:20px 21px 16px;min-height:144px}.stat-card.accent{border-top:2px solid var(--orange)}.stat-label{color:#99958e;font-size:11px;display:flex;justify-content:space-between}.stat-label span{font-size:16px;color:#c5b9af}.stat-card strong{display:block;font:34px var(--serif);margin-top:17px}.stat-card strong small{font:11px var(--sans);color:#aaa49d}.stat-card .text-stat{font-size:24px;margin-top:22px}.stat-foot{font-size:10px;color:#aaa49d;margin-top:13px}.stat-foot.positive{color:#6c8c71}.stat-foot.positive span{color:#aaa49d;margin-left:4px}.dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#d29b56;margin-right:5px}.content-grid{display:grid;grid-template-columns:1.25fr .75fr;gap:13px;margin-top:42px}.panel{background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:24px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between}.panel-head h2{font:600 21px var(--serif);margin:8px 0 0;letter-spacing:-.025em}.panel-head a{color:var(--orange);text-decoration:none;font-size:11px;margin-top:8px}.panel-head a span{font-size:16px;margin-left:4px}.brew-list{margin-top:19px}.brew-row{display:grid;grid-template-columns:39px 1fr auto;align-items:center;gap:13px;border-top:1px solid var(--line);padding:14px 0}.bean-thumb{width:39px;height:39px;border-radius:5px;background:#dfc2a9;color:#86533b;display:grid;place-items:center;font-family:var(--serif);font-size:17px}.brew-name{font-size:12px;font-weight:700}.brew-details{color:#a19c94;font-size:10px;margin-top:5px}.brew-note{font-size:10px;color:#9a958d;margin-top:3px}.brew-time{font:11px var(--mono);color:#8b877f;text-align:right}.aging-list{margin-top:19px}.aging-row{border-top:1px solid var(--line);padding:15px 0}.aging-top{display:flex;justify-content:space-between;font-size:12px}.aging-top span{color:var(--orange);font:10px var(--mono)}.aging-bar{height:5px;background:#eeeae5;border-radius:5px;margin:11px 0 7px;overflow:hidden}.aging-bar i{height:100%;display:block;background:#d38b62;border-radius:5px}.aging-foot{display:flex;justify-content:space-between;color:#aaa49c;font-size:10px}.curve-panel{margin-top:13px}.curve-meta{font-size:10px;color:#a09b93;display:flex;gap:7px;align-items:center;margin-top:9px}.curve-meta strong{font:11px var(--mono);color:#68635e;margin-right:12px}.legend{width:7px;height:7px;border-radius:50%;display:inline-block}.legend.temp{background:var(--orange)}.legend.flow{background:var(--blue)}.chart-wrap{margin-top:23px;height:220px;position:relative}.chart-wrap svg{width:100%;height:190px;overflow:visible}.grid-lines path{stroke:#eeeae5;stroke-width:1}.curve-area{fill:url(#area)}.curve-line{fill:none;stroke:var(--orange);stroke-width:3;vector-effect:non-scaling-stroke}.curve-line+circle,.chart-wrap circle{fill:var(--orange);stroke:#fff;stroke-width:2}.axis{display:flex;justify-content:space-between;color:#bbb5ad;font:10px var(--mono);padding-top:8px}.beans-section{margin-top:13px}.bean-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:22px}.bean-card{border:1px solid var(--line);border-radius:6px;padding:15px;position:relative}.bean-card.cover{background:#fbf7f2}.bean-card h3{font:600 17px var(--serif);margin:12px 0 4px}.bean-card p{margin:0;color:#9e9992;font-size:10px}.bean-top{display:flex;justify-content:space-between;align-items:center}.bean-origin{font:10px var(--mono);color:var(--orange)}.bean-status{font-size:9px;padding:4px 7px;border-radius:12px;background:#f3e9df;color:#aa6c48}.bean-status.ready{background:#e9f0e8;color:#69806a}.bean-meta{display:flex;gap:15px;margin-top:19px;padding-top:12px;border-top:1px solid var(--line);color:#aaa49d;font-size:10px}.bean-meta strong{display:block;color:#615d57;font:12px var(--mono);margin-top:3px}.modal-backdrop{display:none;position:fixed;inset:0;background:#29282566;z-index:10;align-items:center;justify-content:center;padding:20px}.modal-backdrop.open{display:flex}.modal{width:min(560px,100%);background:#fff;border-radius:8px;padding:32px;position:relative;box-shadow:0 20px 70px #29282544}.modal h2{font:600 27px var(--serif);margin:10px 0 25px}.close{position:absolute;right:18px;top:14px;background:none;border:0;font-size:25px;color:#9b958d}.modal form{display:grid;gap:17px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:13px}label{display:grid;gap:7px;font-size:11px;color:#807b74}input,select,textarea{border:1px solid var(--line);border-radius:5px;background:#fcfbfa;padding:11px 12px;color:var(--ink);outline:none;font-size:12px}input:focus,select:focus,textarea:focus{border-color:#c7886e}textarea{min-height:84px;resize:vertical}.full{width:100%;margin-top:5px}
@media(max-width:980px){.sidebar{width:190px}.main-content{padding:0 3% 60px}.stats-grid{grid-template-columns:repeat(2,1fr)}.content-grid{grid-template-columns:1fr}.bean-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:650px){.sidebar{width:64px;padding:24px 10px}.brand{justify-content:center}.brand>span:not(.brand-mark),.brand small,.nav-item{font-size:0}.nav-item{justify-content:center;padding:0}.nav-item span{font-size:20px}.nav-item b,.sidebar-bottom{display:none}.main-content{padding:0 16px 45px}.topbar{height:66px}.breadcrumb{font-size:8px}.hero-section{display:block;padding:35px 0 25px}.hero-section h1{font-size:31px}.hero-section .primary-btn{margin-top:25px;width:100%}.stats-grid{gap:9px}.stat-card{padding:15px;min-height:125px}.stat-card strong{font-size:28px;margin-top:14px}.stat-card .text-stat{font-size:18px;margin-top:19px}.stat-foot{font-size:9px}.panel{padding:17px}.panel-head h2{font-size:18px}.curve-meta{display:none}.bean-grid{grid-template-columns:1fr}.form-row{grid-template-columns:1fr}.modal{padding:24px}.beans-section{display:block}}
.section-hint{margin:7px 0 0;color:#aaa49d;font-size:10px}.curves-section{margin-top:13px}.curve-card{cursor:pointer;transition:transform .15s,box-shadow .15s}.curve-card:hover{transform:translateY(-2px);box-shadow:0 7px 18px #2928250d}.curve-history-head{border-top:1px solid var(--line);margin-top:25px;padding-top:20px}.curve-history-head h3{font:600 16px var(--serif);margin:7px 0 0}.history-list{margin-top:12px}.history-row{display:grid;grid-template-columns:1fr 1fr 1.2fr;gap:15px;border-top:1px solid var(--line);padding:13px 0;align-items:center}.history-row strong{display:block;font-size:11px}.history-row span{display:block;color:#aaa49d;font-size:10px;margin-top:5px}.history-row p{margin:0;color:#858078;font-size:10px}.empty-history{border-top:1px solid var(--line);padding:15px 0;color:#aaa49d;font-size:11px}@media(max-width:650px){.history-row{grid-template-columns:1fr;gap:8px}}
.profile-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:13px}.profile-tags span{background:#f3e9df;color:#91634e;border-radius:12px;padding:5px 8px;font:9px var(--mono)}
.bean-card-clickable{cursor:pointer;transition:transform .15s,box-shadow .15s}.bean-card-clickable:hover{transform:translateY(-2px);box-shadow:0 7px 18px #2928250d}
.history-row small{display:block;color:#b08a73;font:9px var(--mono);margin-top:5px}
.content-grid.single-panel{grid-template-columns:1fr}
.overview-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin:0 0 42px}.overview-card{background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:18px 19px;text-decoration:none;color:var(--ink);transition:transform .15s,box-shadow .15s}.overview-card:hover{transform:translateY(-2px);box-shadow:0 7px 18px #2928250d}.overview-card-top{display:flex;justify-content:space-between;align-items:center}.overview-arrow{color:var(--orange);font-size:18px}.overview-card h3{font:600 18px var(--serif);margin:15px 0 8px}.overview-card p{font-size:11px;color:#807b74;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.overview-card small{display:block;color:#b09b8e;font-size:10px;margin-top:16px}@media(max-width:980px){.overview-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:650px){.overview-grid{grid-template-columns:1fr;gap:9px;margin-bottom:30px}}
.brew-history-panel{margin-top:13px}
.panel-actions{display:flex;align-items:center;gap:9px}.inline-search{width:210px;padding:10px 11px;font-size:11px}.inline-search::placeholder{color:#b3ada5}@media(max-width:650px){.panel-actions{width:100%;margin-top:12px}.panel-actions .inline-search{flex:1;width:auto}.panel-head{flex-wrap:wrap}}
.overview-panels{display:grid;grid-template-columns:1.2fr .9fr .9fr;gap:13px;margin:0 0 42px}.overview-panel{min-width:0}.overview-list{margin-top:15px}.overview-row{display:flex;justify-content:space-between;align-items:center;gap:10px;border-top:1px solid var(--line);padding:11px 0}.overview-row div{min-width:0}.overview-row strong{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overview-row span{display:block;color:#aaa49d;font-size:9px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overview-row em{font:10px var(--mono);font-style:normal;color:#9a6b55;white-space:nowrap}@media(max-width:980px){.overview-panels{grid-template-columns:1fr 1fr}.overview-panel:first-child{grid-column:1 / -1}}@media(max-width:650px){.overview-panels{grid-template-columns:1fr;gap:9px;margin-bottom:30px}.overview-panel:first-child{grid-column:auto}}
.route-hidden{display:none!important}
.curve-panel{display:none!important}
.text-btn{border:0;background:none;color:var(--orange);font-size:10px;padding:10px 0 0}
.temporary-grind-row{display:none;grid-template-columns:repeat(3,1fr);gap:10px;padding:0 0 4px;align-items:end}.temporary-grind-row.show{display:grid}.temporary-grind-row label{font-size:10px}.temporary-grind-row input{min-width:0;padding:11px 9px;font-size:11px}.scheme-line{grid-template-columns:1fr 1fr}@media(max-width:650px){.temporary-grind-row{grid-template-columns:1fr}.temporary-grind-row.show{display:grid}.scheme-line{grid-template-columns:1fr}}
.grind-config-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.7fr);align-items:start}.grind-config-row:has(.temporary-grind-row.show){grid-template-columns:minmax(0,.85fr) minmax(0,.85fr) minmax(0,1.8fr)}@media(max-width:650px){.grind-config-row{grid-template-columns:1fr}.grind-config-row:has(.temporary-grind-row.show){grid-template-columns:1fr}}
.full-form-row{grid-template-columns:1fr!important}
.modal{width:min(760px,100%)}
.curve-preview{display:block;width:100%;max-height:260px;object-fit:contain;object-position:left center;margin-top:10px;border:1px solid var(--line);border-radius:6px;background:#faf8f5;padding:8px}
.grinder-card{grid-column:1/-1;border:1px solid var(--line);border-radius:7px;background:#fbf7f2;padding:20px}.grinder-card-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.grinder-card h3{font:600 20px var(--serif);margin:8px 0 4px}.grinder-card p{margin:0;color:#9e9992;font-size:10px}.grinder-card-actions{display:flex;align-items:center;gap:15px}.profile-list{margin-top:18px;border-top:1px solid var(--line)}.profile-row{display:grid;grid-template-columns:minmax(180px,.8fr) 1.8fr;gap:20px;align-items:center;padding:14px 0;border-bottom:1px solid var(--line)}.profile-row>div:first-child strong{display:block;font-size:12px}.profile-row>div:first-child span{display:block;color:#aaa49d;font-size:10px;margin-top:5px}.profile-param{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.profile-param span{color:#aaa49d;font-size:10px}.profile-param strong{display:block;color:#615d57;font:12px var(--mono);margin-top:4px}@media(max-width:650px){.grinder-card{padding:15px}.grinder-card-head{display:block}.grinder-card-actions{justify-content:space-between;margin-top:12px}.profile-row{grid-template-columns:1fr;gap:10px}.profile-param{gap:7px}.profile-param span{font-size:9px}.profile-param strong{font-size:10px}}
.profile-actions{display:flex;gap:8px;justify-content:flex-end}.text-btn.danger{color:#b25745}@media(max-width:650px){.profile-actions{justify-content:flex-start}}
.profile-row{grid-template-columns:minmax(170px,1fr) minmax(300px,2fr) auto;gap:14px;padding:11px 0}.profile-name strong{font-size:12px}.profile-param{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;min-width:0}.profile-actions{min-width:92px}@media(max-width:650px){.profile-row{grid-template-columns:1fr;gap:10px}.profile-actions{min-width:0}}
.bean-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.compact-select{min-width:112px;padding:10px 10px;font-size:11px}.bean-table{display:block;margin-top:20px;border-top:1px solid var(--line)}.bean-list-row{width:100%;display:grid;grid-template-columns:minmax(210px,1.45fr) minmax(150px,1fr) 90px 80px 22px;gap:16px;align-items:center;text-align:left;border:0;border-bottom:1px solid var(--line);background:transparent;padding:14px 5px;color:var(--ink);cursor:pointer}.bean-list-row:hover,.bean-list-row.selected{background:#fbf7f2}.bean-list-row b{font-size:12px}.bean-list-row small{display:block;color:#aaa49d;font-size:10px;margin-top:5px}.bean-list-name strong{font-size:13px}.bean-list-process{color:#817b74;font-size:11px}.bean-list-rest{text-align:right}.bean-list-rest b{font:14px var(--mono);color:var(--orange)}.bean-list-rest small{color:#9b958d}.bean-list-count{text-align:right}.bean-list-count b{font:18px var(--serif);color:#615d57}.bean-list-arrow{color:var(--orange);font-size:18px}.history-hint{color:#aaa49d;font-size:10px;margin-top:9px}.load-more{display:block;width:100%;border:1px solid var(--line);border-radius:5px;background:#fbf7f2;color:var(--orange);padding:10px;margin-top:12px;font-size:11px}@media(max-width:650px){.bean-controls{display:grid;grid-template-columns:1fr 1fr}.bean-controls .inline-search,.bean-controls .secondary-btn{grid-column:1/-1;width:100%}.compact-select{width:100%;min-width:0}.bean-list-row{grid-template-columns:1fr auto;gap:7px 12px}.bean-list-process{grid-column:1}.bean-list-rest{grid-column:2;grid-row:1 / span 2}.bean-list-count{grid-column:1;text-align:left}.bean-list-arrow{grid-column:2;grid-row:3;text-align:right}}
.grinder-card-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px}.grinder-card-actions .text-btn,.profile-actions .text-btn{white-space:nowrap;border:1px solid #e7cfc3;border-radius:5px;background:#fff8f4;color:var(--orange);padding:8px 11px;font-size:11px;line-height:1}.grinder-card-actions .text-btn:hover,.profile-actions .text-btn:hover{background:#f7e8df;border-color:#d9a58f}.grinder-card-actions .text-btn.danger,.profile-actions .text-btn.danger{color:#a94d3b;border-color:#e4c2b8;background:#fff8f6}.grinder-card-actions .text-btn.danger:hover,.profile-actions .text-btn.danger:hover{background:#f8e4df;border-color:#cf9484}.profile-actions{gap:7px;min-width:112px}.profile-actions .text-btn{padding:7px 10px}.profile-name strong{font-size:15px;font-weight:700}
.grinder-card-actions .order-btn{color:#806b5e;background:#f7f3ee;border-color:#ded4ca}.grinder-card-actions .order-btn:disabled{opacity:.35;cursor:not-allowed}.grinder-card-actions .order-btn:not(:disabled):hover{background:#eee5dc}
nav{margin-top:18px}
.curve-list-item{grid-template-columns:minmax(180px,1.2fr) minmax(180px,1fr) 70px auto;cursor:default}.curve-open-btn{display:block;width:100%;border:0;background:transparent;color:inherit;text-align:left;padding:0;cursor:pointer}.curve-open-btn:hover{text-decoration:underline}.curve-list-actions{display:flex;gap:7px;justify-content:flex-end}.curve-list-actions .text-btn{white-space:nowrap;border:1px solid #e7cfc3;border-radius:5px;background:#fff8f4;color:var(--orange);padding:7px 10px;font-size:10px;line-height:1}.curve-list-actions .text-btn:hover{background:#f7e8df}.curve-list-actions .danger{color:#a94d3b;border-color:#e4c2b8;background:#fff8f6}.revision-list{margin-top:12px}.revision-row{display:grid;grid-template-columns:80px 1fr;gap:15px;border-top:1px solid var(--line);padding:10px 0;font-size:10px}.revision-row strong{font:12px var(--mono);color:var(--orange)}.revision-row span{color:#9b958d}@media(max-width:650px){.curve-list-item{grid-template-columns:1fr auto;gap:8px}.curve-list-main{grid-column:1}.curve-list-plan{grid-column:1}.curve-list-count{grid-column:2;grid-row:1 / span 2}.curve-list-actions{grid-column:1 / -1;justify-content:flex-start}.revision-row{grid-template-columns:1fr;gap:4px}}
.extraction-group{margin-top:22px}.extraction-group+.extraction-group{margin-top:30px}.extraction-group-head{display:flex;align-items:end;justify-content:space-between;padding:0 4px 11px;border-bottom:1px solid var(--line)}.extraction-group-head h3{font:600 17px var(--serif);margin:0}.extraction-group-head span{color:#aaa49d;font-size:10px}.extraction-group .curve-list-item{grid-template-columns:minmax(210px,1.5fr) minmax(180px,1fr) 70px auto}.curve-list-preview{height:58px;border-radius:5px;overflow:hidden;background:#f7f4ef!important;text-align:center!important;color:#aaa49d!important;font-size:10px}.curve-list-preview img{display:block;width:100%;height:100%;object-fit:cover}.revision-row img{width:80px;height:48px;object-fit:cover;border:1px solid var(--line);border-radius:4px}.revision-empty{width:80px;height:48px;display:grid;place-items:center;background:#f7f4ef;border-radius:4px}@media(max-width:650px){.extraction-group-head{display:block}.extraction-group-head span{display:block;margin-top:5px}.extraction-group .curve-list-item{grid-template-columns:1fr auto}.curve-list-preview{grid-column:1;height:72px}.curve-list-count{grid-column:2;grid-row:1 / span 2}.curve-list-actions{grid-column:1 / -1}}
.curves-section .bean-grid{grid-template-columns:1fr;gap:0;border-top:1px solid var(--line);margin-top:20px}.curve-list-item{width:100%;display:grid;grid-template-columns:minmax(180px,1.2fr) minmax(180px,1fr) 70px;gap:18px;align-items:center;text-align:left;border:0;border-bottom:1px solid var(--line);background:transparent;padding:15px 4px;color:var(--ink);cursor:pointer}.curve-list-item:hover{background:#fbf7f2}.curve-list-main strong,.curve-list-plan,.curve-list-count{font-size:12px;font-weight:700}.curve-list-item small{display:block;color:#aaa49d;font-size:10px;font-weight:400;margin-top:5px}.curve-list-plan{color:#8b6d5c;font:11px var(--mono)}.curve-list-count{text-align:right;color:var(--orange);font:18px var(--serif)}.curve-list-count small{font-family:var(--sans);text-align:right}.curves-section .history-list{max-height:620px;overflow:auto;padding-right:8px}.curves-section .curve-history-head{display:flex;align-items:end;justify-content:space-between}@media(max-width:650px){.curve-list-item{grid-template-columns:1fr auto;gap:8px}.curve-list-plan{grid-column:1}.curve-list-count{grid-column:2;grid-row:1 / span 2}.curves-section .history-list{max-height:520px}}
.bean-list-row{grid-template-columns:minmax(210px,1.45fr) minmax(150px,1fr) 90px 80px 112px 22px}.bean-list-actions{display:flex;gap:7px;justify-content:flex-end}.bean-list-actions .text-btn{white-space:nowrap;border:1px solid #e7cfc3;border-radius:5px;background:#fff8f4;color:var(--orange);padding:7px 10px;font-size:10px;line-height:1}.bean-list-actions .text-btn:hover{background:#f7e8df;border-color:#d9a58f}.bean-list-actions .text-btn.danger{color:#a94d3b;border-color:#e4c2b8;background:#fff8f6}.bean-list-actions .text-btn.danger:hover{background:#f8e4df;border-color:#cf9484}@media(max-width:650px){.bean-list-actions{grid-column:1;justify-content:flex-start}.bean-list-arrow{grid-column:2;grid-row:3}}
.brew-entry-actions{display:flex;align-items:center;gap:9px}.brew-entry-actions .secondary-btn{padding:13px 17px}.brew-entry-actions span{font-size:17px;vertical-align:-1px;margin-right:4px}@media(max-width:650px){.hero-section .brew-entry-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:25px;gap:8px}.hero-section .brew-entry-actions .primary-btn,.hero-section .brew-entry-actions .secondary-btn{width:100%;margin-top:0}}
.bean-image-preview{display:block;width:100%;max-height:260px;object-fit:contain;object-position:left center;border:1px solid var(--line);border-radius:6px;background:#faf8f5;padding:8px}.bean-list-identity{display:flex;align-items:center;gap:11px;min-width:0}.bean-list-identity>span{min-width:0}.bean-list-identity img,.bean-image-empty{width:52px;height:52px;flex:0 0 52px;border-radius:6px;object-fit:cover;background:#efe5dc}.bean-image-empty{display:grid;place-items:center;color:#a66b50;font:20px var(--serif);font-style:normal}.bean-list-identity strong,.bean-list-identity small,.bean-flavor{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bean-list-process{min-width:0}.bean-list-process strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:650px){.bean-list-identity img,.bean-image-empty{width:46px;height:46px;flex-basis:46px}.bean-list-process{grid-column:1 / -1}.bean-list-actions{grid-row:auto}.bean-list-arrow{grid-row:4}}
.brew-record-actions{flex-wrap:wrap;justify-content:flex-end}.brew-record-actions .primary-btn,.brew-record-actions .secondary-btn{padding:11px 15px;white-space:nowrap}.brew-record-actions span{font-size:16px;vertical-align:-1px;margin-right:3px}@media(max-width:650px){.brew-record-actions{display:grid;grid-template-columns:1fr 1fr}.brew-record-actions .inline-search{grid-column:1 / -1;width:100%}.brew-record-actions .primary-btn,.brew-record-actions .secondary-btn{width:100%}}
@media(max-width:650px){
  .app-shell{display:block;min-height:100dvh}
  .sidebar{position:fixed;left:0;right:0;top:auto;bottom:0;z-index:50;width:100%;height:calc(66px + env(safe-area-inset-bottom));padding:6px 8px env(safe-area-inset-bottom);display:block}
  .sidebar nav{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;height:54px;margin:0}
  .nav-item{height:54px;margin:0;padding:5px 2px;display:flex;flex-direction:column;justify-content:center;gap:3px;font-size:10px;line-height:1;border-radius:8px}
  .nav-item span{width:auto;font-size:18px;line-height:1}
  .nav-item b,.sidebar-bottom{display:none}
  .main-content{width:100%;max-width:none;padding:12px 12px calc(84px + env(safe-area-inset-bottom));overflow-x:hidden}
  .panel{padding:15px;border-radius:10px}
  .beans-section,.curves-section,.brew-history-panel{margin-top:0}
  .panel-head{gap:10px}
  .panel-head h2{font-size:22px}
  .panel-actions{width:100%;margin-top:12px}
  .primary-btn,.secondary-btn,.compact-select,.inline-search{min-height:44px}
  .text-btn{min-height:38px;padding:9px 11px!important}
  .add-second-grind{min-height:42px;padding:8px 2px;font-size:12px}
  input,select,textarea{font-size:16px;min-height:44px}
  textarea{min-height:96px}
  label{font-size:12px}
  .history-list{margin-top:14px}
  .history-row{gap:9px;padding:14px 2px}
  .history-row strong{font-size:12px}
  .history-row span,.history-row p{font-size:11px;line-height:1.55}
  .bean-list-row{grid-template-columns:minmax(0,1fr) auto;gap:10px 12px;padding:14px 3px}
  .bean-list-identity{grid-column:1;grid-row:1}
  .bean-list-rest{grid-column:2;grid-row:1;align-self:start}
  .bean-list-process{grid-column:1 / -1;grid-row:2;padding-left:57px}
  .bean-list-count{grid-column:1;grid-row:3;display:flex;align-items:center;gap:4px;text-align:left;padding-left:57px}
  .bean-list-count b{font:13px var(--sans);font-weight:700}
  .bean-list-count small{margin:0}
  .bean-list-actions{grid-column:2;grid-row:3;justify-content:flex-end;padding-top:0}
  .bean-list-arrow{display:none}
  .curve-list-actions,.profile-actions{gap:8px}
  .grinder-card-actions{justify-content:flex-start}
  #grinders .panel-actions{display:grid;grid-template-columns:1fr 1fr}
  #grinders .panel-actions .inline-search{grid-column:1 / -1;width:100%}
  #grinders .panel-actions .secondary-btn{width:100%}
  .modal-backdrop{z-index:100;align-items:flex-end;padding:0;overflow:hidden}
  .modal{width:100%;max-height:calc(100vh - 8px);max-height:calc(100dvh - 8px);overflow-y:auto;overscroll-behavior:contain;border-radius:16px 16px 0 0;padding:26px 18px calc(28px + env(safe-area-inset-bottom))}
  .modal h2{font-size:25px;margin:7px 0 21px;padding-right:38px}
  .modal form{gap:14px}
  .close{width:44px;height:44px;right:9px;top:8px;z-index:2}
  .curve-preview,.bean-image-preview{max-height:220px}
}
.modal>.eyebrow{display:none}
.second-grind-line{display:none}.second-grind-line.show{display:grid}.add-second-grind{justify-self:start;border:0;background:transparent;color:var(--orange);padding:4px 0;font-size:11px;font-weight:700}
@media(min-width:651px){
  .sidebar{width:190px;padding:18px 14px 24px}
  .sidebar nav{margin-top:0}
  .nav-item{height:44px;margin-bottom:3px;padding:0 12px;gap:11px;font-size:13px}
  .nav-item span{font-size:17px}
  .main-content{max-width:none;padding:14px 28px 64px}
  .panel{padding:20px;border-radius:10px}
  .panel-head{align-items:center;gap:18px}
  .panel-head h2{font-size:24px;margin:0}
  .panel-actions{gap:8px}
  .inline-search{width:230px;font-size:12px;padding:10px 12px}
  .compact-select{font-size:12px}
  .primary-btn,.secondary-btn{min-height:40px;padding:10px 15px;font-size:12px}
  .beans-section,.curves-section,.brew-history-panel{margin-top:0}
  .bean-grid,.bean-table,.curves-section .bean-grid{margin-top:14px}
  .history-list{margin-top:10px}
  .history-row{grid-template-columns:180px minmax(280px,1fr) minmax(300px,1.2fr);gap:20px;padding:14px 2px}
  .history-row strong{font-size:13px}
  .history-row span{font-size:11px;margin-top:4px}
  .history-row p{font-size:11px;line-height:1.55}
  .history-row small{font-size:10px;line-height:1.45}
  .bean-list-row{gap:14px;padding:12px 6px}
  .bean-list-name strong{font-size:14px}
  .bean-list-row small{font-size:11px;margin-top:4px}
  .bean-list-process{font-size:12px}
  .bean-list-identity img,.bean-image-empty{width:48px;height:48px;flex-basis:48px}
  .curve-history-head{margin-top:18px;padding-top:16px}
  .curve-history-head h3{font-size:17px;margin:0}
  .extraction-group{margin-top:16px}
  .extraction-group+.extraction-group{margin-top:22px}
  .extraction-group-head{padding-bottom:9px}
  .extraction-group-head h3{font-size:16px}
  .curve-list-item{padding:12px 4px}
  .curve-list-main strong{font-size:13px}
  .curve-list-preview{height:52px}
  .grinder-card{padding:16px}
  .grinder-card h3{font-size:21px;margin-top:6px}
  .profile-list{margin-top:12px}
  .profile-row{padding:10px 0}
  .modal h2{margin:0 0 22px}
}
@media(max-width:650px){.add-second-grind{min-height:42px;padding:8px 2px;font-size:12px}}
.bean-extraction-head,.bean-extraction-row{display:grid;grid-template-columns:minmax(90px,.55fr) minmax(120px,.75fr) minmax(170px,1fr) minmax(120px,.7fr) minmax(250px,1.5fr);gap:20px;align-items:center}.bean-extraction-head{padding:8px 2px;color:#aaa49d;font-size:10px;border-bottom:1px solid var(--line)}.bean-extraction-row{padding:14px 2px;border-bottom:1px solid var(--line)}.bean-extraction-row strong{display:block;font-size:13px}.bean-extraction-row span{display:block;color:#aaa49d;font-size:11px;margin-top:4px}.bean-extraction-row p{margin:0;color:#6f6a63;font-size:11px;line-height:1.55}.bean-extraction-row [data-label]::before{display:none}
@media(max-width:650px){.bean-extraction-head{display:none}.bean-extraction-row{grid-template-columns:minmax(0,1fr) auto;gap:10px 14px;padding:14px 2px;align-items:start}.bean-extraction-row>[data-label="萃取类型"]{grid-column:1;grid-row:1}.bean-extraction-row>[data-label="日期"]{grid-column:2;grid-row:1;text-align:right}.bean-extraction-row>[data-label="萃取方案"]{grid-column:1 / -1}.bean-extraction-row>[data-label="咖啡豆克重"]{grid-column:1 / -1}.bean-extraction-row>p{grid-column:1 / -1}.bean-extraction-row [data-label]::before{content:attr(data-label);display:block;color:#aaa49d;font-size:10px;font-weight:400;margin-bottom:4px}.bean-extraction-row>[data-label="日期"]::before{text-align:right}}
.main-content,.panel,#brew .history-list,#beans .bean-table,#beans .history-list{min-width:0;max-width:100%}
@media(min-width:651px){#brew .history-row{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr) minmax(0,1.35fr)}#brew .history-row>*{min-width:0}#brew .history-row strong,#brew .history-row span,#brew .history-row small{overflow-wrap:anywhere}#beans .bean-list-row{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr) 74px 64px auto 18px;gap:10px}#beans .bean-list-row>*{min-width:0}#beans .bean-extraction-head,#beans .bean-extraction-row{grid-template-columns:minmax(0,.55fr) minmax(0,.75fr) minmax(0,1fr) minmax(0,.72fr) minmax(0,1.5fr);gap:14px}#beans .bean-extraction-row>*{min-width:0;overflow-wrap:anywhere}}
@media(min-width:651px) and (max-width:1100px){#brew .panel-head,#beans .panel-head{flex-wrap:wrap}#brew .panel-actions,#beans .panel-actions{width:100%;margin-top:12px;justify-content:flex-start}#beans .bean-controls .inline-search{flex:1;min-width:180px}#beans .bean-list-arrow{display:none}#beans .bean-list-row{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr) 70px 60px auto}}
