/* pw/layout.css — app shell, public shell, drawer, top bar, ⌘K, modal, grids. */

/* ---------- app shell ---------- */
.pw-app { display: grid; grid-template-columns: var(--side-w) minmax(0, 1fr); min-height: 100vh; }

.pw-side {
    position: sticky; top: 0; height: 100vh; overflow-y: auto;
    display: flex; flex-direction: column; gap: 2px;
    background: var(--sidebar); border-right: 1px solid var(--line);
    padding: var(--sp-3) var(--sp-2);
}
.pw-side__brand {
    display: flex; align-items: center; gap: var(--sp-2);
    padding: var(--sp-1) var(--sp-2) var(--sp-4);
    color: var(--tx); font-weight: 700; font-size: var(--fs-lg);
}
.pw-side__brand:hover { color: var(--tx); text-decoration: none; }
.pw-side__logo {
    width: 18px; height: 18px; border-radius: 5px; display: inline-block;
    background: linear-gradient(135deg, var(--acc), var(--acc-hover));
}
.pw-side__nav { display: flex; flex-direction: column; gap: 2px; }
.pw-side__group {
    font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: 0.09em;
    color: var(--tx-3); padding: var(--sp-4) var(--sp-2) var(--sp-1);
}
.pw-side__link {
    display: flex; justify-content: space-between; align-items: center; gap: var(--sp-2);
    padding: 6px var(--sp-2); border-radius: var(--radius-sm); color: var(--tx-2);
}
.pw-side__link:hover { background: var(--panel); color: var(--tx); text-decoration: none; }
.pw-side__link[aria-current="page"] { background: var(--panel-2); color: var(--tx); box-shadow: inset 2px 0 0 var(--acc); }
.pw-side__link--cta { color: var(--acc); }
.pw-side__count { font-family: var(--mono); font-size: var(--fs-xs); color: var(--tx-3); }
.pw-side__count--alert { color: var(--crit); }
.pw-side__foot {
    margin-top: auto; border-top: 1px solid var(--line);
    padding: var(--sp-3) var(--sp-2) 0; display: flex; flex-direction: column; gap: var(--sp-1);
    font-size: var(--fs-sm); color: var(--tx-2);
}
.pw-side__user { color: var(--tx); font-weight: 500; }
.pw-side__email { color: var(--tx-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pw-side__row { display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: center; }
.pw-side__action { background: none; border: 0; padding: 0; color: var(--tx-2); cursor: pointer; }
.pw-side__action:hover { color: var(--tx); text-decoration: underline; }
.pw-side__action[aria-current="page"] { color: var(--tx); font-weight: 600; }

.pw-scrim { position: fixed; inset: 0; background: var(--scrim); z-index: 40; }
@media (min-width: 900px) {
    /* Belt-and-braces: if the drawer was left open on mobile before the viewport grew past 900px,
       never let the scrim linger over the desktop layout. */
    .pw-scrim { display: none; }
}

.pw-main { display: flex; flex-direction: column; min-width: 0; }

.pw-top {
    position: sticky; top: 0; z-index: 30;
    display: flex; align-items: center; gap: var(--sp-3);
    height: var(--top-h); padding: 0 var(--sp-5);
    background: var(--bg); border-bottom: 1px solid var(--line);
}
.pw-top__burger { display: none; }
.pw-top__crumbs { color: var(--tx-3); font-size: var(--fs-md); min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.pw-top__search {
    margin-left: auto; display: flex; align-items: center; gap: var(--sp-6); justify-content: space-between;
    min-width: 220px; padding: 5px var(--sp-3); cursor: pointer;
    background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-sm);
    color: var(--tx-3); font-size: var(--fs-sm);
}
.pw-top__search:hover { border-color: var(--tx-3); }
.pw-top__actions { display: flex; gap: var(--sp-2); align-items: center; }
.pw-kbd { font-family: var(--mono); font-size: var(--fs-xs); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 0 5px; }
.pw-icon-btn {
    display: inline-grid; place-items: center; width: 30px; height: 30px; cursor: pointer;
    background: none; border: 1px solid var(--line); border-radius: var(--radius-sm); color: var(--tx-2);
}
.pw-icon-btn:hover { color: var(--tx); border-color: var(--tx-3); }

.pw-range { display: flex; border: 1px solid var(--line); border-radius: var(--radius-sm); overflow: hidden; }
.pw-range__opt { padding: 4px 9px; font-family: var(--mono); font-size: var(--fs-sm); color: var(--tx-2); }
.pw-range__opt:hover { color: var(--tx); text-decoration: none; background: var(--panel); }
.pw-range__opt[aria-current="true"] { background: var(--panel-2); color: var(--tx); }
/* Display-zone switch (users:toggle_utc): the active zone's abbreviation; one click flips between the user's zone and UTC. */
.pw-tz { display: flex; }
.pw-tz__btn {
    display: inline-flex; align-items: center; height: 30px; padding: 0 9px; cursor: pointer;
    background: none; border: 1px solid var(--line); border-radius: var(--radius-sm);
    font-family: var(--mono); font-size: var(--fs-sm); color: var(--tx-2);
}
.pw-tz__btn:hover { color: var(--tx); border-color: var(--tx-3); text-decoration: none; }
.pw-tz__btn--utc { background: var(--panel-2); color: var(--tx); }

.pw-content { padding: var(--sp-5); display: flex; flex-direction: column; gap: var(--sp-4); min-width: 0; }
.pw-messages { display: flex; flex-direction: column; gap: var(--sp-2); }
.pw-alert { padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-sm); border: 1px solid var(--line); background: var(--panel); }
.pw-alert--success { border-color: var(--ok); background: var(--ok-soft); }
.pw-alert--info, .pw-alert--debug { border-color: var(--info); background: var(--info-soft); }
.pw-alert--warning { border-color: var(--warn); background: var(--warn-soft); }
.pw-alert--error { border-color: var(--crit); background: var(--crit-soft); }

/* ---------- grids ---------- */
.pw-stack { display: flex; flex-direction: column; gap: var(--sp-4); }
.pw-row { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }
.pw-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-4); }
.pw-grid-4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--sp-3); }
.pw-grid-5 { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--sp-3); }

