/* «Фото в рамках» (BK-380): the wall to scale on the left (on a phone — on top), the chosen frame and the composition beside
   it. Buttons are the components of components.css; this sheet only places them. The frames and the wall take their
   colours from tokens.css (--frame-*, --wall). */
*{box-sizing:border-box}
body.walls-body{margin:0;background:var(--paper);color:var(--ink);font:var(--fs-3)/1.5 var(--sans)}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
[hidden]{display:none!important}
h2,h3,h4{margin:0;line-height:1.25}

.walls-bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--surface-tint);border-bottom:1px solid var(--line)}
.walls-bar .back-link{white-space:nowrap}
.walls-bar-title{min-width:0;flex:1}.walls-bar-title h1{margin:0;font-size:var(--fs-4);line-height:1.2}
.walls-sub{margin:0;font-size:var(--fs-2);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.walls-save{margin:0;font-size:var(--fs-2);color:var(--muted);white-space:nowrap}
.walls-notice{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:12px 16px 0;padding:10px 14px;border:1px solid var(--accent-line);border-radius:var(--r-2);background:var(--accent-soft);color:var(--accent-strong);font-size:var(--fs-2)}

.walls-main{padding:16px;max-width:1280px;margin:0 auto}
/* The compositions of the book: a row of tabs, «Новая композиция» last. */
.walls-list{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;margin-bottom:16px}
.walls-tab{flex:none;display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 14px;border:1px solid var(--line);border-radius:var(--r-round);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-2);font-weight:600;cursor:pointer;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.walls-tab:hover{background:var(--hover)}
.walls-tab[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--on-accent)}
.walls-tab-new{border-style:dashed}
@media (pointer:coarse){.walls-tab{min-height:44px}}

/* The start: a new composition. */
.walls-start{max-width:760px;margin:0 auto;display:grid;gap:18px;padding:24px;border:1px solid var(--line);border-radius:var(--r-3);background:var(--surface)}
.walls-start h2{font-size:var(--fs-6)}
.walls-lead{margin:0;color:var(--text-2);max-width:60ch}
.walls-note{margin:0;font-size:var(--fs-2);color:var(--muted)}

.walls-editor{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:24px;align-items:start}
.walls-stage-wrap{position:sticky;top:72px;display:grid;gap:8px}
.walls-stage{display:flex;align-items:center;justify-content:center;min-height:300px;padding:clamp(20px,5vw,56px);border-radius:var(--r-3);background:var(--wall);box-shadow:inset 0 -18px 0 var(--wall-line)}
.walls-board{position:relative;max-width:100%}
/* A frame: the moulding is the frame itself, the mat lies on it, the window of the photo is cut in the mat. */
.walls-frame{position:absolute;display:block;padding:0;margin:0;border:0;border-radius:0;background:var(--frame-black);box-shadow:0 4px 10px var(--shadow-3);cursor:pointer;font:inherit;color:inherit}
.walls-stage[data-frame=white] .walls-frame{background:var(--frame-white);box-shadow:0 4px 10px var(--shadow-2),inset 0 0 0 1px var(--wall-line)}
.walls-stage[data-frame=oak] .walls-frame{background:linear-gradient(135deg,var(--frame-oak),var(--frame-oak-dark) 55%,var(--frame-oak))}
.walls-frame:focus-visible{outline:3px solid var(--focus);outline-offset:4px}
.walls-frame[aria-pressed=true]{outline:3px solid var(--selection);outline-offset:4px}
.walls-mat{position:absolute;background:var(--frame-mat);box-shadow:inset 0 0 2px var(--shadow-2)}
.walls-window{position:absolute;overflow:hidden;background:var(--surface-sunken);box-shadow:inset 0 0 0 1px var(--line-soft)}
.walls-frame[aria-pressed=true] .walls-window:has(.walls-photo){cursor:grab;touch-action:none}
.walls-photo{position:absolute;display:block}
.walls-photo img{position:absolute;left:0;top:0;width:100%;height:100%;max-width:none;display:block;user-select:none;-webkit-user-select:none;pointer-events:none}
.walls-empty{position:absolute;inset:0;display:grid;place-items:center;padding:4px;color:var(--muted);font-size:var(--fs-1);text-align:center}
.walls-num{position:absolute;left:6px;top:6px;display:grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border-radius:var(--r-round);background:var(--scrim-strong);color:var(--on-accent);font-size:var(--fs-1);font-weight:700;line-height:1}
.walls-badge{position:absolute;left:50%;bottom:6px;transform:translateX(-50%)}
.walls-size{margin:0;font-size:var(--fs-2);color:var(--muted);text-align:center}
.walls-summary{margin:0;padding:10px 14px;border-radius:var(--r-2);font-size:var(--fs-2);background:var(--success-soft);color:var(--success)}
.walls-summary[data-tone=warn]{background:var(--warning-soft);color:var(--warning)}
.walls-summary[data-tone=danger]{background:var(--danger-soft);color:var(--danger)}

