/* Bili component classes — canonical Liquid Glass patterns lifted from app.css.
   Self-contained (no Bulma required). */

/* ── Glass card (.box / .glass-card) ── */
.box,.glass-card{background:var(--glass-fill);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--r-xl);padding:15px 24px;box-shadow:inset 0 1px 0 var(--glass-shine),inset 0 -1px 2px rgba(255,255,255,0.15),var(--glass-shadow);position:relative;overflow:hidden}
.box::before,.glass-card::before{content:'';position:absolute;top:0;left:0;right:0;height:60%;background:linear-gradient(180deg,rgba(255,255,255,0.35) 0%,transparent 100%);border-radius:var(--r-xl) var(--r-xl) 0 0;pointer-events:none}
.box>*,.glass-card>*{position:relative}

/* ── Dashboard widget card ── */
.bili-card{background:var(--glass-fill);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--r-lg);box-shadow:inset 0 1px 0 var(--glass-shine),var(--glass-shadow);display:flex;flex-direction:column;overflow:hidden;position:relative;transition:box-shadow 0.15s ease,transform 0.15s ease}
.bili-card:hover{box-shadow:inset 0 1px 0 var(--glass-shine),0 14px 50px oklch(20% 0.04 50 / 0.22),0 4px 12px oklch(20% 0.04 50 / 0.10)}
.bili-card__header{display:flex;align-items:center;justify-content:space-between;padding:0.5rem 0.9rem;border-bottom:1px solid rgba(255,255,255,0.35);background:rgba(255,255,255,0.20);cursor:grab;user-select:none;flex-shrink:0}
.bili-card__title{font-size:0.78rem;font-weight:500;color:var(--bili-ink-2);letter-spacing:0.02em}
.bili-card__actions{display:flex;gap:0.3rem}
.bili-card__body{flex:1;overflow:auto;padding:0.75rem 0.9rem;position:relative}

/* ── Buttons ── */
.button{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--bili-font-family);border-radius:var(--r-pill);font-weight:500;font-size:13px;padding:7px 16px;line-height:1.4;background:rgba(255,255,255,0.45);backdrop-filter:blur(10px) saturate(150%);-webkit-backdrop-filter:blur(10px) saturate(150%);border:1px solid rgba(255,255,255,0.55);color:var(--bili-ink);box-shadow:inset 0 1px 0 rgba(255,255,255,0.7),0 2px 6px rgba(40,25,15,0.08);transition:transform 0.12s,background 0.15s,box-shadow 0.15s;cursor:pointer;text-decoration:none}
.button:hover{background:rgba(255,255,255,0.6);transform:translateY(-1px);box-shadow:inset 0 1px 0 rgba(255,255,255,0.8),0 4px 12px rgba(40,25,15,0.12);text-decoration:none}
.button:active{transform:translateY(0)}
.button.is-small{font-size:11px;padding:5px 12px}
.button.is-fullwidth{width:100%;justify-content:center}
.button.is-primary,.button.is-success{background:oklch(68% 0.20 140 / 0.85);border:1px solid oklch(74% 0.16 140 / 0.5);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,0.35),0 2px 8px oklch(50% 0.16 140 / 0.28)}
.button.is-primary:hover,.button.is-success:hover{background:oklch(66% 0.22 140 / 0.92)}
.button.is-primary[disabled],.button.is-primary.is-disabled{background:oklch(68% 0.20 140 / 0.42) !important;border-color:oklch(74% 0.16 140 / 0.3) !important;color:rgba(255,255,255,0.6) !important;box-shadow:none !important;cursor:not-allowed}
.button.is-link{background:oklch(38% 0.10 140 / 0.88);border:1px solid oklch(48% 0.09 140 / 0.45);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,0.18),0 2px 8px oklch(28% 0.08 140 / 0.28)}
.button.is-danger{background:oklch(64% 0.19 25 / 0.85);border:1px solid oklch(70% 0.15 25 / 0.5);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,0.28),0 2px 8px oklch(50% 0.16 25 / 0.28)}
.button.is-danger.is-light{background:rgba(255,255,255,0.5);border:1px solid oklch(70% 0.15 25 / 0.4);color:oklch(45% 0.16 25);box-shadow:inset 0 1px 0 rgba(255,255,255,0.7)}
.button.is-light{background:rgba(255,255,255,0.5);border:1px solid rgba(255,255,255,0.6);color:var(--bili-ink)}

