/* /Components/Pages/AccessDenied.razor.rz.scp.css */
.access-denied[b-1eajc70lv4] {
    max-width: 560px;
    margin: 48px auto;
    padding: 0 16px;
}

.access-denied h1[b-1eajc70lv4] {
    font-size: 1.4rem;
    color: var(--text-heading);
    margin: 0 0 12px;
}

.access-denied p[b-1eajc70lv4] {
    margin: 0 0 20px;
}

.access-denied .btn-submit[b-1eajc70lv4] {
    display: inline-block;
    padding: 10px 18px;
    text-decoration: none;
}
/* /Components/Pages/Activity.razor.rz.scp.css */
/* Contribution-graph day cells are real <button>s so they are keyboard- and screen-reader-reachable.
   Their size, radius, cursor and intensity colour come from the global .grid-cell rules; this only
   strips the user-agent button chrome so a button cell stays the same 11px square as the old <div>. */
button.grid-cell[b-gfz9w1jl4u] {
    padding: 0;
    border: none;
    font: inherit;
    appearance: none;
    -webkit-appearance: none;
}
/* /Components/Pages/Walls/Wall3D.razor.rz.scp.css */
/* The 3D stage takes the whole content area under the top bar, above the tab bar. The overlay
   inside the stage is styled by wwwroot/css/wall3d.css, which wall3d.js injects. */
.wall3d-page[b-fb49ybkqyq] {
    display: flex;
    flex-direction: column;
    height: calc(100dvh - var(--topbar-h, 56px) - var(--bottomnav-h, 0px));
    min-height: 360px;
}

.wall3d-head[b-fb49ybkqyq] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 12px;
    padding: 8px 12px;
}

.wall3d-boulder[b-fb49ybkqyq] {
    font-family: var(--font-display);
    font-weight: 700;
    color: var(--text-heading);
}

.wall3d-legend[b-fb49ybkqyq] { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; font-size: 0.8rem; color: var(--text-secondary); }
.wall3d-legend span[b-fb49ybkqyq] { display: inline-flex; align-items: center; gap: 4px; }
.wall3d-legend i[b-fb49ybkqyq] { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }

.wall3d-note[b-fb49ybkqyq] { font-size: 0.8rem; color: var(--text-secondary); }

.wall3d-stage[b-fb49ybkqyq] {
    flex: 1;
    min-height: 0;
    border-top: 1px solid var(--border);
    display: flex;
    flex-direction: column;
}

.wall3d-message[b-fb49ybkqyq] { padding: 16px; }
.wall3d-message .empty-state p[b-fb49ybkqyq] { margin: 0 0 12px; }
/* /Components/Pages/Walls/WallDetail.razor.rz.scp.css */
/* The clickable stat tiles (Boulders / Members / Invite) are real <button>s for keyboard and AT
   access. Their box, hover and typography come from the global .stat / .stat.clickable rules; these
   only strip the user-agent button chrome so a button tile is pixel-identical to the old <div>. */
button.stat[b-glp1ualwoy] {
    margin: 0;
    font: inherit;
    color: inherit;
    text-align: center;
    appearance: none;
    -webkit-appearance: none;
}
/* /Components/Shared/Modal.razor.rz.scp.css */
/* The panel is programmatically focused (tabindex="-1") so the focus trap can land on it; suppress the
   container's focus ring while leaving the real controls inside it to show their own. Visual styling of
   the backdrop and panel comes from the global .bw-modal-backdrop / .bw-modal rules, so the migrated
   modals keep looking exactly as they did. */
.bw-modal:focus[b-yc4rxfh59b] {
    outline: none;
}
/* /Components/Shared/RelocationSuggestions.razor.rz.scp.css */
/* "Possibly moved" list in the carryover review. Phone-first: each row wraps to thumbnails on one line,
   meta on the next, buttons on the last; from ~560px they sit side by side. Colours come from the shared
   status tokens so the list follows the theme like the attention banner above it. */
.relocate[b-srwvvr9fvo] {
    margin: 0 0 10px;
    padding: 10px 12px;
    border-radius: var(--r-sm);
    border: 1px solid var(--status-info);
    background: color-mix(in srgb, var(--status-info) 8%, var(--bg-surface));
}

.relocate-head[b-srwvvr9fvo] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-bottom: 8px;
    color: var(--text-heading);
}