/* The panel. */
.walls-panel{display:grid;gap:16px}
.walls-group{display:grid;gap:10px;padding:16px;border:1px solid var(--line);border-radius:var(--r-3);background:var(--surface)}
.walls-group h3{font-size:var(--fs-4)}
.walls-group h4{font-size:var(--fs-2);color:var(--text-2);margin-top:4px}
.walls-start .walls-group{padding:0;border:0;background:none}
.walls-hint{margin:0;font-size:var(--fs-2);color:var(--muted)}
.walls-actions{display:flex;flex-wrap:wrap;gap:8px}
.walls-end{padding:8px 16px;justify-items:start}
.walls-quality{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.walls-quality .walls-hint{flex-basis:100%}
.walls-dpi{font-size:var(--fs-2);color:var(--text-2)}
.walls-order-state{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0}
.walls-order-form{display:grid;gap:10px}
.walls-order-form .button-primary{justify-self:start}
.walls-order-blocked{color:var(--warning)}
.walls-check{display:flex;align-items:center;gap:8px;font-size:var(--fs-2)}
.walls-check input{width:18px;height:18px}
.walls-zoom>input[type=range]{width:100%;min-height:32px;padding:0;border:0;background:none}

.walls-templates{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.walls-template{display:grid;gap:4px;justify-items:center;align-content:start;padding:10px 8px;border:1px solid var(--line);border-radius:var(--r-2);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-2);text-align:center;cursor:pointer}
.walls-template:hover{background:var(--hover)}
.walls-template[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent)}
.walls-template strong{font-size:var(--fs-3)}
.walls-template-size{color:var(--muted)}
.walls-mini{width:100%;height:56px;margin-bottom:4px}
.walls-mini-frame{fill:var(--ink)}
.walls-mini-photo{fill:var(--surface-tint)}
.walls-segments{flex-wrap:wrap}
.walls-swatch{display:inline-block;width:16px;height:16px;border-radius:var(--r-round);border:1px solid var(--border-strong);background:var(--frame-black)}
.walls-swatch[data-frame=white]{background:var(--frame-white)}
.walls-swatch[data-frame=oak]{background:var(--frame-oak)}

/* The photos of the book for the chosen frame. */
.walls-picker{display:grid;gap:8px;padding-top:6px;border-top:1px solid var(--line-soft)}
.walls-picker h4{margin-top:6px}
.walls-photos{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;max-height:440px;overflow:auto}
.walls-thumb{position:relative;display:block;width:100%;aspect-ratio:1;padding:0;border:2px solid transparent;border-radius:var(--r-2);overflow:hidden;background:var(--surface-sunken);cursor:pointer}
.walls-thumb:hover:not(:disabled){border-color:var(--accent)}
.walls-thumb:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.walls-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.walls-thumb:disabled{cursor:not-allowed}
.walls-thumb:disabled img{opacity:.4}
.walls-thumb-label{position:absolute;left:4px;bottom:4px;max-width:calc(100% - 8px);overflow:hidden;text-overflow:ellipsis}

