/* Shop-Once Planner, scoped under .dcp so it sits inside any Dorm Chef page. */
.dcp{--forest:#143d2b;--forest-2:#1d4a35;--cream:#fff5dd;--paper:#fffaf0;--yolk:#f3bf3d;--yolk-soft:#fbe7b0;--tomato:#d95736;--leaf:#3e7546;--leaf-soft:#e3ecd6;--ink:#0c2017;--line:#143d2b1f;--shadow:0 1px 0 #143d2b14,0 10px 24px -14px #143d2b55}
.dcp *{box-sizing:border-box}
.dcp{margin:0;background:var(--cream);color:var(--forest);font:16px/1.5 Figtree,system-ui,sans-serif;
  background-image:radial-gradient(#143d2b0a 1px,transparent 1.2px);background-size:7px 7px}
.dcp img{display:block;max-width:100%}
.dcp button{font:inherit;color:inherit;cursor:pointer}
.dcp .vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
/* hero */
.dcp .hero{max-width:1240px;margin:auto;padding:34px 24px 20px;display:grid;grid-template-columns:1.1fr .9fr;gap:40px;align-items:center}
.dcp .eyebrow{font-weight:800;font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--leaf);display:flex;gap:10px;align-items:center}
.dcp .eyebrow img{height:22px}
.dcp .hero h1{margin:16px 0 18px;display:grid;gap:8px}
.dcp .hero h1 img{height:64px;width:auto}
.dcp .hero p.lede{font-size:19px;max-width:560px;margin:0 0 18px}
.dcp .trust{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
.dcp .trust li{background:var(--paper);border:1px solid var(--line);border-radius:99px;padding:6px 12px;font-weight:600;font-size:14px;display:flex;gap:8px;align-items:center}
.dcp .trust li::before{content:"";width:9px;height:9px;border-radius:50%;background:var(--yolk);box-shadow:0 0 0 1.5px var(--forest)}
.dcp .collage{position:relative;height:330px}
.dcp .collage .card{position:absolute;width:62%;background:var(--paper);padding:10px 10px 12px;border-radius:6px;box-shadow:var(--shadow)}
.dcp .collage .card img{border-radius:3px}
.dcp .collage .card span{display:block;font-weight:700;font-size:14px;margin-top:8px}
.dcp .collage .c1{left:0;top:56px;width:52%;transform:rotate(-5deg)}
.dcp .collage .c2{right:0;top:0;width:52%;transform:rotate(4deg)}
.dcp .collage .c3{left:26%;top:150px;width:52%;transform:rotate(-1deg);z-index:2}
.dcp .collage .shape{position:absolute;width:86px}
.dcp .collage .s1{left:-20px;top:-6px;transform:rotate(-20deg)}
.dcp .collage .s2{right:-14px;bottom:0;width:110px}
/* layout */
.dcp .app{max-width:1240px;margin:auto;padding:10px 24px 60px;display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:28px;align-items:start}
.dcp .note{background:var(--paper);border-radius:6px;box-shadow:var(--shadow);padding:28px 28px 30px;position:relative;margin-bottom:26px}
.dcp .note::after{content:"";position:absolute;top:0;right:0;width:34px;height:34px;background:linear-gradient(225deg,var(--cream) 50%,var(--yolk) 50%);border-bottom-left-radius:4px;box-shadow:-2px 2px 3px #143d2b18}
.dcp .step-head{display:flex;align-items:center;gap:14px;margin-bottom:6px}
.dcp .step-head .badge{width:54px;height:54px;flex:none}
.dcp .step-head h2{margin:0}
.dcp .step-head h2 img{height:34px;width:auto}
.dcp .step-sub{margin:0 0 18px 68px;color:#143d2bcc}
/* chips + recipe grid */
.dcp .chips{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.dcp .chip{border:1.5px solid var(--forest);background:transparent;border-radius:99px;padding:7px 14px;font-weight:700;font-size:14px}
.dcp .chip[aria-pressed=true]{background:var(--forest);color:var(--cream)}
.dcp .chip.basket{border-color:var(--yolk);background:var(--yolk);color:var(--forest);margin-left:auto}
.dcp .grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.dcp .rc{background:#fff;border:1.5px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;position:relative;transition:transform .15s,box-shadow .15s}
.dcp .rc:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.dcp .rc .pic{aspect-ratio:16/10;background:var(--cream);overflow:hidden}
.dcp .rc .pic img{width:100%;height:100%;object-fit:cover}
.dcp .rc .body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:6px;flex:1}
.dcp .rc h3{font-size:15px;line-height:1.25;margin:0}
.dcp .rc .meta{display:flex;gap:6px;flex-wrap:wrap;font-size:12px;font-weight:700}
.dcp .tag{border-radius:99px;padding:2px 8px;background:var(--leaf-soft);color:var(--leaf)}
.dcp .tag.mw{background:#fde2d9;color:#a63e22}
.dcp .tag.pg{background:transparent;border:1px solid var(--line);color:#143d2b99}
.dcp .rc .add{margin-top:auto;border:0;border-radius:99px;background:var(--cream);font-weight:800;padding:8px 10px;font-size:14px}
.dcp .rc.on{border-color:var(--forest);box-shadow:0 0 0 2px var(--forest) inset}
.dcp .rc.on .tick{position:absolute;top:8px;left:8px;width:30px;height:30px;border-radius:50%;background:var(--yolk);border:2px solid var(--forest);display:grid;place-items:center;font-weight:900}
.dcp .stepper{display:flex;align-items:center;justify-content:space-between;margin-top:auto;background:var(--forest);color:var(--cream);border-radius:99px;padding:3px}
.dcp .stepper button{width:32px;height:32px;border-radius:50%;border:0;background:#fff5dd22;color:var(--cream);font-weight:900;font-size:18px;line-height:1}
.dcp .stepper span{font-weight:800;font-size:14px}
.dcp .when{width:100%;border:1px solid var(--line);border-radius:8px;padding:6px 8px;font:inherit;font-size:13px;color:var(--forest);background:var(--cream)}
/* shopping list */
.dcp .progress{display:flex;align-items:center;gap:12px;margin:0 0 18px}
.dcp .bar{flex:1;height:10px;border-radius:99px;background:var(--leaf-soft);overflow:hidden}
.dcp .bar i{display:block;height:100%;background:var(--leaf);border-radius:99px}
.dcp .progress b{font-size:14px}
.dcp .aisles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.dcp .aisle{border:1.5px solid var(--line);border-radius:10px;background:#fff;padding:12px 14px}
.dcp .aisle h3{margin:0 0 6px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;display:flex;align-items:center;gap:8px;color:var(--leaf)}
.dcp .aisle h3 svg{width:20px;height:20px}
.dcp .item{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:10px;align-items:start;padding:9px 0;border-top:1px dashed var(--line)}
.dcp .item:first-of-type{border-top:0}
.dcp .box{width:24px;height:24px;border:2px solid var(--forest);border-radius:6px;background:#fff;display:grid;place-items:center;padding:0;margin-top:1px}
.dcp .item.got .box{background:var(--yolk)}
.dcp .item.got .box::after{content:"";width:6px;height:11px;border:solid var(--forest);border-width:0 3px 3px 0;transform:rotate(45deg) translate(-1px,-1px)}
.dcp .item .nm{font-weight:700;font-size:15px;line-height:1.3}
.dcp .item .st{font-size:12.5px;color:#143d2bb3}
.dcp .item .qty{text-align:right;font-weight:800;font-size:14.5px;white-space:nowrap}
.dcp .item .qty small{display:block;font-weight:500;font-size:12px;color:#143d2b99}
.dcp .item.got .nm{text-decoration:line-through;text-decoration-thickness:2px;opacity:.6}
.dcp .home{border:1.5px solid var(--forest);background:transparent;border-radius:99px;font-size:12px;font-weight:800;padding:3px 9px;margin-top:6px}
.dcp .item.athome{opacity:.62}
.dcp .item.athome .home{background:var(--forest);color:var(--cream)}
.dcp .item.athome .qty{text-decoration:line-through}
.dcp details.prices{margin-top:18px;border:1.5px dashed #143d2b44;border-radius:10px;padding:12px 14px;background:#fffdf7}
.dcp details.prices summary{font-weight:800;cursor:pointer}
.dcp textarea{width:100%;min-height:96px;border:1.5px solid var(--line);border-radius:10px;padding:12px;font:inherit;color:var(--forest);background:#fff;
  background-image:repeating-linear-gradient(transparent 0 27px,#143d2b14 27px 28px);line-height:28px}
/* side summary */
.dcp .side{position:sticky;top:18px}
.dcp .side .note{padding:22px}
.dcp .side h2{margin:0 0 12px}
.dcp .side h2 img{height:30px}
.dcp .mini{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:10px}
.dcp .mini li{display:grid;grid-template-columns:54px 1fr;gap:10px;align-items:center}
.dcp .mini img{width:54px;height:40px;object-fit:cover;border-radius:6px}
.dcp .mini b{font-size:14px;line-height:1.25;display:block}
.dcp .mini span{font-size:12.5px;color:#143d2bb3}
.dcp .stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:0 0 16px}
.dcp .stats div{background:var(--cream);border-radius:8px;padding:8px 10px}
.dcp .stats b{display:block;font-size:22px;line-height:1.1}
.dcp .stats span{font-size:12px;font-weight:700}
.dcp .btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:0;border-radius:99px;padding:13px 16px;font-weight:800;font-size:16px;text-decoration:none}
.dcp .btn.primary{background:var(--yolk);color:var(--forest);box-shadow:0 3px 0 var(--forest)}
.dcp .btn.secondary{background:transparent;border:1.5px solid var(--forest);color:var(--forest);margin-top:10px}
.dcp .row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dcp .row2 .btn{margin-top:10px;font-size:14px;padding:10px}
.dcp .fine{font-size:12.5px;color:#143d2bb3;margin:12px 0 0}
.dcp .more{font-size:13px;font-weight:700;text-align:center;margin-top:10px}
/* footer */
.dcp .cook{max-width:1240px;margin:0 auto 34px;padding:0 24px}
.dcp .cook .inner{background:var(--yolk-soft);border-radius:10px;padding:18px 22px;display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center}
.dcp .cook img{height:46px}
.dcp .mbar{display:none}
@media (max-width:1100px){
  .dcp .grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:900px){
  .dcp .hero{grid-template-columns:1fr;padding-top:22px}
  .dcp .collage{height:250px}
  .dcp .app{grid-template-columns:1fr}
  .dcp .side{position:static}
  .dcp .aisles{grid-template-columns:1fr}
}
@media (max-width:600px){
  body:has(.dcp .mbar){--dc-help-clearance:calc(92px + env(safe-area-inset-bottom,0px))}
  .dcp .hero{padding:18px 16px 6px;gap:14px}
  .dcp .hero h1 img{height:40px}
  .dcp .hero p.lede{font-size:17px}
  .dcp .collage{height:200px}
  .dcp .collage .card{width:56%;padding:7px}
  .dcp .collage .card span{font-size:12px}
  .dcp .collage .c3{top:96px}
  .dcp .app{padding:6px 16px 110px}
  .dcp .note{padding:20px 16px 22px}
  .dcp .step-sub{margin-left:0}
  .dcp .step-head h2 img{height:26px}
  .dcp .step-head .badge{width:46px;height:46px}
  .dcp .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .dcp .chip.basket{margin-left:0}
  .dcp .rc h3{font-size:14px}
  .dcp .side{display:none}
  .dcp .mbar{display:flex;position:fixed;left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom,0px));min-height:64px;z-index:20;background:var(--forest);color:var(--cream);border-radius:16px;padding:10px 10px 10px 16px;align-items:center;gap:12px;box-shadow:0 10px 30px -8px #0c201799}
  .dcp .mbar div{flex:1;font-size:13px;line-height:1.3}
  .dcp .mbar b{font-size:15px;display:block}
  .dcp .mbar .btn{width:auto;padding:11px 16px;font-size:14px;box-shadow:none}
  .dcp .cook .inner{grid-template-columns:1fr}
}
/* ---- real build additions ---- */
.dcp [hidden]{display:none!important}
.dcp .aisles{align-items:start}
.dcp :focus-visible{outline:3px solid var(--tomato);outline-offset:2px}
.dcp a{color:inherit}
/* unlock bar */
.dcp .unlock{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;background:var(--cream);border:1.5px dashed #143d2b40;border-radius:10px;padding:12px 14px;margin:0 0 18px;font-size:14px}
.dcp .unlock .owned{display:flex;flex-wrap:wrap;gap:6px}
.dcp .unlock .owned span{background:var(--yolk);border-radius:99px;padding:3px 10px;font-weight:800;font-size:13px}
.dcp .unlock p{margin:0;flex:1 1 260px}
.dcp .unlock form{display:flex;gap:8px;flex:1 1 320px}
.dcp .unlock input{flex:1;min-width:0;border:1.5px solid var(--line);border-radius:99px;padding:8px 14px;font:inherit;font-size:14px;background:#fff;color:var(--forest)}
.dcp .unlock button{border:0;border-radius:99px;background:var(--forest);color:var(--cream);font-weight:800;padding:8px 16px;font-size:14px}
.dcp .unlock .msg{flex-basis:100%;margin:0;font-weight:700;font-size:13px}
.dcp .unlock .msg.bad{color:#a63e22}
/* book sections in the grid */
.dcp .book{margin:0 0 26px}
.dcp .book:last-child{margin-bottom:0}
.dcp .book-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0 0 12px;padding-bottom:10px;border-bottom:1.5px solid var(--line)}
.dcp .book-head h3{margin:0}
.dcp .book-head h3 img{height:24px;width:auto}
.dcp .book-head .bm{font-size:13px;font-weight:700;color:#143d2bb3}
.dcp .book-head .get{margin-left:auto;font-size:13px;font-weight:800;text-decoration:none;border:1.5px solid var(--forest);border-radius:99px;padding:4px 12px}
.dcp .book-head .get:hover{background:var(--forest);color:var(--cream)}
.dcp .tag.free{background:var(--yolk-soft);color:var(--forest)}
.dcp .rc.locked .pic{position:relative}
.dcp .rc.locked .pic img{filter:saturate(.55) brightness(.92)}
.dcp .rc.locked .pic::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 40%,#143d2b66)}
.dcp .lockmark{position:absolute;left:8px;bottom:8px;z-index:1;width:30px;height:30px;border-radius:50%;background:var(--cream);display:grid;place-items:center;box-shadow:0 2px 6px #0c201744}
.dcp .lockmark svg{width:16px;height:16px}
.dcp .rc .buy{margin-top:auto;border-radius:99px;background:var(--forest);color:var(--cream);font-weight:800;padding:8px 10px;font-size:13px;text-align:center;text-decoration:none}
.dcp .empty{grid-column:1/-1;margin:0;padding:14px;border-radius:10px;background:var(--cream);font-weight:700;text-align:center}
.dcp .tag.hp{background:var(--forest);color:var(--yolk)}
.dcp .rc .nut{margin:0;font-size:12.5px;font-weight:700;color:var(--forest)}
.dcp .rc .nut span{font-weight:500;color:#143d2b99}
.dcp .nut-note{margin:-6px 0 14px;font-size:12.5px;color:#143d2bb3}
.dcp .item .nm a{color:inherit;text-decoration:underline;text-decoration-color:#143d2b55;text-underline-offset:3px}
.dcp .item .nm a:hover{text-decoration-color:var(--forest)}
/* list extras */
.dcp .list-tools{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;margin:-6px 0 16px;font-size:14px;font-weight:700}
.dcp .list-tools label{display:flex;gap:8px;align-items:center;cursor:pointer}
.dcp .list-tools input{width:18px;height:18px;accent-color:var(--forest)}
.dcp .list-empty{border:1.5px dashed #143d2b40;border-radius:10px;padding:22px;text-align:center;font-weight:700;background:var(--cream)}
.dcp .aisle.tap .item .box{border-style:dashed}
/* prices */
.dcp .price-rows{display:grid;gap:10px;margin-top:12px}
.dcp .prow{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1.4fr) minmax(0,.8fr) minmax(0,.9fr);gap:8px;align-items:center;font-size:14px;padding:8px 0;border-top:1px dashed var(--line)}
.dcp .prow:first-child{border-top:0}
.dcp .prow b{font-size:14px;line-height:1.25}
.dcp .prow .need{display:block;font-size:12px;font-weight:500;color:#143d2bb3}
.dcp .prow .pk{display:flex;gap:6px}
.dcp .prow input,.dcp .prow select,.dcp .cur input{min-width:0;border:1.5px solid var(--line);border-radius:8px;padding:6px 8px;font:inherit;font-size:14px;background:#fff;color:var(--forest)}
.dcp .prow .pk input{width:64px;flex:none}
.dcp .prow .pk select{flex:1}
.dcp .prow .res{text-align:right;font-weight:800;white-space:nowrap}
.dcp .cur{display:flex;gap:8px;align-items:center;font-size:14px;font-weight:700;margin-top:12px}
.dcp .cur input{width:70px}
.dcp .ptotal{margin-top:12px;padding:12px 14px;border-radius:10px;background:var(--leaf-soft);font-weight:800}
.dcp .ptotal small{display:block;font-weight:500;font-size:12.5px;color:#143d2bcc;margin-top:2px}
/* side + bar */
.dcp .btn[disabled],.dcp .btn[aria-disabled=true]{opacity:.45;cursor:not-allowed;box-shadow:none}
.dcp .btn.link{background:none;border:0;color:#143d2bb3;font-size:13px;font-weight:700;text-decoration:underline;margin-top:8px;padding:6px}
.dcp .mini .none{display:block;grid-template-columns:none;font-size:14px;color:#143d2bb3}
.dcp .status{min-height:1.2em;font-size:13px;font-weight:700;margin:10px 0 0;text-align:center}
.dcp .toast{position:fixed;left:50%;top:18px;transform:translate(-50%,-140%);z-index:40;background:var(--forest);color:var(--cream);border-radius:99px;padding:10px 18px;font-weight:800;font-size:14px;box-shadow:0 10px 30px -8px #0c201799;transition:transform .25s}
.dcp .toast.show{transform:translate(-50%,0)}
@media (max-width:600px){
  .dcp .collage{height:236px}
  .dcp .book-head .get{margin-left:0}
  .dcp .prow{grid-template-columns:1fr 1fr}
  .dcp .prow>div:first-child{grid-column:1/-1}
  .dcp .prow .res{grid-column:1/-1;text-align:left}
  .dcp .unlock form{flex-basis:100%}
}
@media (prefers-reduced-motion:reduce){
  .dcp .rc,.dcp .toast{transition:none}
  .dcp .rc:hover{transform:none}
}