/* ── Tags — tinted glass pills ── */
.tag{display:inline-flex;align-items:center;gap:5px;border-radius:var(--r-pill-sm);font-size:11px;font-weight:500;padding:4px 11px;line-height:1.4;background:rgba(255,255,255,0.5);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,0.55);color:var(--bili-ink-2);box-shadow:inset 0 1px 0 rgba(255,255,255,0.7)}
.tag.is-success{background:oklch(45% 0.12 140 / 0.85);border-color:oklch(55% 0.10 140 / 0.45);color:#fff}
.tag.is-warning{background:oklch(76% 0.17 85 / 0.85);border-color:oklch(82% 0.13 85 / 0.45);color:var(--bili-gold-text)}
.tag.is-info{background:oklch(58% 0.12 288 / 0.85);border-color:oklch(66% 0.10 288 / 0.45);color:#fff}
.tag.is-danger{background:oklch(64% 0.19 25 / 0.85);border-color:oklch(72% 0.15 25 / 0.45);color:#fff}
.tag.is-primary{background:oklch(56% 0.12 138 / 0.85);border-color:oklch(64% 0.10 138 / 0.45);color:#fff}
.tag.is-light{background:rgba(255,255,255,0.55);color:var(--bili-ink-2)}
.tag.is-dark{background:oklch(28% 0.04 50 / 0.85);color:#fff}

/* ── Toggle (Apple-style liquid glass) ── */
.bili-toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
.bili-toggle__input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.bili-toggle__track{position:relative;width:44px;height:26px;border-radius:13px;background:rgba(255,255,255,0.35);backdrop-filter:blur(8px) saturate(150%);-webkit-backdrop-filter:blur(8px) saturate(150%);border:1px solid rgba(255,255,255,0.5);box-shadow:inset 0 1px 2px rgba(40,25,15,0.12),inset 0 -1px 1px rgba(255,255,255,0.5);transition:background 0.25s ease,border-color 0.25s ease}
.bili-toggle__input:checked+.bili-toggle__track{background:oklch(66% 0.20 140 / 0.88);border-color:oklch(68% 0.16 140 / 0.5);box-shadow:inset 0 1px 2px rgba(255,255,255,0.25),0 0 10px oklch(66% 0.20 140 / 0.25)}
.bili-toggle__knob{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,0.92);border:1px solid rgba(255,255,255,0.8);box-shadow:0 2px 4px rgba(40,25,15,0.18),inset 0 1px 0 rgba(255,255,255,0.9);transition:transform 0.25s cubic-bezier(0.4,0,0.2,1),background 0.25s ease}
.bili-toggle__input:checked+.bili-toggle__track .bili-toggle__knob{transform:translateX(18px);background:#fff}
.bili-toggle__input:focus-visible+.bili-toggle__track{outline:2px solid var(--bili-green-cta);outline-offset:2px}
.bili-toggle:hover .bili-toggle__track{background:rgba(255,255,255,0.45)}
.bili-toggle__input:checked:hover+.bili-toggle__track{background:oklch(64% 0.22 140 / 0.92)}

/* ── RACI split pill ── */
.raci-split{display:inline-flex;border-radius:var(--r-pill);overflow:hidden;border:1px solid rgba(0,0,0,0.06);box-shadow:inset 0 1px 0 rgba(255,255,255,0.6);font-size:11px;font-weight:500;line-height:1;height:26px;font-variant-numeric:tabular-nums}
.raci-split>span{display:inline-flex;align-items:center;gap:5px;padding:0 12px;min-width:52px;justify-content:center;border-right:1px solid rgba(255,255,255,0.55)}
.raci-split>span:last-child{border-right:0}
.raci-split>span .k{opacity:0.65;font-weight:400}
.raci-split .r{background:var(--raci-r-bg);color:var(--raci-r-ink)}
.raci-split .a{background:var(--raci-a-bg);color:var(--raci-a-ink)}
.raci-split .c{background:var(--raci-c-bg);color:var(--raci-c-ink)}
.raci-split .i{background:var(--raci-i-bg);color:var(--raci-i-ink)}
.raci-split>span.zero{opacity:0.4}

/* ── Tabs — glass pill segmented control ── */
.tabs{margin:0 0 14px;font-size:13px}
.tabs ul{display:inline-flex;gap:2px;padding:4px;margin:0;list-style:none;background:rgba(255,255,255,0.32);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border:1px solid var(--glass-border);border-radius:var(--r-pill);box-shadow:inset 0 1px 0 var(--glass-shine),0 2px 8px oklch(20% 0.04 50 / 0.06)}
.tabs li{margin:0}
.tabs li a{display:inline-flex;align-items:center;gap:6px;padding:6px 16px;border:1px solid transparent;border-radius:var(--r-pill);background:transparent;color:var(--bili-ink-2);font-family:var(--bili-font-family);font-weight:500;text-decoration:none;white-space:nowrap;transition:background-color 0.15s ease,color 0.15s ease;cursor:pointer}
.tabs li a:hover{background:rgba(255,255,255,0.45);color:var(--bili-ink)}
.tabs li.is-active a{background:oklch(28% 0.04 50 / 0.92);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,0.18),0 1px 3px oklch(20% 0.04 50 / 0.18)}
.tabs.is-fullwidth ul{display:flex;width:100%}
.tabs.is-fullwidth li{flex:1 1 0}
.tabs.is-fullwidth li a{justify-content:center;width:100%}

/* ── Document tabs (attached, playbook-generator pattern) ── */
.pg-tab-container{display:flex;gap:0}
.pg-tab-bar{display:flex;flex-direction:column;gap:2px;overflow-y:auto;min-width:180px;max-width:240px;padding:10px 8px;background:rgba(255,255,255,0.35);border:1px solid var(--glass-border);border-right:none;border-radius:var(--r-xl) 0 0 var(--r-xl);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);flex-shrink:0}
.pg-tab-btn{display:flex;align-items:center;gap:0.4rem;padding:8px 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:none;border-left:3px solid transparent;border-radius:var(--r-md);background:transparent;cursor:pointer;font-family:var(--bili-font-family);font-size:0.82rem;font-weight:500;color:var(--bili-ink-2);transition:background-color 0.15s ease,color 0.15s ease,border-color 0.15s ease;text-align:left;width:100%}
.pg-tab-btn.is-active{background:rgba(255,250,246,0.8);color:var(--bili-ink);border-left-color:var(--bili-green-cta)}
.pg-tab-btn:hover:not(.is-active){background:rgba(255,255,255,0.45);color:var(--bili-ink)}
.pg-tab-panel{flex:1;min-width:0;background:var(--glass-fill);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:0 var(--r-xl) var(--r-xl) 0;box-shadow:inset 0 1px 0 var(--glass-shine),var(--glass-shadow);overflow:hidden}

/* ── Table ── */
.table{background:transparent;font-size:13px;color:var(--bili-ink);border-collapse:collapse;width:100%}
.table thead th{background:transparent;color:var(--bili-ink-2);font-size:10px;font-weight:500;letter-spacing:0.06em;text-transform:uppercase;border-bottom:1px solid rgba(255,255,255,0.5);padding:10px 12px;text-align:left}
.table tbody td{border-bottom:1px solid rgba(255,255,255,0.35);padding:14px 12px;vertical-align:middle}
.table.is-hoverable tbody tr:hover{background:rgba(255,255,255,0.18)}
.table.is-striped tbody tr:nth-child(even){background:rgba(255,255,255,0.12)}
.table tbody tr:last-child td{border-bottom:none}
.table code{background:rgba(255,255,255,0.45);border:1px solid rgba(255,255,255,0.5);padding:2px 8px;border-radius:8px;font-size:11px;font-family:ui-monospace,"SF Mono",Menlo,monospace;color:var(--bili-ink)}
.table strong{font-weight:500}

/* ── Inputs ── */
.input,.textarea,.select select{font-family:var(--bili-font-family);width:100%;background:rgba(255,255,255,0.4);border:1px solid rgba(255,255,255,0.55);border-radius:var(--r-md);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:var(--bili-ink);font-size:13px;padding:8px 12px;box-shadow:inset 0 1px 0 rgba(255,255,255,0.6)}
.input:focus,.textarea:focus,.select select:focus{border-color:rgba(255,255,255,0.85);box-shadow:0 0 0 3px rgba(255,255,255,0.2);outline:none}
.input::placeholder,.textarea::placeholder{color:var(--bili-ink-3)}
.textarea{resize:vertical;min-height:80px}
.select{display:inline-block;position:relative}
.select select{appearance:none;padding-right:32px;cursor:pointer}
.select::after{content:'▾';position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--bili-ink-2);pointer-events:none;font-size:12px}
.label{display:block;color:var(--bili-ink);font-weight:500;font-size:12px;margin-bottom:6px}

/* ── Notification ── */
.notification{background:var(--glass-fill);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--r-md);font-size:13px;color:var(--bili-ink);box-shadow:inset 0 1px 0 rgba(255,255,255,0.6);padding:14px 18px}
.notification.is-success.is-light{background:oklch(85% 0.10 140 / 0.55);color:var(--bili-green-dark)}
.notification.is-warning.is-light{background:oklch(88% 0.10 85 / 0.55);color:var(--bili-gold-text)}
.notification.is-danger.is-light{background:oklch(80% 0.10 25 / 0.55);color:oklch(40% 0.14 25)}

/* ── Modal (wf-modal structure, glass card) ── */
.wf-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px}
.wf-modal[hidden]{display:none}
.wf-modal__backdrop{position:absolute;inset:0;background:rgba(40,25,15,0.35);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.wf-modal__card{position:relative;width:min(640px,100%);max-height:88vh;display:flex;flex-direction:column;background:var(--glass-fill-2);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--r-xl);box-shadow:inset 0 1px 0 var(--glass-shine),var(--glass-shadow);overflow:hidden}
.wf-modal__head{display:flex;align-items:flex-start;gap:12px;padding:18px 20px 14px;border-bottom:1px solid rgba(255,255,255,0.4)}
.wf-modal__eyebrow{font-size:10px;font-weight:500;letter-spacing:0.06em;text-transform:uppercase;color:var(--bili-ink-3);margin-bottom:3px}
.wf-modal__title{font-size:16px;font-weight:500;color:var(--bili-ink)}
.wf-modal__x{margin-left:auto;border:none;background:rgba(255,255,255,0.5);color:var(--bili-ink-2);width:28px;height:28px;border-radius:50%;cursor:pointer;font-size:17px;line-height:1}
.wf-modal__body{padding:16px 20px;overflow-y:auto}
.wf-modal__foot{display:flex;align-items:center;gap:10px;padding:14px 20px;border-top:1px solid rgba(255,255,255,0.4)}
.wf-modal__hint{font-size:11px;color:var(--bili-ink-3)}