.relocate-list[b-srwvvr9fvo] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.relocate-row[b-srwvvr9fvo] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 10px;
    padding: 6px 8px;
    border-radius: var(--r-sm);
    border: 1px solid var(--border);
    background: var(--bg-surface);
}

.relocate-row.accepted[b-srwvvr9fvo] { border-color: var(--status-warning); }
.relocate-row.accepted.same[b-srwvvr9fvo] { border-color: var(--status-success); }
.relocate-row.dismissed[b-srwvvr9fvo] { opacity: 0.6; }

.relocate-pair[b-srwvvr9fvo] {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    color: inherit;
}

.relocate-num[b-srwvvr9fvo] {
    min-width: 1.4em;
    font-weight: 700;
    color: var(--text-secondary);
}

.relocate-thumb[b-srwvvr9fvo] {
    position: relative;
    display: block;
    width: 56px;
    height: 56px;
    overflow: hidden;
    border-radius: var(--r-sm);
    background: var(--bg-surface-alt);
    flex: none;
}

.relocate-thumb img[b-srwvvr9fvo] {
    position: absolute;
    left: 50%;
    top: 50%;
    max-width: none;
    height: auto;
    pointer-events: none;
}

.relocate-ring[b-srwvvr9fvo] {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 36%;
    height: 36%;
    transform: translate(-50%, -50%);
    border-radius: 50%;
    border: 2px solid var(--ring, var(--status-info));
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45);
}

.relocate-arrow[b-srwvvr9fvo] { color: var(--text-secondary); }

.relocate-meta[b-srwvvr9fvo] {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1 1 120px;
    min-width: 0;
    font-size: 0.85rem;
}

.relocate-label[b-srwvvr9fvo] { font-weight: 600; color: var(--text-heading); }
.relocate-score[b-srwvvr9fvo] { color: var(--text-secondary); }

.relocate-tag[b-srwvvr9fvo] {
    display: inline-block;
    margin-left: 4px;
    padding: 0 6px;
    border-radius: 999px;
    font-size: 0.75rem;
    border: 1px solid var(--border);
}

.relocate-tag.low[b-srwvvr9fvo] { border-color: var(--status-warning); color: var(--status-warning); }

.relocate-actions[b-srwvvr9fvo] {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-items: center;
    gap: 6px;
    margin-left: auto;
}

.relocate-actions .btn-primary[b-srwvvr9fvo],
.relocate-actions .btn-secondary[b-srwvvr9fvo] {
    width: auto;
    margin-bottom: 0;
    padding: 6px 14px;
    font-size: 0.9rem;
    min-height: 36px;
}

.relocate-state[b-srwvvr9fvo] { font-size: 0.8rem; font-weight: 600; color: var(--text-secondary); }
/* /Components/Shared/SignedAngleInput.razor.rz.scp.css */
.signed-angle-compact[b-61qm44tbdw] { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.signed-angle-dir[b-61qm44tbdw] { width: auto; min-width: 0; padding-right: 24px; }
.signed-angle-size[b-61qm44tbdw] { width: 5em; }
/* /Components/Shared/Wall3DInline.razor.rz.scp.css */
/* The inline 3D schematic takes the photo viewer's place: a tall box that still leaves the page
   scrollable around it (the canvas itself owns every gesture inside it). */
.wall3d-inline[b-3exl0jmp0y] {
    display: flex;
    flex-direction: column;
    border: 1px solid var(--border);
    border-radius: var(--r-md, 10px);
    overflow: hidden;
    background: var(--bg);
}

.wall3d-inline-stage[b-3exl0jmp0y] {
    display: flex;
    flex-direction: column;
    height: min(68dvh, 640px);
    min-height: 320px;
}

/* Phones in portrait: a wall is wider than it is tall, so the camera fits it to the width and a
   68dvh box left the lower half as empty floor. Keep the box a little taller than wide instead. */
@media (max-width: 600px) and (orientation: portrait) {
    .wall3d-inline-stage[b-3exl0jmp0y] { height: min(68dvh, 640px, max(320px, 115vw)); }
}

.wall3d-inline-message[b-3exl0jmp0y] {
    margin: 0;
    padding: 40px 16px;
    text-align: center;
    color: var(--text-secondary);
}

.wall3d-inline-foot[b-3exl0jmp0y] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 12px;
    padding: 8px 12px;
    border-top: 1px solid var(--border);
    font-size: 0.8rem;
    color: var(--text-secondary);
}