.walls-toast{position:fixed;left:50%;bottom:20px;z-index:40;transform:translateX(-50%);display:flex;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:8px 8px 8px 16px;border-radius:var(--r-3);background:var(--dark);color:var(--on-accent);font-size:var(--fs-2);box-shadow:0 10px 30px var(--shadow-3)}
.walls-dialog{width:min(480px,calc(100vw - 32px));border:1px solid var(--line);border-radius:var(--r-3);padding:20px;color:var(--ink)}
.walls-dialog::backdrop{background:var(--scrim)}
.walls-dialog h2{margin:0 0 8px;font-size:var(--fs-5)}
.walls-dialog-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:16px}

/* «Схема размещения» (BK-381): the wall to scale with its distances from the middle, the steps, the table; on paper — only this. */
.walls-plan{max-width:960px;margin:0 auto;display:grid;gap:14px;padding:24px;border:1px solid var(--line);border-radius:var(--r-3);background:var(--surface)}
.walls-plan h2{font-size:var(--fs-6)}
.walls-plan h3{font-size:var(--fs-4);margin-top:6px}
.walls-plan-scheme-wrap{overflow-x:auto}
.walls-plan-scheme{display:block;width:100%;max-height:62vh;background:var(--surface)}
.walls-plan-text{fill:var(--ink);font-family:inherit}
.walls-plan-frame{fill:var(--surface);stroke:var(--ink);stroke-width:.5}
.walls-plan-window{fill:var(--surface-sunken);stroke:var(--line);stroke-width:.25}
.walls-plan-num{fill:var(--surface);stroke:var(--ink);stroke-width:.35}
.walls-plan-num-text{font-weight:700}
.walls-plan-size{fill:var(--text-2)}
.walls-plan-axis{stroke:var(--accent);stroke-width:.3;stroke-dasharray:1.6 1.2}
.walls-plan-center{fill:var(--accent)}
.walls-plan-center-text{fill:var(--accent);font-weight:700;paint-order:stroke;stroke:var(--surface);stroke-width:.8px}
.walls-plan-dim{stroke:var(--muted);stroke-width:.3}
.walls-plan-steps{margin:0;padding-left:22px;display:grid;gap:6px}
.walls-plan-table-wrap{overflow-x:auto}
.walls-plan-table{width:100%;border-collapse:collapse;font-size:var(--fs-2)}
.walls-plan-table :is(th,td){padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.walls-plan-table th{color:var(--text-2);font-weight:600}
@media print{
 body.walls-body{background:var(--surface)}
 .walls-bar,.walls-list,.walls-notice,.walls-toast,.walls-plan-actions,.walls-editor,.walls-start{display:none!important}
 .walls-main{padding:0;max-width:none}
 .walls-plan{border:0;padding:0;max-width:none}
 .walls-plan-scheme{max-height:none;min-width:0}
 .walls-plan-scheme-wrap{overflow:visible}
 @page{size:A4;margin:12mm}
}
@media (max-width:900px){
 .walls-editor{grid-template-columns:minmax(0,1fr)}
 .walls-stage-wrap{position:static}
}
@media (max-width:620px){
 .walls-main{padding:12px}
 .walls-bar{padding:8px 12px;gap:8px}
 .walls-bar-title h1{font-size:var(--fs-3)}
 .walls-start{padding:16px}
 .walls-start h2{font-size:var(--fs-5)}
 .walls-stage{min-height:200px;padding:16px}
 .walls-num{left:3px;top:3px;min-width:18px;height:18px;padding:0 4px}
 .walls-badge{bottom:3px}
 .walls-templates{gap:6px}
 .walls-template{padding:8px 4px}
 .walls-group{padding:12px}
 .walls-photos{grid-template-columns:repeat(auto-fill,minmax(72px,1fr))}
 .walls-plan{padding:16px}
 .walls-plan-scheme{min-width:560px}
 .walls-plan h2{font-size:var(--fs-5)}
 :is(input,textarea,select){font-size:var(--fs-phone)}
}
/* The photos of a project of «Фото в рамках» (BK-383): «Добавить фото» on the start screen and in the photos of a frame. */
.walls-upload{display:grid;gap:6px;justify-items:start;padding:14px;border:1px dashed var(--line);border-radius:var(--r-2);background:var(--surface-sunken)}
.walls-upload-status:empty{display:none}
