:root{--z-qr-surface:white;--z-shadow:0 18px 48px rgba(0, 0, 0, 0.16)}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.z-plugin-heading{display:flex;align-items:center;gap:9px;min-width:0}.z-plugin-heading>.name{min-width:0;overflow:hidden;text-overflow:ellipsis}.platform-logos{display:inline-flex;align-items:center;gap:5px;flex-shrink:0;color:var(--z-muted);line-height:1}.platform-logo{width:14px;height:14px}.z-tile svg{stroke-width:1.75}.z-tile-image{position:relative;overflow:hidden}.z-tile-image img{position:absolute;inset:18%;width:64%;height:64%;opacity:0}.z-tile-image.image-loaded img{opacity:1}.z-tile-image.image-loaded svg{visibility:hidden}.z-select-field{display:inline-flex;align-items:center;flex-shrink:0}.z-select[hidden]{display:none}.z-select-control{position:relative;display:inline-flex;font-size:13px;font-weight:400}.z-select,.z-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:20px;min-width:116px;height:36px;padding:0 12px;border:1px solid var(--z-line2);border-radius:8px;background:var(--z-surface);color:var(--z-text);font:inherit;font-size:13px;cursor:pointer}.z-select-trigger::after{content:'';flex-shrink:0;width:6px;height:6px;border-right:1.5px solid var(--z-muted);border-bottom:1.5px solid var(--z-muted);transform:translateY(-2px) rotate(45deg);transition:transform 160ms ease}.z-select-trigger:hover{background:var(--z-surface2)}.z-select-trigger[aria-expanded=true]{border-color:var(--z-accent)}.z-select-trigger[aria-expanded=true]::after{transform:translateY(2px) rotate(225deg)}.z-select-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:60;min-width:100%;width:max-content;max-height:260px;overflow-y:auto;padding:5px;border:1px solid var(--z-line2);border-radius:10px;background:var(--z-surface);box-shadow:var(--z-shadow)}.z-select-menu[hidden]{display:none}.z-select-option{display:flex;align-items:center;justify-content:space-between;gap:24px;width:100%;min-height:34px;padding:6px 9px;border:0;border-radius:6px;background:0 0;color:var(--z-text);font:inherit;text-align:left;white-space:nowrap;cursor:pointer}.z-select-option::after{content:'';width:13px}.z-select-option[aria-selected=true]{color:var(--z-strong);background:var(--z-sel);font-weight:500}.z-select-option[aria-selected=true]::after{content:'✓'}.z-select-option:focus,.z-select-option:hover{background:var(--z-surface2);outline:0}.login-modal button:focus-visible,.z-select-trigger:focus-visible,.z-wishes a:focus-visible,.z-wishes button:focus-visible{outline:2px solid var(--z-accent);outline-offset:3px}.z-plugin-filters{display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}.login-modal{display:none;position:fixed;inset:0;z-index:10010;padding:20px;align-items:center;justify-content:center;background:rgba(0,0,0,.46);backdrop-filter:blur(5px)}.login-modal.show{display:flex}.login-modal-content{box-sizing:border-box;position:relative;width:380px;max-width:100%;max-height:calc(100dvh - 40px);overflow:auto;padding:32px 28px 24px;border:1px solid var(--z-line2);border-radius:18px;background:var(--z-surface);color:var(--z-text);box-shadow:var(--z-shadow)}.login-modal-close{position:absolute;top:12px;right:12px;display:grid;place-items:center;width:30px;height:30px;padding:6px;border:0;border-radius:7px;background:0 0;color:var(--z-muted);cursor:pointer}.login-modal-close svg{width:18px;height:18px}.login-modal-close:hover{background:var(--z-surface2);color:var(--z-strong)}.login-modal-header{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:26px;text-align:center}.login-brand{display:grid;place-items:center;width:52px;height:52px;margin-bottom:4px;border:1px solid var(--z-line);border-radius:15px;background:var(--z-surface2)}.login-modal-header h2{margin:0;color:var(--z-strong);font-size:22px;line-height:1.4;font-weight:600;letter-spacing:-.4px}.login-modal-header p{margin:0;font-size:13px;line-height:1.6;color:var(--z-muted)}.login-modal-body{display:flex;flex-direction:column;align-items:center}#wechatQrcodeContainer{width:100%;min-height:268px;display:flex;flex-direction:column;align-items:center;gap:12px}.qr-frame{box-sizing:border-box;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:216px;height:216px;padding:10px;border:2px solid var(--z-accent);border-radius:14px;background:var(--z-qr-surface)}.qrcode-img{display:block;width:100%;height:100%;object-fit:contain}.qr-state{flex-direction:column;gap:10px;padding:18px;border-color:var(--z-line2);background:var(--z-bg);text-align:center}.qr-state-icon{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--z-surface2);color:var(--z-muted)}.qr-state-icon svg{width:21px;height:21px}.qr-state-title{margin:0;color:var(--z-text);font-size:13px;line-height:1.6;font-weight:500}.qr-state-description{margin:0;font-size:12px;line-height:1.6;color:var(--z-muted)}.is-loading .qr-state-icon{background:0 0}.is-loading .qr-state-icon svg{animation:spin 1s linear infinite}.qr-refresh-btn{min-height:30px;padding:4px 10px;border:1px solid var(--z-line2);border-radius:7px;background:var(--z-surface);color:var(--z-text);font:inherit;font-size:12px;cursor:pointer}.qr-refresh-btn:hover{background:var(--z-surface2)}.login-steps{display:flex;align-items:center;justify-content:center;gap:15px;margin:0;padding:0;list-style:none;font-size:12px;color:var(--z-muted)}.login-steps li{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.login-steps li span{display:grid;place-items:center;width:18px;height:18px;border:1px solid var(--z-line2);border-radius:50%;font-size:10px}.login-footer-note{margin:24px 0 0;padding-top:18px;border-top:1px solid var(--z-line);color:var(--z-faint);font-size:11px;line-height:1.6;text-align:center}.z-status{padding:0;height:auto;background:0 0;font-size:12px;color:var(--z-muted)}.z-status .dot{width:5px;height:5px;border-radius:50%}.z-wishes .z-container{max-width:880px}.z-wishes .z-page-head{padding-top:52px}.z-wishes .z-wishes-heading{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:28px;text-align:left}.z-wishes-heading .z-page-title{margin:0 0 8px;font-size:30px;letter-spacing:-.6px}.z-wishes-heading .z-lead{max-width:540px;margin:0;font-size:14px;line-height:1.8}.z-wishes-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.z-wishes-body{display:block;margin-top:24px}.z-wishes-bar{align-items:center;flex-wrap:wrap;margin:28px 0 8px;padding-bottom:0;border-bottom:0}.fr-bar-tools{display:flex;align-items:center;gap:8px;margin-left:auto}.z-search.fr-search{width:200px;height:34px;padding:0 10px;gap:8px;border-radius:8px;background:var(--z-surface)}.fr-search svg{flex-shrink:0;color:var(--z-faint)}.fr-search input{font-size:13px}.fr-composer{border:1px solid var(--z-line2);border-radius:12px;background:var(--z-surface);transition:border-color .15s ease,box-shadow .15s ease}.fr-composer:focus-within{border-color:var(--z-accent);box-shadow:0 0 0 3px rgba(255,107,61,.15)}.fr-composer textarea{display:block;box-sizing:border-box;width:100%;min-height:64px;padding:14px 14px 4px;border:0;background:0 0;color:var(--z-strong);font:inherit;font-size:14px;line-height:1.6;resize:vertical;outline:0}.fr-composer textarea::placeholder,.fr-contact::placeholder{color:var(--z-faint)}.fr-composer-foot{display:flex;align-items:center;gap:8px;padding:6px 10px 10px 14px}.fr-contact{flex:1;min-width:0;max-width:280px;height:28px;padding:0;border:0;background:0 0;color:var(--z-text);font:inherit;font-size:12px;outline:0}.fr-composer-foot .z-btn{margin-left:auto}.fr-composer .z-btn:disabled,.fr-editor .z-btn:disabled{opacity:.5;cursor:default}.fr-list{display:flex;flex-direction:column;gap:2px;min-height:240px}.fr-item{display:flex;align-items:flex-start;gap:14px;margin:0 -12px;padding:12px;border-radius:12px;transition:background-color .15s ease,box-shadow .15s ease}.fr-item:hover{background:var(--z-surface2)}.fr-item.expanded{background:var(--z-surface);box-shadow:inset 0 0 0 1px var(--z-line2)}.fr-vote{display:inline-flex;flex:0 0 44px;flex-direction:column;align-items:center;justify-content:center;gap:3px;height:50px;padding:0;border:1px solid var(--z-line2);border-radius:10px;background:var(--z-surface);color:var(--z-text);font:inherit;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1;cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}.fr-vote svg{width:15px;height:15px}.fr-vote:hover{border-color:var(--z-muted);color:var(--z-strong)}.fr-vote.voted{border-color:transparent;background:rgba(255,107,61,.14);color:var(--z-accent-text)}.fr-vote.voted svg{fill:currentColor}.fr-body{flex:1;min-width:0}.fr-summary{position:relative;padding-right:28px;border-radius:6px;cursor:pointer;outline:0}.fr-excerpt,.fr-heading{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow-wrap:anywhere}.fr-heading{margin:0;color:var(--z-strong);font-size:15px;font-weight:500;line-height:1.5}.fr-excerpt{margin:2px 0 0;color:var(--z-text);font-size:14px;line-height:1.65}.fr-item.expanded .fr-excerpt,.fr-item.expanded .fr-heading{display:block;-webkit-line-clamp:unset;white-space:pre-wrap}.fr-meta{display:flex;align-items:center;gap:12px;min-width:0;margin-top:8px;color:var(--z-muted);font-size:12px}.fr-meta .z-status{flex-shrink:0;height:auto;padding:0;gap:6px;background:0 0;color:var(--z-text);font-weight:500}.fr-meta .z-status .dot{width:6px;height:6px;border-radius:50%;background:var(--z-faint)}.fr-meta .status-approved .dot{background:var(--h-slate-fg)}.fr-meta .status-developing .dot{background:var(--h-amber-fg)}.fr-meta .status-completed .dot{background:var(--h-olive-fg)}.fr-meta .status-rejected .dot{background:var(--h-clay-fg)}.fr-user{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fr-meta time{flex-shrink:0;font-variant-numeric:tabular-nums}.fr-reply-count{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;font-variant-numeric:tabular-nums}.fr-reply-count svg{width:13px;height:13px}.fr-chevron{position:absolute;top:3px;right:2px;width:16px;height:16px;color:var(--z-faint);transition:transform .2s ease,color .15s ease}.fr-item:hover .fr-chevron{color:var(--z-muted)}.fr-item.expanded .fr-chevron{transform:rotate(180deg)}.fr-thread{margin-top:6px}.fr-reply-actions,.fr-thread-actions{display:flex;align-items:center;gap:2px;margin-left:-8px}.fr-thread-actions{margin-top:6px}.fr-reply-actions{margin-top:2px}.fr-text-action{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 8px;border:0;border-radius:6px;background:0 0;color:var(--z-muted);font:inherit;font-size:12px;text-decoration:none;cursor:pointer;transition:background-color .15s ease,color .15s ease}.fr-text-action svg{width:13px;height:13px}.fr-text-action:hover{background:var(--z-surface2);color:var(--z-strong)}.fr-text-action.active{background:var(--z-sel);color:var(--z-strong)}.fr-replies-state{display:flex;align-items:center;gap:8px;margin:10px 0 0;padding-top:12px;border-top:1px solid var(--z-line);color:var(--z-muted);font-size:12px}.fr-replies-state.is-error{color:var(--z-accent-text)}.fr-reply-list{display:flex;flex-direction:column;gap:14px;margin:10px 0 0;padding:14px 0 0;border-top:1px solid var(--z-line);list-style:none}.fr-reply{display:flex;gap:10px;min-width:0}.fr-avatar{position:relative;display:grid;place-items:center;flex:0 0 26px;width:26px;height:26px;overflow:hidden;border-radius:50%;background:var(--z-surface2);color:var(--z-muted)}.fr-avatar>svg{width:14px;height:14px}.fr-avatar>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.fr-avatar.is-official{background:var(--z-bg);box-shadow:inset 0 0 0 1px var(--z-line2)}.fr-reply-body{flex:1;min-width:0}.fr-reply-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px;line-height:20px;color:var(--z-muted);font-size:12px}.fr-reply-user{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--z-strong);font-weight:500}.fr-official{padding:0 5px;border-radius:4px;background:var(--z-kbd);color:var(--z-muted);font-size:10.5px;font-weight:500;line-height:16px}.fr-reply-head time{font-variant-numeric:tabular-nums}.fr-reply-content{margin:2px 0 0;color:var(--z-strong);font-size:14px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}.fr-editor{margin-top:10px;border:1px solid var(--z-line2);border-radius:10px;background:var(--z-bg);transition:border-color .15s ease,box-shadow .15s ease}.fr-editor:focus-within{border-color:var(--z-accent);box-shadow:0 0 0 3px rgba(255,107,61,.15)}.fr-editor textarea{display:block;box-sizing:border-box;width:100%;min-height:56px;padding:10px 12px 4px;border:0;background:0 0;color:var(--z-strong);font:inherit;font-size:13px;line-height:1.6;resize:vertical;outline:0}.fr-editor textarea::placeholder{color:var(--z-faint)}.fr-editor-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;padding:0 8px 8px}.fr-editor-error{margin-right:auto;color:var(--z-accent-text);font-size:12px}.fr-editor-error[hidden]{display:none}.fr-summary:focus-visible,.fr-text-action:focus-visible,.fr-vote:focus-visible{outline:2px solid var(--z-accent);outline-offset:2px}.z-wishes-note{margin:0;color:var(--z-faint);font-size:12px;line-height:1.7}.z-form-intro{margin:0 0 20px;color:var(--z-muted);font-size:13px;line-height:1.7}.z-modal input,.z-modal textarea{background:var(--z-bg)}@media (max-width:768px){.z-wishes .z-page-head{padding-top:30px}.z-wishes .z-wishes-heading{flex-direction:column;align-items:flex-start;gap:18px}.z-wishes-heading .z-page-title{font-size:26px}.z-wishes-actions{width:100%}.z-wishes-actions .z-btn{flex:1}.z-wishes-bar{flex-direction:row;align-items:center;flex-wrap:wrap;gap:10px}.fr-bar-tools{width:100%;margin-left:0}.z-search.fr-search{flex:1 1 0;min-width:0;width:auto}.fr-bar-tools .z-select-field{flex:0 0 auto}.fr-contact{max-width:none}.z-wishes .filter-options{max-width:100%}.z-wishes .filter-btn{height:32px;padding:0 10px;border:0}.fr-item{gap:10px}.fr-heading{font-size:14px}.fr-meta{gap:10px;flex-wrap:wrap}.login-modal-content{padding:28px 20px 22px}.login-steps{gap:10px}}@media (prefers-reduced-motion:reduce){.is-loading .qr-state-icon svg{animation:none}.z-select-trigger::after{transition:none}}