            /* ================= non-grid view types ================= */
            /* shared root that replaces #grid for kanban/calendar/gallery/form */
            #viewroot {
                width: 100%;
                min-height: 100%;
            }
            /* ---- kanban ---- */
            .kb-board {
                display: flex;
                gap: 12px;
                align-items: flex-start;
                padding: 14px 14px 120px;
                min-height: 100%;
            }
            .kb-col {
                flex: 0 0 272px;
                width: 272px;
                background: var(--group-bg);
                border: 1px solid var(--line);
                border-radius: 10px;
                display: flex;
                flex-direction: column;
                max-height: calc(100vh - 160px);
            }
            .kb-col.kb-drop {
                box-shadow: 0 0 0 2px var(--accent-border) inset;
                background: var(--head-hover);
            }
            .kb-colhead {
                display: flex;
                align-items: center;
                gap: 8px;
                padding: 10px 12px 8px;
                position: sticky;
                top: 0;
            }
            .kb-colhead .kb-count {
                color: var(--faint);
                font-size: 12px;
                font-weight: 600;
            }
            .kb-colhead .kb-emptyname {
                color: var(--mut);
                font-weight: 600;
                font-size: 12.5px;
            }
            .kb-cards {
                flex: 1;
                overflow-y: auto;
                padding: 0 10px 8px;
                display: flex;
                flex-direction: column;
                gap: 8px;
            }
            .kb-card {
                background: var(--paper);
                border: 1px solid var(--line);
                border-radius: 8px;
                padding: 10px 11px;
                cursor: pointer;
                box-shadow: 0 1px 2px rgba(10, 23, 34, 0.04);
            }
            .kb-card:hover {
                border-color: var(--line2);
                background: var(--hover);
            }
            .kb-card.kb-dragging {
                opacity: 0.4;
            }
            .kb-card .kb-title {
                font-weight: 600;
                font-size: 13px;
                color: var(--ink);
                margin-bottom: 6px;
                word-break: break-word;
            }
            .kb-fieldrow {
                display: flex;
                gap: 6px;
                font-size: 12px;
                margin-top: 3px;
                align-items: baseline;
            }
            .kb-fieldrow .kb-flab {
                color: var(--faint);
                flex: 0 0 auto;
            }
            .kb-fieldrow .kb-fval {
                color: var(--mut);
                flex: 1;
                min-width: 0;
                overflow: hidden;
                text-overflow: ellipsis;
                display: flex;
                gap: 3px;
                flex-wrap: wrap;
            }
            .kb-add {
                margin: 0 10px 10px;
                padding: 7px;
                border: 1px dashed var(--line2);
                border-radius: 7px;
                color: var(--mut);
                font-size: 12.5px;
                text-align: center;
                background: transparent;
                width: calc(100% - 20px);
            }
            .kb-add:hover {
                background: var(--head-hover);
                color: var(--ink);
            }
            /* ---- gallery ---- */
            .gal-grid {
                display: grid;
                grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
                gap: 14px;
                padding: 16px 16px 120px;
            }
            .gal-card {
                background: var(--paper);
                border: 1px solid var(--line);
                border-radius: 10px;
                overflow: hidden;
                cursor: pointer;
                display: flex;
                flex-direction: column;
                box-shadow: 0 1px 2px rgba(10, 23, 34, 0.04);
            }
            .gal-card:hover {
                border-color: var(--line2);
                box-shadow: var(--shadow);
            }
            .gal-cover {
                height: 76px;
                display: grid;
                place-items: center;
                font-size: 30px;
                font-weight: 700;
                color: #fff;
            }
            .gal-body {
                padding: 11px 12px 13px;
            }
            .gal-title {
                font-weight: 600;
                font-size: 13.5px;
                color: var(--ink);
                margin-bottom: 7px;
                word-break: break-word;
            }
            .gal-new {
                border: 1px dashed var(--line2);
                background: transparent;
                color: var(--mut);
                min-height: 150px;
                display: grid;
                place-items: center;
                font-size: 13px;
            }
            .gal-new:hover {
                background: var(--head-hover);
                color: var(--ink);
            }
            /* ---- calendar ---- */
            .cal-wrap {
                padding: 14px 16px 120px;
            }
            .cal-grid {
                display: grid;
                grid-template-columns: repeat(7, 1fr);
                border-left: 1px solid var(--line);
                border-top: 1px solid var(--line);
                background: var(--paper);
                border-radius: 8px;
                overflow: hidden;
            }
            .cal-wk {
                padding: 7px 8px;
                font-size: 11px;
                font-weight: 600;
                color: var(--faint);
                text-transform: uppercase;
                letter-spacing: 0.03em;
                border-right: 1px solid var(--line);
                border-bottom: 1px solid var(--line2);
                background: var(--head-bg);
            }
            .cal-day {
                min-height: 104px;
                border-right: 1px solid var(--line);
                border-bottom: 1px solid var(--line);
                padding: 4px 5px 6px;
                cursor: pointer;
                display: flex;
                flex-direction: column;
                gap: 3px;
            }
            .cal-day:hover {
                background: var(--hover);
            }
            .cal-day.cal-dim {
                background: var(--group-bg);
                color: var(--faint);
            }
            .cal-day.cal-dim:hover {
                background: var(--group-hover);
            }
            .cal-daynum {
                font-size: 11.5px;
                font-weight: 600;
                color: var(--mut);
                align-self: flex-end;
            }
            .cal-day.cal-today .cal-daynum {
                background: var(--accent);
                color: var(--ink);
                border-radius: 50%;
                width: 20px;
                height: 20px;
                display: grid;
                place-items: center;
            }
            .cal-chip {
                font-size: 11.5px;
                padding: 2px 6px;
                border-radius: 5px;
                background: var(--linkpill-bg);
                color: var(--linkpill-tx);
                cursor: pointer;
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
            }
            .cal-chip:hover {
                filter: brightness(0.96);
            }
            .cal-more {
                font-size: 11px;
                color: var(--mut);
                cursor: pointer;
                padding: 1px 6px;
            }
            .cal-more:hover {
                color: var(--ink);
            }
            /* ---- form ---- */
            .form-wrap {
                max-width: 620px;
                margin: 0 auto;
                padding: 28px 20px 120px;
            }
            .form-card {
                background: var(--paper);
                border: 1px solid var(--line);
                border-radius: 12px;
                padding: 26px 28px 28px;
                box-shadow: var(--shadow);
            }
            .form-title {
                font-size: 22px;
                font-weight: 700;
                color: var(--ink);
            }
            .form-desc {
                color: var(--mut);
                font-size: 13px;
                margin-top: 6px;
                line-height: 1.5;
            }
            .form-fields {
                margin-top: 20px;
            }
            .form-success {
                margin-top: 14px;
                color: var(--ok-tx);
                font-size: 13px;
                font-weight: 600;
            }
            /* per-type icon tint on the view-name button */
            .vbtn.viewname .ic svg {
                color: var(--accent-border);
            }
            [data-theme="dark"] .vbtn.viewname .ic svg {
                color: var(--accent);
            }