/* ---------- public shell ---------- */
.pw-public-body { background: var(--bg); }
.pw-public { min-height: 100vh; display: flex; flex-direction: column; }
.pw-public__bar {
    display: flex; align-items: center; gap: var(--sp-3); height: var(--top-h);
    padding: 0 var(--sp-5); border-bottom: 1px solid var(--line);
}
.pw-public__brand { display: flex; align-items: center; gap: var(--sp-2); color: var(--tx); font-weight: 700; font-size: var(--fs-lg); }
.pw-public__brand:hover { color: var(--tx); text-decoration: none; }
.pw-public__logo {
    width: 18px; height: 18px; border-radius: 5px; display: inline-block;
    background: linear-gradient(135deg, var(--acc), var(--acc-hover));
}
.pw-public__actions { margin-left: auto; display: flex; gap: var(--sp-2); align-items: center; }
.pw-public__main { flex: 1; width: 100%; max-width: 1080px; margin: 0 auto; padding: var(--sp-8) var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-4); }
.pw-public__main--narrow { max-width: 440px; }
.pw-public__main--card {
    flex: 0 0 auto; width: calc(100% - 2 * var(--sp-4)); margin: var(--sp-8) auto auto; padding: var(--sp-6);
    background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-lg);
}
.pw-hero { display: flex; flex-direction: column; gap: var(--sp-3); padding: var(--sp-6) 0; max-width: 720px; }
.pw-hero__title { font-size: calc(var(--fs-2xl) * 1.6); letter-spacing: -0.02em; }
.pw-hero__lead { margin: 0; font-size: var(--fs-xl); color: var(--tx); }
.pw-hero__sub { margin: 0; color: var(--tx-2); }
.pw-maint {
    min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: var(--sp-4); padding: var(--sp-4);
}
.pw-public__foot {
    display: flex; flex-wrap: wrap; gap: var(--sp-3); justify-content: center;
    padding: var(--sp-5) var(--sp-4); border-top: 1px solid var(--line); color: var(--tx-3); font-size: var(--fs-sm);
}

/* ---------- ⌘K dialog ---------- */
.pw-cmdk {
    width: min(620px, calc(100vw - 32px)); margin-top: 12vh; padding: 0;
    background: var(--panel); color: var(--tx); border: 1px solid var(--line);
    border-radius: var(--radius-lg); box-shadow: var(--shadow-2);
}
.pw-cmdk::backdrop { background: var(--scrim); }
.pw-cmdk__input {
    width: 100%; padding: var(--sp-4); border: 0; border-bottom: 1px solid var(--line);
    background: transparent; font-size: var(--fs-lg); outline: none;
}
.pw-cmdk__results { max-height: 50vh; overflow-y: auto; padding: var(--sp-2); }
.pw-cmdk__hit {
    display: grid; grid-template-columns: 90px 1fr; gap: var(--sp-1) var(--sp-3); align-items: baseline;
    padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-sm); color: var(--tx);
}
.pw-cmdk__hit:hover, .pw-cmdk__hit[aria-selected="true"] { background: var(--panel-2); text-decoration: none; color: var(--tx); }
.pw-cmdk__kind { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: 0.08em; color: var(--tx-3); }
.pw-cmdk__label { font-weight: 500; }
.pw-cmdk__sub { grid-column: 2; font-family: var(--mono); font-size: var(--fs-sm); color: var(--tx-3); }
.pw-cmdk__empty { padding: var(--sp-4); color: var(--tx-3); text-align: center; }

/* ---------- modal dialog (#modal) ---------- */
.pw-modal {
    width: min(640px, calc(100vw - 32px)); max-height: calc(100vh - 64px); padding: 0;
    background: var(--panel); color: var(--tx); border: 1px solid var(--line);
    border-radius: var(--radius-lg); box-shadow: var(--shadow-2);
}
.pw-modal::backdrop { background: var(--scrim); }

/* ---------- responsive ---------- */
@media (max-width: 1100px) {
    .pw-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .pw-grid-5 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 899px) {
    .pw-app { grid-template-columns: minmax(0, 1fr); }
    .pw-side {
        position: fixed; left: 0; top: 0; bottom: 0; z-index: 50; width: min(280px, 85vw);
        transform: translateX(-100%); visibility: hidden;
        transition: transform 0.18s ease, visibility 0s linear 0.18s;
    }
    .pw-side[data-open="true"] {
        transform: none; visibility: visible; box-shadow: var(--shadow-2);
        transition: transform 0.18s ease, visibility 0s linear 0s;
    }
    .pw-top { padding: 0 var(--sp-3); }
    .pw-top__burger { display: inline-grid; }
    .pw-top__search { min-width: 0; }
    .pw-range { display: none; }
    .pw-content { padding: var(--sp-3); }
    .pw-grid-2, .pw-grid-4, .pw-grid-5 { grid-template-columns: minmax(0, 1fr); }
}
