@keyframes skeleton-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-shimmer,[data-skeleton]{pointer-events:none;-webkit-user-select:none;user-select:none;background:linear-gradient(90deg,#9966ff0f 20%,#9966ff26 50%,#9966ff0f 80%) 0 0/200% 100%;border-radius:8px;animation:1.8s ease-in-out infinite skeleton-shimmer;display:block}[data-theme=dark] .skeleton-shimmer,[data-theme=dark] [data-skeleton]{background:linear-gradient(90deg,#ffffff08 20%,#ffffff14 50%,#ffffff08 80%) 0 0/200% 100%}html[data-motion=reduce] .skeleton-shimmer,html[data-motion=reduce] [data-skeleton]{animation:none!important}.skeleton-line{border-radius:4px;width:100%;height:14px;margin-bottom:8px}.skeleton-line.short{width:40%}.skeleton-line.medium{width:70%}.skeleton-line.title{border-radius:6px;width:50%;height:28px;margin-bottom:12px}.skeleton-line.sub-title{border-radius:6px;width:35%;height:20px;margin-bottom:10px}.skeleton-circle{border-radius:50%;flex-shrink:0}.skeleton-pill{border-radius:9999px;height:32px;display:inline-block}.skeleton-btn{border-radius:12px;height:42px;display:inline-block}.skeleton-app-layout{grid-template-columns:var(--sidebar-width,240px) 1fr;background-color:var(--bg-main,#fcfbff);min-height:100vh;display:grid}@media (max-width:900px){.skeleton-app-layout{grid-template-columns:1fr}}.skeleton-sidebar{width:var(--sidebar-width,240px);background:var(--bg-card,#fff);border-right:1px solid var(--border-main,#e0e0e0);flex-direction:column;gap:24px;min-height:100vh;padding:24px 16px;display:flex}.skeleton-sidebar-brand{border-bottom:1px solid var(--border-main,#e0e0e0);align-items:center;gap:12px;padding-bottom:16px;display:flex}.skeleton-sidebar-menu{flex-direction:column;flex:1;gap:12px;display:flex}.skeleton-sidebar-item{background:#9966ff08;border-radius:10px;align-items:center;gap:12px;height:44px;padding:0 12px;display:flex}.skeleton-sidebar-user{border-top:1px solid var(--border-main,#e0e0e0);align-items:center;gap:12px;padding-top:16px;display:flex}.skeleton-main{flex:1;min-width:0;padding:32px;overflow-y:auto}@media (max-width:768px){.skeleton-main{padding:16px}}.skeleton-public-nav{border-bottom:1px solid var(--border-main,#e0e0e0);background:var(--bg-card,#fff);justify-content:space-between;align-items:center;height:70px;padding:0 32px;display:flex}.skeleton-welcome-banner{background:var(--bg-card,#fff);border:1px solid var(--border-main,#e0e0e0);border-radius:20px;flex-direction:column;justify-content:center;gap:12px;height:140px;margin-bottom:24px;padding:28px;display:flex}.skeleton-dashboard-grid{grid-template-columns:1.8fr 1.2fr;gap:24px;margin-bottom:24px;display:grid}@media (max-width:1100px){.skeleton-dashboard-grid{grid-template-columns:1fr}}.skeleton-card{background:var(--bg-card,#fff);border:1px solid var(--border-main,#e0e0e0);border-radius:20px;padding:24px}.skeleton-stats-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:28px;display:grid}@media (max-width:1024px){.skeleton-stats-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:600px){.skeleton-stats-grid{grid-template-columns:1fr}}.skeleton-stat-card{background:var(--bg-card,#fff);border:1px solid var(--border-main,#e0e0e0);border-radius:16px;align-items:center;gap:16px;padding:20px;display:flex}.skeleton-table-card{background:var(--bg-card,#fff);border:1px solid var(--border-main,#e0e0e0);border-radius:16px;overflow:hidden}.skeleton-table-header{border-bottom:1px solid var(--border-main,#e0e0e0);background:#9966ff0a;justify-content:space-between;align-items:center;height:52px;padding:0 20px;display:flex}.skeleton-table-row{border-bottom:1px solid var(--border-main,#e0e0e0);justify-content:space-between;align-items:center;gap:16px;height:60px;padding:0 20px;display:flex}.skeleton-table-row:last-child{border-bottom:none}
.mobile-shell{display:contents}.mobile-app-bar,.mobile-bottom-nav,.mobile-drawer,.mobile-drawer-backdrop{display:none!important}@media (max-width:768px){.mobile-shell{background:var(--bg-main);flex-direction:column;min-height:100dvh;display:flex}.mobile-shell.mobile-shell--learn{height:100dvh;overflow:hidden}.mobile-app-bar{z-index:100;height:56px;padding:0 16px;padding-top:env(safe-area-inset-top);height:calc(56px + env(safe-area-inset-top,0px));border-bottom:1px solid var(--border-main);background:color-mix(in srgb, var(--bg-card) 94%, transparent);color:var(--text-main);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);font-family:var(--font-montserrat), sans-serif;justify-content:space-between;align-items:center;position:sticky;top:0;display:flex!important}.mobile-shell:not(.mobile-shell--learn) .mobile-app-bar{position:fixed;left:0;right:0}.mobile-app-brand{color:inherit;font-family:var(--font-poppins), sans-serif;align-items:center;gap:8px;font-size:1.05rem;font-weight:700;text-decoration:none;display:inline-flex}.mobile-app-brand img{width:30px;height:30px}.mobile-role-pill{text-transform:uppercase;letter-spacing:.05em;border-radius:999px;justify-content:center;align-items:center;margin-left:2px;padding:2px 7px;font-size:.62rem;font-weight:700;line-height:1.2;display:inline-flex}.mobile-role-pill.role-admin{color:#92400e;background:#fef3c7;border:1px solid #fde68a}[data-theme=dark] .mobile-role-pill.role-admin{color:#fef3c7;background:#78350f;border-color:#92400e}.mobile-role-pill.role-maintainer{color:#1e40af;background:#dbeafe;border:1px solid #bfdbfe}[data-theme=dark] .mobile-role-pill.role-maintainer{color:#dbeafe;background:#1e3a8a;border-color:#2563eb}.mobile-app-actions{align-items:center;gap:8px;display:inline-flex}.mobile-drawer-link-button{text-align:left;cursor:pointer;background:0 0;border:0;width:100%;font-family:inherit}.mobile-app-action{border:1px solid var(--border-main);background:var(--bg-card);width:44px;height:44px;color:var(--text-main);font:inherit;cursor:pointer;border-radius:10px;place-items:center;transition:all .2s;display:grid}.mobile-app-action:hover,.mobile-app-action:focus-visible{border-color:var(--primary-color);color:var(--primary-color)}.mobile-shell-content{width:100%;min-width:0;min-height:0;padding-top:calc(56px + env(safe-area-inset-top,0px));padding-bottom:calc(64px + env(safe-area-inset-bottom,0px));flex:1 0 auto;overflow-x:clip}.mobile-shell--learn .mobile-shell-content{flex:1 1 0;min-height:0;padding-top:0;display:flex;overflow:hidden}.mobile-bottom-nav{z-index:100;min-height:56px;padding:6px 8px calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-main);background:color-mix(in srgb, var(--bg-card) 96%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);font-family:var(--font-montserrat), sans-serif;justify-content:space-around;align-items:stretch;position:fixed;bottom:0;left:0;right:0;display:flex!important}.mobile-bottom-nav-item{min-width:0;min-height:44px;color:var(--text-muted);font-family:var(--font-montserrat), sans-serif;border-radius:10px;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:4px 2px;font-size:.68rem;font-weight:600;text-decoration:none;transition:all .2s;display:flex}.mobile-bottom-nav-item.active{background:var(--selected-background-color);color:var(--primary-color)}.mobile-bottom-nav-icon{place-items:center;width:22px;height:22px;line-height:1;display:grid}.mobile-drawer-backdrop{z-index:200;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000073;animation:.2s forwards fadeIn;position:fixed;inset:0;display:block!important}.mobile-drawer{background:var(--bg-card);border-left:1px solid var(--border-main);z-index:201;width:min(320px,86vw);font-family:var(--font-montserrat), sans-serif;flex-direction:column;transition:transform .25s cubic-bezier(.16,1,.3,1);position:fixed;top:0;bottom:0;right:0;transform:translate(100%);box-shadow:-8px 0 28px #00000029;display:flex!important}.mobile-drawer.is-open{transform:translate(0)}.mobile-drawer-header{border-bottom:1px solid var(--border-main);justify-content:space-between;align-items:center;gap:12px;padding:16px;display:flex}.mobile-drawer-user{flex:1;align-items:center;gap:12px;min-width:0;display:flex}.mobile-drawer-avatar{background:var(--selected-background-color);width:40px;height:40px;color:var(--primary-color);border-radius:999px;flex-shrink:0;place-items:center;display:grid}.mobile-drawer-user-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.mobile-drawer-user-name-row{align-items:center;gap:6px;display:flex}.mobile-drawer-user-name{color:var(--text-main);white-space:nowrap;text-overflow:ellipsis;font-size:.95rem;font-weight:700;overflow:hidden}.mobile-drawer-user-email{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:.78rem;overflow:hidden}.mobile-drawer-close-btn{border:1px solid var(--border-main);width:36px;height:36px;color:var(--text-main);cursor:pointer;background:0 0;border-radius:8px;place-items:center;transition:all .2s;display:grid}.mobile-drawer-close-btn:hover{border-color:var(--primary-color);color:var(--primary-color)}.mobile-drawer-nav{flex-direction:column;flex:1;gap:18px;padding:16px;display:flex;overflow-y:auto}.mobile-drawer-section{flex-direction:column;gap:4px;display:flex}.mobile-drawer-section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);padding:0 8px 4px;font-size:.68rem;font-weight:800}.mobile-drawer-link{color:var(--text-main);border-radius:10px;align-items:center;gap:12px;padding:10px 12px;font-size:.9rem;font-weight:600;text-decoration:none;transition:all .15s;display:flex}.mobile-drawer-link:hover{background:var(--border-main)}.mobile-drawer-link.active{background:var(--primary-color);color:#fff}.mobile-drawer-footer{padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-main);background:color-mix(in srgb, var(--bg-card) 98%, transparent)}.mobile-drawer-signout-form{width:100%;margin:0}.mobile-drawer-signout-btn{border:1px solid var(--border-main);color:#ef4444;cursor:pointer;background:0 0;border-radius:10px;justify-content:center;align-items:center;gap:8px;width:100%;padding:10px;font-size:.88rem;font-weight:600;transition:all .2s;display:flex}.mobile-drawer-signout-btn:hover{background:#ef444414;border-color:#ef4444}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}
