/* Match workspace_ui.CSS and the editor's Streamlit column spacing. */
@font-face{font-family:'LXGW WenKai Screen';src:url('./fonts/LXGWWenKaiScreen.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:'Ma Shan Zheng';src:url('./fonts/MaShanZheng-Regular.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:Nunito;src:url('./fonts/Nunito.woff2') format('woff2');font-weight:200 1000;font-display:swap}
@font-face{font-family:Caveat;src:url('./fonts/Caveat.woff2') format('woff2');font-weight:400 700;font-display:swap}
:root{color-scheme:dark;--bg:#241919;--panel:#382524;--text:#F5E6D5;--muted:#CCB5A6;--caption:rgba(245,230,213,.6);--accent:#D8A165;--line:#694A43;--border:rgba(245,230,213,.2);--selected:#573334;--body:Nunito,'LXGW WenKai Screen','Microsoft YaHei',sans-serif;--heading:Nunito,'Ma Shan Zheng','LXGW WenKai Screen',sans-serif;--sidebar:200px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:400 16px/1.6 var(--body)}a{color:inherit;text-decoration:none}button,input,select{font-family:var(--body);font-size:14px;color:inherit}button,.button,summary{cursor:pointer}button,.button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:4px 12px;border:1px solid var(--border);border-radius:8px;background:transparent;font-size:14px;line-height:1.6}button:hover,.button:hover,summary:hover{color:var(--accent);border-color:var(--accent)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,.hero-image:focus-visible{outline:2px solid var(--accent);outline-offset:3px}input,select{height:40px;width:100%;min-width:0;padding:8px 12px;border:1px solid transparent;border-radius:8px;background:transparent}input::placeholder{color:var(--caption)}input:focus,select:focus{background:var(--panel);border-color:var(--line);outline:none}select{appearance:none;cursor:pointer;padding:8px 32px 8px 8px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23F5E6D5' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}option{background:var(--panel)}
#sidebar{position:fixed;inset:0 auto 0 0;z-index:10;width:var(--sidebar);padding:76px 30px 32px;border-right:1px solid var(--border);background:var(--panel);overflow:auto}.brand{display:block;font:400 35.2px/1.15 Caveat,Nunito,cursive;margin:0 0 27.2px}nav{display:grid;gap:10px}nav a{display:flex;align-items:center;width:120px;min-height:56px;padding:14px 18px;border-radius:5px;font-size:16.8px}nav a[aria-current=page]{background:var(--selected);border-left:3px solid var(--accent)}footer{margin-top:43px;border-top:1px solid var(--border);padding-top:28px;color:var(--caption);font-size:14px}footer p{margin:8px 0 12px}footer a:hover{color:var(--accent)}#sidebar-close,#sidebar-open{position:absolute;top:10px;padding:0;width:40px;border:0;color:var(--caption);font-size:24px}#sidebar-close{right:26px}#sidebar-open{position:fixed;left:12px;z-index:9;display:none}body.sidebar-closed{--sidebar:0px}body.sidebar-closed #sidebar{display:none}body.sidebar-closed #sidebar-open{display:inline-flex}
main{margin-left:var(--sidebar);padding:56px 32px 48px;max-width:1920px}h1,h2,h3,h4{font-family:var(--heading);font-weight:400}h1{font-size:29.6px;letter-spacing:.03em;line-height:1.2;padding:20px 0 16px;margin:11.2px 0 -4.8px}h2,h3{font-size:28px;line-height:1.2;letter-spacing:.02em;padding:12px 0 16px;margin:0}h4{font-size:18.4px;line-height:1.2;margin:17.6px 0 6.4px;padding:0}h4:after{content:'';display:block;width:5em;border-bottom:1px solid var(--line);margin-top:8px}.caption,.count,small,.muted{font-size:14px;line-height:22.4px;color:var(--caption)}.caption{margin:-4.8px 0 11.2px}.detail-layout>.detail-body>.caption{margin:0 0 11.2px}.detail-body>.button,#bean-brews{margin-bottom:11.2px}.filters{display:grid;grid-template-columns:1.2fr .8fr 3.2fr 1.25fr 1.1fr .85fr minmax(84px,.8fr);gap:8px;margin-bottom:11.2px}.workspace{display:grid;grid-template-columns:calc(25% - 32px) minmax(0,1fr);gap:64px;align-items:start}body[data-page=beans] .workspace,body[data-page=terms] .workspace{grid-template-columns:calc(25% - 32px) minmax(0,1fr)}#list,#detail,.detail-body{min-width:0}.search-row{display:grid;grid-template-columns:calc(100% * .65 / 3.65 - 8px) minmax(0,1fr);gap:16px;align-items:center;margin-bottom:11.2px}.sort{display:grid;grid-template-columns:2fr 1fr;gap:8px}.count{margin:11.2px 0}.items{height:900px;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}.item{display:block;color:var(--text);padding:4px 12px 4px 18px;border:1px solid var(--border);border-radius:8px;margin:0 0 11.2px;overflow-wrap:anywhere;min-height:40px}.item p{font-size:14.08px;line-height:1.45;margin:0}.item p+p{font-size:12.8px;text-align:right}.item.active{background:var(--accent);border-color:var(--accent);color:var(--bg)}.item:hover{border-color:var(--accent)}
.detail-layout{display:grid;grid-template-columns:calc(100% * 2.2 / 3 - 32px) minmax(0,1fr);gap:64px;align-items:start}.tabs{display:flex;gap:16px;height:40px;border-bottom:2px solid rgba(245,230,213,.1);margin:0}.tabs button{position:relative;border:0;border-radius:0;padding:0;font-family:var(--heading);font-size:18.4px;line-height:1.6;font-weight:400;white-space:nowrap;min-height:40px}.tabs button[aria-selected=true]{color:var(--accent)}.tabs button[aria-selected=true]:after{content:'';position:absolute;bottom:0;left:0;right:0;border-bottom:2px solid var(--accent)}.tab-panel{padding-top:16px}.fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11.2px 16px}.field{display:grid;grid-template-columns:calc(100% / 3.3 - 8px) minmax(0,1fr);gap:16px;min-height:40px;align-items:center}.field .label{line-height:25.6px}.value{display:block;min-width:0;border:1px solid transparent;padding:8px 8px 8px 12px;font:400 14px/19.6px var(--body);white-space:pre-wrap;overflow-wrap:anywhere}.field-empty{min-height:40px}.parameter-section+.parameter-section{margin-top:28.8px}.parameter-section .fields{margin-top:11.2px}.text-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.text-field label,.score label{display:block;font-size:14px;line-height:22.4px;margin:0 0 4px}.text-value{height:190px;overflow:auto;white-space:pre-wrap;font-size:14px;line-height:22.4px;padding:8px 12px;border:1px solid transparent;border-radius:8px;margin:0}.recipe{margin-top:11.2px}hr{border:0;border-top:1px solid var(--border);margin:32px 0}.stages-divider{margin:11.2px 0}.score .value{height:40px;color:var(--text)}.score .missing{color:var(--caption)}
.stage{padding:10px 0 16px;border-bottom:1px solid var(--line);overflow-x:auto;margin-bottom:11.2px}.stage-grid{display:grid;grid-template-columns:.65fr 2.3fr 1.65fr 1.65fr .4fr;gap:11.2px 8px;align-items:center;min-width:570px}.stage strong{font-family:var(--heading);font-weight:400;white-space:nowrap}.stage-timing{display:grid;grid-template-columns:1fr .45fr 1fr;gap:8px;align-items:center}.stage-timing .value:first-child{text-align:right}.stage-arrow{display:flex;align-items:center;justify-content:center;height:40px;color:var(--muted)}.stage-numeric{display:grid;grid-template-columns:1.05fr 1fr;gap:8px;align-items:center;white-space:nowrap}.stage .value{padding-left:5px;padding-right:5px;white-space:nowrap}.stage-technique{text-align:center}
.bean-layout{display:grid;grid-template-columns:minmax(0,1fr) 330.6667px;gap:64px;align-items:start}.bean-layout .fields{gap:12px 16px}.process-values{display:grid;grid-template-columns:1fr 1fr;gap:16px;min-width:0}.bean-photo{width:calc(330.6667px * var(--image-scale,1));max-width:100%}.gallery img{display:block;width:100%;height:auto;border-radius:8px;cursor:zoom-in}.bean-photo img{max-height:330.6667px;object-fit:contain}.gallery select{margin-bottom:11.2px}.photo-placeholder{aspect-ratio:4/3;display:grid;place-items:center;border:1px dashed var(--line);border-radius:8px;color:var(--muted)}.gallery details{margin-top:11.2px}.gallery details select{margin:0}.bean-brews-heading{margin-top:11.2px}.brew-card{display:block;padding:14px;border-top:1px solid var(--line);border-radius:5px;margin-bottom:11.2px}.brew-card .brew-card-text{width:100%;max-width:100%;margin:0;text-align:left}.brew-card p{white-space:pre-wrap;margin:0;font-size:16px;line-height:1.6}.brew-card strong{font-weight:700}.brew-card.best{background:var(--panel);border-left:3px solid var(--accent)}.brew-card:hover{outline:1px solid var(--line)}
details{border:1px solid var(--border);border-radius:8px;margin:11.2px 0 0;font-size:14px}summary{list-style:none;min-height:38px;padding:7px 12px;display:flex;gap:12px;align-items:center}summary::-webkit-details-marker{display:none}summary:before{content:'›';font:20px/1 var(--body);width:12px;text-align:center}details[open]>summary:before{transform:rotate(90deg)}.details-body{padding:12px}.details-body>:first-child{margin-top:0}pre{white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.6 var(--body);margin:0}.supplementary{margin-top:24px}.popover{position:relative;min-width:0}.popover>button{width:100%;gap:6px}.popover-panel{position:absolute;z-index:12;top:calc(100% + 5px);left:0;background:var(--panel);padding:16px;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0005;min-width:100%}.popover-panel[hidden]{display:none}.bean-picker .popover-panel{width:680px;max-width:calc(100vw - 40px)}.bean-options{max-height:420px;overflow:auto;margin-top:11.2px}.bean-options .item{width:100%;text-align:left;display:block}.export-menu{margin-bottom:11.2px}.export-menu .popover-panel{width:280px;max-width:calc(100vw - 40px)}.export-menu .popover-panel button{width:100%;margin-bottom:8px}.empty{padding:24px 0;color:var(--caption)}.narrow-photo{display:none}.skip{position:absolute;top:-80px;z-index:20}.skip:focus{top:8px;left:8px;background:var(--panel);padding:12px}dialog{background:var(--bg);border:1px solid var(--line);max-width:96vw;max-height:96vh;padding:40px 10px 10px}dialog::backdrop{background:#000c}dialog img{max-width:90vw;max-height:82vh;object-fit:contain}#close-image{position:absolute;right:10px;top:0;font-size:24px;border:0}.error{color:#ffc9ac}
/* Streamlit heading, input and text-area defaults affect the rendered geometry. */
h2,h3{letter-spacing:-.005em}
.parameter-section h4{margin-bottom:1.6px}.parameter-section .fields{margin-top:0}
.value{border:0;margin:0 1px}.field .value{white-space:pre;overflow-x:auto;scrollbar-width:none}
.text-field{height:190px}.text-field label,.score label{height:28px;margin:0;display:flex;align-items:flex-start}
.text-value{height:162px;padding:12px;border:1px solid transparent;line-height:19.6px}
.text-fields+hr{margin:43.2px 0 27.2px}.score{height:68px}
.stage-grid{grid-template-rows:40px 40px}
.bean-brews-heading{margin-bottom:-4.8px}.brew-card p{font-size:14px;line-height:22.4px}.brew-card strong{font-weight:600}
@media(min-width:2220px){main{margin-right:auto;margin-left:calc(var(--sidebar) + (100% - var(--sidebar) - 1920px)/2)}}
@media(max-width:1600px){.detail-layout,.bean-layout{grid-template-columns:minmax(0,1fr)}.evidence>.gallery,.bean-photo{display:none}.narrow-photo{display:block;margin-top:11.2px}.narrow-photo .gallery{max-width:460px}.detail-layout{gap:11.2px}.bean-layout{gap:0}}
@media(max-width:1200px){.workspace,body[data-page=beans] .workspace,body[data-page=terms] .workspace{grid-template-columns:minmax(0,1fr);gap:64px}.items{height:360px;max-height:360px}.filters{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:900px){main{padding:56px 16px 16px}}
@media(max-width:640px){body{--sidebar:0px}#sidebar{width:200px;box-shadow:0 0 0 100vmax #0006}#sidebar-open{display:inline-flex}body:not(.sidebar-mobile-open) #sidebar{display:none}.fields,.text-fields{grid-template-columns:minmax(0,1fr)}.field-empty{display:none}.filters{grid-template-columns:repeat(2,minmax(0,1fr))}.tabs{gap:16px}.popover-panel{position:fixed;left:20px;right:20px;top:100px;width:auto!important;min-width:0;max-height:70vh;overflow:auto}h2,h3{overflow-wrap:anywhere}.field{grid-template-columns:calc(100% / 3.3 - 8px) minmax(0,1fr)}}

/* The vocabulary workspace uses the same compact category and alias layout. */
body[data-page=terms] h1{font-family:Caveat,Nunito,cursive}
body[data-page=terms] #filters .caption{margin-bottom:11.2px}
.term-category{margin-bottom:11.2px}.term-category label,.term-name label{display:block;height:28px;font-size:14px}
body[data-page=terms] #list-controls>input{margin-bottom:11.2px}
body[data-page=terms] .count{display:none}body[data-page=terms] .items{height:600px}
body[data-page=terms] .item p{text-align:center;font-size:14px;line-height:22.4px}
body[data-page=terms] .item{padding:8px 12px}.term-name{height:68px;margin-bottom:11.2px}
.alias-label{margin:0 0 11.2px}.alias-label strong{font-weight:600}.alias-label+p{margin:0}
@media(max-width:640px){.field,.search-row{grid-template-columns:minmax(0,1fr);gap:16px}.process-values{grid-template-columns:minmax(0,1fr);gap:16px}.text-fields{gap:11.2px}.fields{gap:16px}.field:nth-child(even){margin-bottom:-4.8px}}
/* Details audited against the editor at desktop, tablet and phone widths. */
.field{align-self:start}.value{min-height:35.6px}
.brew-card.best .brew-card-text{width:100%;margin:0}.brew-card.best p{font-size:16px;line-height:25.6px}
.details-body{padding:16px;border-top:1px solid var(--border)}details[open]>summary{background:rgba(56,37,36,.45)}
.recipe-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:11.2px}
.stack-field{height:68px;min-width:0}.stack-field label{display:block;height:28px;font-size:14px;line-height:22.4px}.stack-field>.value,.term-name>.value{margin-top:2.2px;white-space:pre;overflow:auto;scrollbar-width:none}
.official-recipe .details-body{padding-top:17px}.official-recipe .stage{font-size:16px}
.recipe-other{height:140px}.recipe-other .text-value{height:112px}
.source-entry{margin:0 0 11.2px}.source-entry>.caption{margin:0 0 11.2px}.source-text{white-space:pre-wrap;overflow-wrap:anywhere;font:400 16px/25.6px var(--body)}
#lightbox[open]{position:fixed;inset:0;width:100vw;height:100vh;max-width:none;max-height:none;margin:0;padding:24px;border:0;background:transparent;display:flex;align-items:center;justify-content:center;cursor:zoom-out;outline:none}
#lightbox::backdrop{background:rgba(0,0,0,.78)}#lightbox img{display:block;width:100%;height:100%;max-width:none;max-height:none;object-fit:contain;cursor:zoom-out}#close-image{display:none}
@media(max-width:1600px){.bean-layout .fields{gap:11.2px 16px}}
@media(max-width:640px){.bean-layout .fields{gap:16px}.field{grid-template-rows:auto 40px}.field:has(.process-values){grid-template-rows:auto auto}.process-values{grid-auto-rows:40px}.field:nth-child(even){margin-bottom:0}.field:nth-child(even):not(:last-child){margin-bottom:-4.8px}.recipe-fields{grid-template-columns:minmax(0,1fr)}}
.stage-grid{grid-template-columns:calc(100% * .65 / 6.65 - 6.4px) calc(100% * 2.3 / 6.65 - 6.4px) calc(100% * 1.65 / 6.65 - 6.4px) calc(100% * 1.65 / 6.65 - 6.4px) calc(100% * .4 / 6.65 - 6.4px)}
.stage-timing{grid-template-columns:calc(100% / 2.45 - 5.333333px) calc(100% * .45 / 2.45 - 5.333333px) calc(100% / 2.45 - 5.333333px)}
.stage-numeric{grid-template-columns:calc(100% * 1.05 / 2.05 - 4px) calc(100% / 2.05 - 4px)}
.bean-options .item{padding:10px 18px}

.filters .popover>button{height:40px;white-space:nowrap;overflow:hidden}


.search-controls{display:grid;grid-template-columns:minmax(0,1fr) 32px;gap:4px;min-width:0}.search-controls button{width:32px;padding:0;border:0;background:transparent;box-shadow:none}.search-controls input{min-width:0}#reset-filters{white-space:nowrap;padding:4px 8px}

/* Match the editor's rating guidance and brewing-record typography. */
.rating-row{display:grid;grid-template-columns:calc(25% - 32px) minmax(0,1fr);gap:64px;align-items:start}
.score{height:auto;min-width:0}.score label{height:auto;margin:0 0 4px;font:400 24px/1.6 var(--heading)}
.rating-guide{min-width:0;padding-top:6px}.rating-guide h4{font:400 14px/1.2 var(--body);margin:0;padding:8px 0 16px}.rating-guide h4:after{display:none}
.rating-guide ul{padding:0;margin:0 0 16px}.rating-guide li{padding:0 0 0 4.8px;margin:3.2px 0 3.2px 18.4px;font:400 16px/1.6 var(--body)}
.brew-card p{font-size:16px;line-height:25.6px;font-weight:400}.brew-card strong{font-weight:700}
@media(max-width:640px){.rating-row{grid-template-columns:minmax(0,1fr);gap:16px}}

/* Keep brewing parameters in paired columns on phones. */
@media(max-width:640px){
 body[data-page=brews] #detail .fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
 body[data-page=brews] #detail .field{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;gap:4px;margin-bottom:0}
 body[data-page=brews] #detail .field-empty{display:block;visibility:hidden}
 body[data-page=brews] #detail .field .value{white-space:pre-wrap;overflow:visible;overflow-wrap:anywhere}
}

/* Shared editor list summaries: title/score, then parameters/date. */
.list-entry{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 10px;align-items:center;width:100%;min-width:0}
.item .list-entry p{margin:0;min-width:0;overflow-wrap:anywhere;text-align:left;font-weight:400}
.item .list-entry .entry-title{font-size:14.08px;line-height:1.45}
.item .list-entry .entry-summary,.item .list-entry .entry-score,.item .list-entry .entry-date{font-size:12.8px;line-height:1.45}
.item .list-entry .entry-score,.item .list-entry .entry-date{text-align:right;white-space:nowrap}
.bean-entry .entry-title{grid-column:1 / -1}.bean-entry .entry-summary{white-space:nowrap}
.roast-values{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;min-width:0}
@media(max-width:640px){.field:has(.roast-values){grid-template-rows:auto auto}}

@media(max-width:640px){
 .filters>.bean-picker{grid-column:2;grid-row:1}
 .filters>[data-filter="month"]{grid-column:1;grid-row:2}
}