/* ── Corner toast ── */
.bili-toast-container{position:fixed;bottom:24px;right:24px;z-index:9999;transition:opacity 0.35s ease,transform 0.35s ease}
.bili-toast-container.is-hidden{opacity:0;transform:translateY(16px);pointer-events:none}
.bili-toast{display:flex;align-items:center;gap:10px;background:var(--glass-fill-2);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--r-pill);padding:10px 18px;box-shadow:inset 0 1px 0 var(--glass-shine),0 8px 30px oklch(20% 0.04 50 / 0.22);font-size:13px;font-weight:500;color:var(--bili-ink)}
.bili-toast__icon{color:var(--bili-green-cta);font-size:16px;flex-shrink:0}

/* ── Avatar ── */
.bili-avatar{width:32px;height:32px;border-radius:50%;background:var(--bili-avatar-bg);color:#fff;font-size:12px;font-weight:500;display:flex;align-items:center;justify-content:center;flex-shrink:0}

/* ── Progress ── */
.bili-progress-wrapper{display:flex;align-items:center;gap:8px;min-width:80px}
.bili-progress-track{flex:1;height:8px;border-radius:999px;background:rgba(255,255,255,0.42);border:1px solid rgba(255,255,255,0.5);overflow:hidden}
.bili-progress-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--bili-sage),var(--bili-green-cta));transition:width 0.6s cubic-bezier(.2,.7,.2,1)}
.bili-progress-label{font-size:0.75rem;min-width:32px;text-align:right;color:var(--bili-ink-2)}

/* ── Upload drop zone ── */
.dt-upload__drop{border:2px dashed rgba(150,120,90,0.4);border-radius:var(--r-lg);background:rgba(255,255,255,0.18);padding:26px 22px;text-align:center;cursor:pointer;transition:border-color 0.18s ease,background 0.18s ease,transform 0.18s ease}
.dt-upload__drop:hover{border-color:oklch(66% 0.15 140 / 0.7);background:oklch(85% 0.08 140 / 0.22)}
.dt-upload__drop.is-drag{border-color:var(--bili-green-cta);background:oklch(85% 0.10 140 / 0.32);transform:scale(1.01)}
