*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg:#fafafa;--color-surface:#fff;--color-border:#e5e5e5;--color-text:#1a1a1a;--color-text-secondary:#666;--color-text-muted:#999;--color-primary:#1a1a1a;--color-accent:#3b82f6;--color-danger:#ef4444;--color-success:#10b981;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono:"SF Mono", "Fira Code", "Consolas", "Monaco", monospace;--radius:6px;--radius-lg:10px;--shadow-sm:0 1px 2px #0000000a;--shadow:0 1px 3px #00000014, 0 1px 2px #0000000a;--shadow-lg:0 4px 16px #00000014;--max-width:1200px;--navbar-height:56px}html{-webkit-font-smoothing:antialiased;font-size:16px}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-bg);min-height:100vh;line-height:1.6}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}button{cursor:pointer;font-family:inherit;font-size:inherit}input,textarea,select{font-family:inherit;font-size:inherit}.container{max-width:var(--max-width);margin:0 auto;padding:0 24px}.page{padding-top:calc(var(--navbar-height) + 32px);min-height:100vh;padding-bottom:64px}.page-no-nav{min-height:100vh;padding-top:32px;padding-bottom:64px}.navbar{height:var(--navbar-height);background:var(--color-surface);border-bottom:1px solid var(--color-border);z-index:100;justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0}.navbar-left{flex-shrink:0;align-items:center;gap:10px;display:flex}.navbar-brand{align-items:center;gap:8px;display:flex}.navbar-logo-img{width:auto;height:28px}.navbar-logo{letter-spacing:-.02em;font-size:1.1rem;font-weight:700}.navbar-domain{color:var(--color-text-muted);font-size:.8rem}.navbar-center{flex:1;justify-content:center;padding:0 20px;display:flex}.navbar-right{flex-shrink:0;align-items:center;gap:12px;display:flex}.navbar-user{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);align-items:center;gap:8px;padding:4px 12px;display:flex}.navbar-user-email{color:var(--color-text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:160px;font-size:.8rem;overflow:hidden}.navbar-admin-badge{background:var(--color-primary);color:#fff;border-radius:999px;padding:1px 6px;font-size:.65rem;font-weight:500}@media (width<=768px){.navbar-domain{display:none}.navbar-user-email{max-width:100px}}.back-link{color:var(--color-text-muted);margin-bottom:12px;font-size:.85rem;transition:color .15s;display:inline-block}.back-link:hover{color:var(--color-text)}.back-link-floating{z-index:90;color:var(--color-text-secondary);background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow);border-radius:999px;align-items:center;padding:6px 14px;font-size:.8rem;transition:color .15s,box-shadow .15s;display:inline-flex;position:fixed;top:68px;left:20px}.back-link-floating:hover{color:var(--color-text);box-shadow:var(--shadow-lg)}.tabbar{background:var(--color-surface);border-top:1px solid var(--color-border);z-index:100;justify-content:center;gap:0;height:56px;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar-tab{height:100%;color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;border-top:2px solid #0000;flex:1;justify-content:center;align-items:center;padding:0;font-size:.85rem;font-weight:500;transition:color .15s,border-color .15s;display:flex}.tabbar-tab:hover{color:var(--color-text)}.tabbar-tab.active{color:var(--color-accent);border-top-color:var(--color-accent)}.page-with-tabbar{padding-bottom:80px}.search-box{align-items:center;gap:8px;display:flex}.search-input{border:1px solid var(--color-border);background:var(--color-bg);width:100%;max-width:480px;color:var(--color-text);border-radius:999px;outline:none;padding:7px 14px;font-size:.85rem;transition:border-color .15s,background .15s}.search-input:focus{border-color:var(--color-text-muted);background:var(--color-surface)}.search-input::placeholder{color:var(--color-text-muted)}.navbar-link{color:var(--color-text-secondary);font-size:.875rem;transition:color .15s}.navbar-link:hover{color:var(--color-text)}.footer{border-top:1px solid var(--color-border);text-align:center;color:var(--color-text-muted);padding:24px 0;font-size:.8rem}.footer p{margin-bottom:6px}.icp-link{color:var(--color-text-muted);font-size:.75rem}.icp-link:hover{color:var(--color-text-secondary)}.btn{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-text);white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:8px 18px;font-size:.875rem;font-weight:500;line-height:1.4;transition:box-shadow .15s;display:inline-flex}.btn:hover{box-shadow:var(--shadow-sm)}.btn-primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.btn-danger{background:var(--color-danger);color:#fff;border-color:var(--color-danger)}.btn-sm{padding:4px 12px;font-size:.8rem}.category-tabs{border-bottom:1px solid var(--color-border);gap:4px;margin-bottom:32px;padding-bottom:0;display:flex}.category-tab{color:var(--color-text-secondary);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 20px;font-size:.875rem;font-weight:500;transition:color .15s,border-color .15s}.category-tab:hover{color:var(--color-text)}.category-tab.active{color:var(--color-text);border-bottom-color:var(--color-text)}.card-grid{grid-template-columns:repeat(4,1fr);gap:20px;display:grid}@media (width<=1100px){.card-grid{grid-template-columns:repeat(3,1fr)}}@media (width<=700px){.card-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=420px){.card-grid{grid-template-columns:1fr}}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);transition:box-shadow .15s;overflow:hidden}.card:hover{box-shadow:var(--shadow-lg)}.card-image{aspect-ratio:16/10;object-fit:cover;background:var(--color-bg);border-bottom:1px solid var(--color-border);width:100%}.card-image-placeholder{aspect-ratio:16/10;width:100%;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);background:#f0f0f0;justify-content:center;align-items:center;font-size:.875rem;display:flex}.card-body{padding:16px 20px}.card-title{margin-bottom:4px;font-size:1rem;font-weight:600}.card-desc{color:var(--color-text-secondary);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin-bottom:10px;font-size:.825rem;display:-webkit-box;overflow:hidden}.card-tags{flex-wrap:wrap;gap:6px;display:flex}.tag{color:var(--color-text-secondary);background:var(--color-bg);border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:500;display:inline-block}.detail-title{margin-bottom:8px;font-size:1.5rem;font-weight:700}.detail-desc{color:var(--color-text-secondary);max-width:720px;margin-bottom:8px;font-size:.925rem}.detail-tags{flex-wrap:wrap;gap:6px;margin-bottom:24px;display:flex}.detail-preview{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);margin-bottom:32px;overflow:hidden}.detail-preview iframe{aspect-ratio:16/8;border:none;width:100%;display:block}.detail-preview-large iframe{aspect-ratio:16/8;min-height:calc(100vh - 280px)}@media (width>=1600px){.detail-preview-large iframe{min-height:calc(100vh - 240px)}}.code-tabs{border-bottom:1px solid var(--color-border);gap:0;margin-bottom:0;display:flex}.code-tab{color:var(--color-text-secondary);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 16px;font-size:.8rem;font-weight:500}.code-tab.active{color:var(--color-text);border-bottom-color:var(--color-accent)}.code-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:0 0 var(--radius) var(--radius);border-top:none;overflow:hidden}.code-header{background:var(--color-bg);border-bottom:1px solid var(--color-border);color:var(--color-text-secondary);justify-content:space-between;align-items:center;padding:8px 16px;font-size:.8rem;display:flex}.code-body{max-height:400px;overflow:auto}.code-body pre{color:#333;background:#f8f8f8;border-radius:0;margin:0;padding:16px;font-size:.8rem;line-height:1.6;overflow:auto}.code-body code{font-family:var(--font-mono)}.code-body pre[class*=language-]{background:#f8f8f8;border-radius:0;margin:0}.login-page{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;max-width:400px;padding:40px}.login-card h1{text-align:center;margin-bottom:24px;font-size:1.25rem;font-weight:700}.form-group{margin-bottom:16px}.form-group label{color:var(--color-text-secondary);margin-bottom:6px;font-size:.85rem;font-weight:500;display:block}.form-input{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);width:100%;color:var(--color-text);outline:none;padding:10px 14px;font-size:.9rem;transition:border-color .15s}.form-input:focus{border-color:var(--color-accent);background:var(--color-surface)}.form-error{color:var(--color-danger);margin-bottom:12px;font-size:.8rem}.admin-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.admin-header h1{font-size:1.25rem;font-weight:700}.admin-table{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;overflow:hidden}.admin-table table{border-collapse:collapse;width:100%}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--color-border);padding:12px 16px;font-size:.875rem}.admin-table th{background:var(--color-bg);color:var(--color-text-secondary);font-size:.8rem;font-weight:600}.admin-table tr:last-child td{border-bottom:none}.admin-table .actions{gap:8px;display:flex}.modal-overlay{z-index:200;background:#0006;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);flex-direction:column;width:100%;max-width:95vw;max-height:92vh;display:flex}.modal h2{flex-shrink:0;padding:28px 32px 0;font-size:1.15rem;font-weight:700}.modal-body{flex:1;padding:20px 32px;overflow-y:auto}.modal-actions{border-top:1px solid var(--color-border);flex-shrink:0;justify-content:flex-end;gap:12px;padding:16px 32px 24px;display:flex}.form-row{grid-template-columns:1fr 1fr;gap:20px;display:grid}@media (width<=600px){.form-row{grid-template-columns:1fr}}.code-files-section{margin-top:20px}.code-files-section h3,.section-heading{margin-bottom:12px;font-size:.95rem;font-weight:600}.code-file-item{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius);margin-bottom:12px;padding:16px}.code-file-header{align-items:center;gap:8px;margin-bottom:10px;display:flex}.code-file-header .form-input{width:auto;min-width:0}.code-file-header .btn{flex-shrink:0}.code-file-textarea{width:100%;min-height:150px;font-family:var(--font-mono);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-text);resize:vertical;outline:none;padding:12px;font-size:.8rem;line-height:1.5}.code-file-textarea:focus{border-color:var(--color-accent)}.form-textarea{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-bg);width:100%;color:var(--color-text);resize:vertical;outline:none;min-height:80px;padding:10px 14px;font-size:.9rem;transition:border-color .15s}.form-textarea:focus{border-color:var(--color-accent);background:var(--color-surface)}.empty-state{text-align:center;color:var(--color-text-muted);padding:80px 20px}.empty-state p{font-size:.95rem}.mr-2{margin-right:8px}.mt-2{margin-top:8px}.mb-4{margin-bottom:16px}.text-secondary{color:var(--color-text-secondary)}.text-sm{font-size:.85rem}.upload-zone{border:2px dashed var(--color-border);border-radius:var(--radius);text-align:center;width:100%;color:var(--color-text-muted);cursor:pointer;margin-bottom:16px;padding:20px;font-size:.85rem;transition:border-color .15s;display:block}.upload-zone:hover{border-color:var(--color-text-muted)}.upload-hint{color:var(--color-text-muted);margin-top:4px;font-size:.75rem;font-weight:400}.image-preview-thumb{border-radius:var(--radius);border:1px solid var(--color-border);max-width:200px}.preview-toggle{border-top:1px solid var(--color-border);align-items:center;gap:8px;margin-top:16px;padding-top:16px;display:flex}.preview-panel{border:1px solid var(--color-border);border-radius:var(--radius);background:#fff;margin-top:12px;overflow:hidden}.preview-panel iframe{border:none;width:100%;height:360px}.preview-panel .preview-bar{background:var(--color-bg);border-bottom:1px solid var(--color-border);color:var(--color-text-muted);justify-content:space-between;align-items:center;padding:6px 14px;font-size:.75rem;display:flex}.resource-item{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius);align-items:center;gap:12px;margin-bottom:8px;padding:10px 14px;display:flex}.resource-name{flex:1;font-size:.85rem;font-weight:500}.resource-url{font-family:var(--font-mono);font-size:.75rem}.status-badge{border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:500;display:inline-block}.status-approved{color:#2d7d2d;background:#e6f7e6}.status-pending{color:#e67e22;background:#fff3e0}.status-rejected{color:#c0392b;background:#fde8e8}.row-pending{background:#fffbeb}.btn-approve{color:#2d7d2d;background:#e6f7e6;border-color:#b7d9b7}.btn-approve:hover{background:#c8e6c8}.card-stats{color:var(--color-text-muted);border-top:1px solid var(--color-border);align-items:center;gap:12px;margin-top:8px;padding-top:8px;font-size:.7rem;display:flex}.card-author-inline{margin-left:auto}.fav-btn{width:32px;height:32px;color:var(--color-text-muted);cursor:pointer;vertical-align:middle;background:0 0;border:none;justify-content:center;align-items:center;margin-left:8px;font-size:1.2rem;transition:color .15s,transform .15s;display:inline-flex}.fav-btn:hover{color:var(--color-danger);transform:scale(1.15)}.fav-btn.active{color:var(--color-danger)}.detail-stats{color:var(--color-text-muted);margin-left:auto;font-size:.8rem}.section-block{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);margin-bottom:24px;padding:24px}.leaderboard-subtabs{gap:8px;display:flex}.leaderboard-cat{gap:8px;margin-left:auto;display:flex}.leaderboard-list{flex-direction:column;gap:4px;margin-top:16px;display:flex}.leaderboard-item{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);color:inherit;align-items:center;gap:14px;padding:12px 16px;text-decoration:none;transition:box-shadow .15s;display:flex}.leaderboard-item:hover{box-shadow:var(--shadow-sm)}.leaderboard-rank{width:28px;height:28px;color:var(--color-text-muted);background:var(--color-bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.8rem;font-weight:700;display:flex}.leaderboard-item:first-child .leaderboard-rank{color:#fff;background:gold}.leaderboard-item:nth-child(2) .leaderboard-rank{color:#fff;background:silver}.leaderboard-item:nth-child(3) .leaderboard-rank{color:#fff;background:#cd7f32}.leaderboard-info{flex:1;min-width:0}.leaderboard-title{text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;font-weight:500;display:block;overflow:hidden}.leaderboard-meta{gap:4px;margin-top:4px;display:flex}.leaderboard-count{color:var(--color-accent);flex-shrink:0;font-size:.9rem;font-weight:600}.user-rank-item{cursor:default}.my-page{grid-template-columns:240px 1fr;align-items:stretch;gap:24px;margin-top:8px;display:grid}@media (width<=700px){.my-page{grid-template-columns:1fr}}.my-sidebar{flex-direction:column;gap:16px;display:flex}.my-user-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);align-items:center;gap:14px;padding:20px;display:flex}.my-avatar{background:var(--color-primary);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;font-size:1.2rem;font-weight:700;display:flex}.my-email{font-size:.9rem;font-weight:500}.my-role{color:var(--color-text-muted);font-size:.75rem}.my-links{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);flex:1;padding:16px}.my-content-block{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:24px}.my-section-title{margin-bottom:16px;font-size:1.05rem;font-weight:600}.my-favorites-list{min-height:200px}