.wall3d-inline-legend[b-3exl0jmp0y] { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; }
.wall3d-inline-legend span[b-3exl0jmp0y] { display: inline-flex; align-items: center; gap: 4px; }
.wall3d-inline-legend i[b-3exl0jmp0y] { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }

.wall3d-inline-full[b-3exl0jmp0y] {
    margin-left: auto;
    font-weight: 600;
    color: var(--accent);
    text-decoration: none;
}
.wall3d-inline-full:hover[b-3exl0jmp0y] { text-decoration: underline; }
/* /Components/Shared/Wall3DStage.razor.rz.scp.css */
/* The stage fills whatever box its host gives it (the full page, or the inline viewer). */
.wall3d-stage-el[b-liudagr1yn] {
    flex: 1 1 auto;
    width: 100%;
    height: 100%;
    min-height: 0;
}

.wall3d-stage-failed[b-liudagr1yn] {
    margin: 0;
    padding: 12px;
    font-size: 0.85rem;
    color: var(--text-secondary);
}
/* /Components/Shared/WallCapturePanel.razor.rz.scp.css */
.capture-panel[b-pgjiweqe14] { margin-top: 12px; }
.capture-upload[b-pgjiweqe14] { display: flex; flex-direction: column; gap: 6px; }
[b-pgjiweqe14] .capture-warn { font-size: 0.78rem; color: var(--warning-text, var(--text-secondary)); }
[b-pgjiweqe14] .capture-photo-name { max-width: 14em; overflow-wrap: anywhere; }
[b-pgjiweqe14] .capture-declarations .checkbox-label { display: flex; gap: 6px; margin: 0; font-size: 0.85rem; }

/* Phone width: each marker segment becomes a small card (range, then the name full width, then angle
   and the vertical tick side by side) instead of a four-column table that scrolls sideways. */
@media (max-width: 560px) {
    [b-pgjiweqe14] .capture-declarations { min-width: 0; }
    [b-pgjiweqe14] .capture-declarations thead { display: none; }
    [b-pgjiweqe14] .capture-declarations tr {
        display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px;
        padding: 8px 0; border-bottom: 1px solid var(--border-light);
    }
    [b-pgjiweqe14] .capture-declarations td { display: block; padding: 0; border: 0; text-align: left; }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-markers { flex: 1 1 100%; font-weight: 600; }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-markers::before { content: "Markers "; font-weight: 400; color: var(--text-secondary); }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-name { flex: 1 1 100%; }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-name .form-input { width: 100%; }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-angle { display: flex; align-items: center; gap: 6px; }
    [b-pgjiweqe14] .capture-declarations td.capture-decl-angle::before { content: "Angle (°)"; font-size: 0.85rem; color: var(--text-secondary); }
}
/* /Components/Shared/WallCapturePlacementCheck.razor.rz.scp.css */
.capture-placement[b-hrywsxi7am] { margin-top: 4px; }
.capture-placement-head[b-hrywsxi7am] { font-size: 0.85rem; font-weight: 600; color: var(--warning-text, var(--text)); }
.capture-placement-list[b-hrywsxi7am] { margin: 2px 0 0; padding-left: 1.2em; font-size: 0.8rem; }
/* /Components/Shared/WallCaptureStatusList.razor.rz.scp.css */
.capture-running[b-ke7lxueih4] {
    margin: 10px 0; padding: 10px 12px; border: 1px solid var(--border-light);
    border-radius: var(--r-md); background: var(--bg-surface-alt);
}
.capture-running-head[b-ke7lxueih4] { display: flex; justify-content: space-between; gap: 8px; font-size: 0.9rem; }
.capture-progress[b-ke7lxueih4] { width: 100%; height: 8px; margin: 6px 0 4px; accent-color: var(--top-hold, currentColor); }
.capture-error[b-ke7lxueih4] { font-size: 0.8rem; color: var(--danger-text, var(--text)); margin-top: 2px; }
.capture-failed[b-ke7lxueih4] { font-weight: 600; color: var(--danger-text, var(--text)); }
.capture-pending[b-ke7lxueih4] { font-weight: 600; color: var(--text-secondary); }
.capture-history[b-ke7lxueih4] { margin-top: 10px; }
.capture-photos-row td[b-ke7lxueih4] { background: var(--bg-surface-alt); }
