*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5}:root{--bg:#f8f8f8;--surface:#fff;--text:#1a1a1a;--text-secondary:#666;--text-tertiary:#999;--accent:#0d7e8c;--accent-light:#0e9bab;--accent-hover:#0b6b77;--accent-glow:#0d7e8c26;--border:#e5e5e5;--border-hover:#ccc;--radius:8px;--radius-lg:12px;--shadow:0 1px 3px #0000000f, 0 1px 2px #0000000a;--shadow-lg:0 4px 12px #00000014;--transition:.15s ease;--font-mono:"SF Mono", "Cascadia Code", "Fira Code", "Consolas", monospace}body,#app{min-height:100vh}.loading-screen{min-height:100vh;transition:background var(--transition);justify-content:center;align-items:center;padding:24px;display:flex}.loading-screen.dragover{background:#0d7e8c08}.loading-content{text-align:center;max-width:520px}.loading-content .hero-logo{opacity:.7;filter:saturate(.4);width:auto;height:84px;margin-bottom:8px}.hero-tagline{color:var(--text);margin-bottom:8px;font-size:1.05rem}.hero-links{color:var(--text-secondary);margin-bottom:8px;font-size:.9rem}.hero-links a{color:var(--text-secondary);text-decoration:underline}.hero-demo-hint{color:var(--text-tertiary);margin-bottom:24px;font-size:.85rem}.loading-content .tagline{color:var(--text-secondary);margin-bottom:6px;font-size:.9rem}.browse-link{color:var(--text-secondary);text-underline-offset:2px;cursor:pointer;transition:color var(--transition);text-decoration:underline}.browse-link:hover{color:var(--text)}.supported-formats{color:var(--text-tertiary);font-size:.8rem}.loading-error{color:#b91c1c;margin-top:16px;font-size:.85rem}.diagnostic-report{text-align:left;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);max-width:640px;margin-top:20px;margin-left:auto;margin-right:auto;overflow:hidden}.diag-header{border-bottom:1px solid var(--border);background:#fef2f2;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}:is(.diag-valid+.diag-header,.diagnostic-report:has(.diag-valid) .diag-header){background:#f0fdf4}.diag-title{font-size:.9rem;font-weight:600}.diag-summary{white-space:nowrap;font-size:.8rem;font-weight:500}.diag-invalid{color:#b91c1c}.diag-valid{color:#15803d}.diag-issues{max-height:400px;padding:8px 0;overflow-y:auto}.diag-issue{border-bottom:1px solid var(--border);padding:6px 16px;font-size:.82rem;line-height:1.5}.diag-issue:last-child{border-bottom:none}.diag-issue code{font-family:var(--font-mono);background:#0000000d;border-radius:3px;margin-right:4px;padding:1px 5px;font-size:.78rem}.diag-error{color:#b91c1c}.diag-warning{color:#92400e}.diag-info{color:var(--text-secondary)}.diag-details{border-top:1px solid var(--border)}.diag-details summary{color:var(--text-secondary);cursor:pointer;padding:8px 16px;font-size:.82rem}.diag-details summary:hover{color:var(--text)}.loading-spinner{color:var(--text-secondary);justify-content:center;align-items:center;gap:8px;margin-top:16px;font-size:.85rem;display:flex}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:18px;height:18px;animation:.6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.beta-notice{color:#713f12;text-align:center;clip-path:polygon(0 0,calc(100% - 20px) 0,100% 20px,100% 100%,0 100%);background:#fef9c3;border:1px solid #d4a017;border-radius:0;max-width:520px;margin:24px auto;padding:18px 22px 18px 18px;font-size:.85rem;line-height:1.5;position:relative;transform:rotate(-1.5deg);box-shadow:2px 3px 8px #0000001f}.beta-notice:before{content:"";background:0 0;border-bottom:1px solid #d4a017;border-left:1px solid #d4a017;width:20px;height:20px;position:absolute;top:0;right:0}.beta-notice strong{font-weight:700}.app-loaded{flex-direction:column;min-height:100vh;animation:.3s fadeIn;display:flex}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.app-header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;padding:8px 24px 0;display:flex}.header-left{align-items:center;gap:12px;display:flex}.app-header .header-logo{opacity:.7;filter:saturate(.4);flex-shrink:0;width:auto;height:27px;position:relative;top:5px}.app-header .font-name{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;max-width:200px;font-size:.8rem;font-weight:500;overflow:hidden}.app-header .font-chooser{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;padding:3px 6px 3px 2px;font-size:.75rem;position:relative;top:1px}.l1-nav{flex:1;justify-content:center;gap:4px;display:flex}.l1-tab{color:var(--text-secondary);cursor:pointer;white-space:nowrap;transition:color var(--transition), border-color var(--transition);background:0 0;border:none;border-bottom:2px solid #0000;padding:14px 16px;font-size:.85rem;font-weight:500}.l1-tab:hover{color:var(--text)}.l1-tab.active{color:var(--accent-light);border-bottom-color:var(--accent-light)}.l1-tab.l1-tab-disabled,.l1-tab.l1-tab-disabled:hover{color:var(--text-secondary);opacity:.4;cursor:not-allowed}.l1-tab-badge{text-align:center;color:#fff;vertical-align:baseline;border-radius:999px;min-width:18px;margin-left:6px;padding:1px 6px;font-size:.7rem;font-weight:700;line-height:1.4;display:inline-block}.l1-tab-badge-error{background:#dc2626}.l1-tab-badge-warning{background:#d97706}.l1-tab-badge-neutral{background:#9ca3af}.app-content{flex-direction:column;flex:1;display:flex;overflow:hidden}.l1-panel{flex-direction:column;flex:1;min-height:0;display:flex}.l1-panel-padded{padding:24px;overflow-y:auto}.l1-panel-tables{overflow:hidden}.diagnose-page{flex-direction:column;gap:20px;width:min(760px,100%);margin:0 auto;display:flex}.dx-empty{color:var(--text-secondary);font-style:italic}.dx-parse-error{border-radius:var(--radius);background:#fef2f2;border:1px solid #fca5a5;border-left:4px solid #dc2626;flex-direction:column;gap:6px;padding:14px 16px;display:flex}.dx-parse-error-title{color:#b91c1c;font-weight:600}.dx-parse-error-msg code{font-family:var(--font-mono);color:#991b1b;word-break:break-word;background:#dc262614;border-radius:3px;padding:4px 8px;font-size:.85rem;display:inline-block}.dx-parse-error-hint{color:var(--text-secondary);font-size:.85rem}.dx-banner{border-radius:var(--radius-lg);border:1px solid var(--border);align-items:center;gap:12px;padding:16px 20px;display:flex}.dx-banner-ok{background:#f0fdf4;border-color:#bbf7d0}.dx-banner-bad{background:#fef2f2;border-color:#fecaca}.dx-banner-icon{flex-shrink:0;font-size:1.5rem}.dx-banner-text{flex-direction:column;flex:1;gap:2px;display:flex}.dx-banner-text strong{font-size:.95rem}.dx-banner-counts{color:var(--text-secondary);font-size:.82rem}.dx-fix-all-btn{color:#fff;background:var(--accent);border-radius:var(--radius);cursor:pointer;transition:background var(--transition);border:none;flex-shrink:0;padding:6px 16px;font-size:.82rem;font-weight:600}.dx-fix-all-btn:hover{background:var(--accent-hover)}.dx-section{flex-direction:column;gap:8px;display:flex}.dx-section-heading{margin:0;font-size:.9rem;font-weight:600}.dx-section-heading.dx-error{color:#b91c1c}.dx-section-heading.dx-warning{color:#92400e}.dx-section-heading.dx-info{color:var(--text-secondary)}.dx-info-summary{color:var(--text-secondary);cursor:pointer;padding:4px 0;font-size:.85rem}.dx-info-summary:hover{color:var(--text)}.dx-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);transition:border-color var(--transition);flex-direction:column;gap:8px;padding:12px 16px;display:flex}.dx-card.dx-error{border-left:3px solid #dc2626}.dx-card.dx-warning{border-left:3px solid #d97706}.dx-card.dx-info{border-left:3px solid #9ca3af}.dx-card-header{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.dx-card-icon{flex-shrink:0}.dx-card-code{font-family:var(--font-mono);background:#0000000d;border-radius:3px;flex-shrink:0;padding:1px 6px;font-size:.78rem}.dx-card-msg{color:var(--text);font-size:.85rem;line-height:1.4}.dx-card-rec{color:var(--text-secondary);padding-left:26px;font-size:.82rem;line-height:1.5}.dx-card-rec strong{color:var(--text)}.dx-card-fix{align-items:center;gap:10px;padding-left:26px;display:flex}.dx-fix-btn{color:#fff;background:var(--accent);border-radius:var(--radius);cursor:pointer;transition:background var(--transition);border:none;padding:4px 14px;font-size:.8rem;font-weight:600}.dx-fix-btn:hover{background:var(--accent-hover)}.dx-fix-btn:disabled{color:#166534;cursor:default;background:#86efac}.dx-fix-result{color:#15803d;font-size:.8rem}.info-page{flex-direction:column;gap:16px;max-width:600px;margin:0 auto;display:flex}.info-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:24px}.info-hero-card{text-align:center}.info-hero-card .info-logo{width:auto;height:36px;margin-bottom:12px}.info-hero-card .info-tagline{color:var(--text);margin-bottom:12px;font-size:1rem;font-weight:600}.info-hero-card .info-description{color:var(--text-secondary);margin-bottom:12px;font-size:.85rem;line-height:1.6}.info-hero-card .info-version{color:var(--text-tertiary);font-size:.8rem;font-family:var(--font-mono)}.info-links-row{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.info-link-card{text-align:center;transition:border-color var(--transition), box-shadow var(--transition);cursor:pointer;flex-direction:column;align-items:center;padding:20px 16px;text-decoration:none;display:flex}.info-link-card:hover{border-color:var(--accent);box-shadow:var(--shadow-lg)}.info-link-icon{width:28px;height:28px;color:var(--accent);flex-shrink:0;margin-bottom:10px}.info-link-title{color:var(--text);margin-bottom:6px;font-size:.9rem;font-weight:600}.info-link-desc{color:var(--text-secondary);font-size:.78rem;line-height:1.4}.info-family-card p{color:var(--text-secondary);font-size:.85rem;line-height:1.6}.info-family-card strong{color:var(--text)}.info-family-card a{color:var(--accent);text-decoration:underline}.info-family-card a:hover{color:var(--accent-hover)}@media (width<=520px){.info-links-row{grid-template-columns:1fr}}.tab-bar{background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:0;padding:4px 24px 0;display:flex}.tab-btn{color:var(--text-secondary);cursor:pointer;white-space:nowrap;transition:color var(--transition), border-color var(--transition);background:0 0;border:none;border-bottom:2px solid #0000;padding:8px 16px;font-size:.85rem;font-weight:500}.tab-btn-sm{font-size:.75rem;font-family:var(--font-mono);padding:5px 10px}.l1-panel-tables>.tab-bar{border:1px solid var(--border);border-radius:var(--radius);justify-content:center;align-self:center;gap:2px;width:fit-content;max-width:calc(100% - 48px);margin:16px 24px 0;padding:3px}.l1-panel-tables>.tab-bar .tab-btn{letter-spacing:0;transition:color var(--transition), background var(--transition);border:0;border-radius:4px}.l1-panel-tables>.tab-bar .tab-btn.active{background:var(--accent);color:#fff;box-shadow:0 1px 3px #0000001f}.tab-btn:hover{color:var(--text)}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-content{flex:1;padding:24px;overflow-y:auto}.overview{flex-direction:column;gap:24px;width:100%;max-width:1200px;margin:0 auto;display:flex}.overview-edit-hint{color:var(--text-tertiary);text-align:center;margin:-8px 0;font-size:.85rem}.overview-section{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);overflow:hidden}.overview-section h2{text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);padding:16px 20px 0;font-size:.75rem;font-weight:600}.meta-grid{background:var(--border);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1px;margin-top:12px;display:grid}.meta-item{background:var(--surface);padding:12px 20px}.meta-item-wide{grid-column:1/-1}.meta-item .label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);margin-bottom:2px;font-size:.7rem;font-weight:600}.meta-item .value{color:var(--text);word-break:break-word;font-size:.95rem}.meta-item .value.mono{font-family:var(--font-mono);font-size:.85rem}.meta-item .value.empty{color:var(--text-tertiary);font-style:italic}.stats-row{grid-template-columns:repeat(5,1fr);gap:16px;padding:16px 20px;display:grid}.stat-card{text-align:center;background:var(--bg);border-radius:var(--radius);padding:12px}.stat-card .stat-value{color:var(--text);letter-spacing:-.02em;font-size:1.5rem;font-weight:700}.stat-card .stat-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);margin-top:2px;font-size:.7rem;font-weight:600}.preview-subtabs{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:2px;margin-bottom:16px;padding:3px;display:inline-flex}.preview-subtab{min-width:104px;color:var(--text-secondary);font:inherit;letter-spacing:0;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:7px 14px;font-size:.8rem;font-weight:600}.preview-subtab:hover{color:var(--text)}.preview-subtab.active{background:var(--accent);color:#fff;box-shadow:0 1px 3px #0000001f}.preview-area{padding:20px}.preview-controls{align-items:center;gap:12px;margin-bottom:16px;display:flex}.preview-controls label{color:var(--text-secondary);white-space:nowrap;font-size:.8rem}.preview-controls input[type=range]{max-width:200px;accent-color:var(--accent);flex:1}.preview-controls .size-display{font-family:var(--font-mono);color:var(--text-tertiary);min-width:3.5em;font-size:.8rem}.preview-text{word-break:break-word;overflow-wrap:break-word;color:var(--text);border-top:1px solid var(--border);padding:16px 0;font-size:48px;line-height:1.3;overflow:hidden}.preview-text-input{border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);transition:border-color var(--transition);outline:none;padding:8px 12px;font-family:inherit;font-size:.85rem}.preview-text-input:focus{border-color:var(--accent)}.table-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;padding:12px 20px 20px;display:grid}.table-tag{background:var(--bg);border-radius:var(--radius);font-family:var(--font-mono);flex-direction:column;align-items:center;padding:10px 8px;display:flex}.table-tag .tag-name{color:var(--text);font-size:.85rem;font-weight:600}.table-tag .tag-size{color:var(--text-tertiary);margin-top:2px;font-size:.7rem}.table-tag-clickable{cursor:pointer;transition:border-color var(--transition), box-shadow var(--transition);border:1px solid #0000}.table-tag-clickable:hover{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}.table-detail{max-width:960px;margin:0 auto}.table-detail-header{margin-bottom:16px}.table-detail-header h2{font-size:1.1rem;font-weight:700;font-family:var(--font-mono)}.table-detail-desc{color:var(--text-secondary);margin-top:4px;font-size:.85rem;line-height:1.4}.data-tree{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:12px 16px;overflow-x:auto}.data-row{align-items:baseline;gap:8px;padding:3px 0;font-size:.85rem;line-height:1.4;display:flex}.data-row-toggle{cursor:pointer;border-radius:4px;margin:0 -4px;padding:3px 4px}.data-row-toggle:hover{background:var(--bg)}.data-arrow{color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex-shrink:0;width:12px;font-size:.65rem}.data-key{font-family:var(--font-mono);color:var(--accent);flex-shrink:0;font-size:.8rem}.data-key:after{content:":";color:var(--text-tertiary);margin-right:2px}.data-row-toggle .data-key:after{content:""}.data-value{word-break:break-word}.data-value.data-string{color:#16a34a}.data-value.data-number{color:#d97706;font-family:var(--font-mono);font-size:.8rem}.data-value.data-boolean{color:#9333ea;font-family:var(--font-mono);font-size:.8rem}.data-value.data-null,.data-value.data-empty{color:var(--text-tertiary);font-style:italic}.data-value.data-bytes,.data-value.data-array{font-family:var(--font-mono);color:var(--text-secondary);font-size:.8rem}.data-badge{color:var(--text-tertiary);background:var(--bg);border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:.7rem}.data-badge.data-badge-glyph{color:var(--accent,#3a78dc);background:color-mix(in srgb, var(--accent,#3a78dc) 12%, transparent);font-family:var(--font-mono)}.data-children{border-left:1px solid var(--border);margin-left:5px;padding-left:20px;display:none}.data-children.data-expanded{display:block}pre.data-bytes,pre.data-number-array,pre.data-string-long{font-family:var(--font-mono);color:var(--text-secondary);background:var(--bg);border-radius:var(--radius);max-height:300px;margin:4px 0 4px 20px;padding:8px 12px;font-size:.75rem;line-height:1.5;display:none;overflow:auto}pre.data-bytes.data-expanded,pre.data-number-array.data-expanded,pre.data-string-long.data-expanded{display:block}.glyph-grid{grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:4px;padding:12px 16px 16px;display:grid}.glyph-paging{justify-content:center;align-items:center;gap:12px;padding:8px 16px 12px;display:flex}.glyph-page-btn{border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:border-color var(--transition);background:0 0;padding:4px 12px;font-size:.8rem}.glyph-page-btn:hover:not(:disabled){border-color:var(--accent);color:var(--text)}.glyph-page-btn:disabled{opacity:.35;cursor:default}.glyph-page-info{color:var(--text-secondary);font-size:.8rem}.glyph-cell{border-radius:var(--radius);transition:background var(--transition);flex-direction:column;align-items:center;padding:4px;display:flex}.glyph-cell:hover{background:var(--bg)}.glyph-thumb{background:0 0;border-radius:4px;display:block}.glyph-label{color:var(--text-tertiary);text-align:center;text-overflow:ellipsis;white-space:nowrap;max-width:72px;margin-top:2px;font-size:.6rem;overflow:hidden}.glyph-cell{cursor:pointer}.preview-empty{color:var(--text-tertiary);padding:18px 20px;font-size:.85rem}.preview-rule-grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:6px}.preview-rule-cell{min-width:0;min-height:112px;font:inherit;color:inherit;letter-spacing:0;background:0 0;border:1px solid #0000;justify-content:center}.preview-rule-cell:hover,.preview-rule-cell:focus-visible{background:var(--bg);border-color:var(--border-hover);outline:none}.rule-specimen{letter-spacing:0;white-space:nowrap;justify-content:center;align-items:center;width:100%;height:64px;font-size:44px;line-height:1;display:flex;overflow:hidden}.rule-label{width:100%;max-width:124px;font-family:var(--font-mono);font-size:.65rem}.kerning-value{font-family:var(--font-mono);margin-top:4px;font-size:.68rem;font-weight:700}.kerning-value.negative{color:#c2413d}.kerning-value.positive{color:#18816b}.glyph-detail-panel{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);margin:0 16px 16px;padding:20px;position:relative}.glyph-detail-close{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:1.4rem;line-height:1;position:absolute;top:8px;right:12px}.glyph-detail-close:hover{color:var(--text)}.glyph-detail-layout{align-items:flex-start;gap:24px;display:flex}.glyph-detail-canvas-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:10px;padding:12px;display:flex}.glyph-detail-canvas-wrap canvas{display:block}.glyph-detail-bounds-toggle{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:.78rem;display:flex}.glyph-detail-bounds-toggle input{cursor:pointer}.rule-detail-preview,.kerning-detail-preview{width:min(280px,100%);min-height:248px}.rule-specimen-large{height:auto;min-height:100px;font-size:88px}.kerning-detail-preview{align-items:stretch;gap:20px}.kerning-detail-preview .rule-specimen-large{border-bottom:1px solid var(--border);min-height:92px;padding-top:18px;position:relative}.kerning-detail-preview .rule-specimen-large:last-child{border-bottom:0}.kerning-detail-preview .rule-specimen-large:before{content:attr(data-label);font-family:var(--font-sans);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em;font-size:.65rem;font-weight:600;line-height:1;position:absolute;top:0;left:0}.header-right{align-items:center;gap:8px;display:flex}.header-btn{border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:border-color var(--transition), color var(--transition), background var(--transition), box-shadow var(--transition);background:0 0;padding:5px 14px;font-size:.8rem;font-weight:500}.header-btn:hover{border-color:var(--border-hover);color:var(--text)}.header-btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.header-btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff;box-shadow:0 1px 4px #0d7e8c4d}.meta-item .value.editable{cursor:pointer;transition:background var(--transition), box-shadow var(--transition);border-radius:4px;margin:-2px -4px;padding:2px 4px}.meta-item .value.editable:hover{background:var(--bg)}.meta-item .value.modified{color:var(--accent)}.meta-item .value.editing{background:var(--bg);margin:0;padding:0}.edit-input,.edit-select{width:100%;font-size:inherit;color:var(--text);background:var(--surface);border:1px solid var(--accent);box-shadow:0 0 0 2px var(--accent-glow);border-radius:4px;outline:none;padding:3px 6px;font-family:inherit}.edit-input.mono{font-family:var(--font-mono)}.edit-input:focus,.edit-select:focus{border-color:var(--accent)}.edit-checkbox{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.subset-tab{flex-direction:column;gap:16px;display:flex}.subset-toolbar{align-items:center;gap:12px;display:flex}.subset-toolbar input[type=text]{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:25%;min-width:160px;max-width:300px;color:var(--text);outline:none;padding:6px 10px;font-size:.85rem}.subset-toolbar input[type=text]:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}.subset-toggle-btn{color:var(--text-tertiary);cursor:pointer;transition:color var(--transition);background:0 0;border:none;align-items:center;gap:5px;padding:4px 0;font-size:.8rem;display:inline-flex}.subset-toggle-btn:hover{color:var(--text-secondary)}.subset-toggle-btn svg{flex-shrink:0}.subset-block-list{background:var(--border);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1px;display:grid}.subset-block{background:var(--surface);cursor:pointer;transition:background var(--transition);align-items:center;gap:10px;padding:8px 14px;display:flex}.subset-block:hover{background:var(--bg)}.subset-block.checked{background:#dc26260d}.subset-block input[type=checkbox]{accent-color:var(--accent);flex-shrink:0}.subset-block-name{color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.85rem;font-weight:500;overflow:hidden}.subset-block.checked .subset-block-name{color:var(--text-secondary)}.subset-block-range{font-size:.75rem;font-family:var(--font-mono);color:var(--text-tertiary);white-space:nowrap}.subset-block-count{color:var(--accent);white-space:nowrap;text-align:right;cursor:pointer;border-radius:var(--radius);min-width:40px;transition:background var(--transition), color var(--transition), border-color var(--transition);background:0 0;border:1px solid #0000;padding:2px 8px;font-size:.75rem}.subset-block-count:hover{background:var(--bg);border-color:var(--accent);color:var(--accent-hover,var(--accent))}.subset-apply-bar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:12px;padding:12px 16px;display:flex}.subset-apply-bar .subset-summary{color:var(--text-secondary);flex:1;font-size:.85rem}.subset-apply-btn{border-radius:var(--radius);color:#fff;cursor:pointer;transition:background var(--transition);white-space:nowrap;background:#dc2626;border:none;padding:6px 16px;font-size:.8rem;font-weight:600}.subset-apply-btn:hover{background:#b91c1c}.subset-apply-btn:disabled{opacity:.4;pointer-events:none}.subset-preview{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.subset-preview-header{align-items:center;gap:12px;padding:12px 16px;display:flex}.subset-preview-label{color:var(--text);font-size:.85rem;font-weight:600}.subset-preview-select{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);color:var(--text);padding:4px 8px;font-size:.8rem}.subset-preview-body.has-content{border-top:1px solid var(--border)}.subset-preview-grid{background:var(--border);grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:1px;display:grid}.subset-preview-cell{background:var(--surface);flex-direction:column;justify-content:center;align-items:center;padding:8px 4px;display:flex}.subset-preview-char{color:var(--text);font-size:1.2rem;line-height:1.4}.subset-preview-code{font-size:.6rem;font-family:var(--font-mono);color:var(--text-tertiary)}.subset-preview-paging{background:var(--surface);border-top:1px solid var(--border);justify-content:center;align-items:center;gap:12px;padding:8px 16px;display:flex}.subset-preview-page-btn{border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:border-color var(--transition);background:0 0;padding:4px 12px;font-size:.8rem}.subset-preview-page-btn:hover:not(:disabled){border-color:var(--accent);color:var(--text)}.subset-preview-page-btn:disabled{opacity:.35;cursor:default}.subset-preview-page-info{color:var(--text-secondary);font-size:.8rem}.modal-overlay{z-index:1000;background:#00000073;justify-content:center;align-items:center;animation:.15s fadeIn;display:flex;position:fixed;inset:0}.save-dialog{background:var(--surface);border-radius:12px;flex-direction:column;gap:16px;width:420px;max-width:90vw;max-height:80vh;padding:24px;display:flex;overflow-y:auto;box-shadow:0 8px 32px #0003}.save-dialog h2{color:var(--text);margin:0;font-size:1.1rem;font-weight:600}.save-dialog .field-group{flex-direction:column;gap:6px;display:flex}.save-dialog .field-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);font-size:.75rem;font-weight:600}.save-dialog .field-input{border:1px solid var(--border);border-radius:var(--radius);color:var(--text);background:var(--bg);outline:none;padding:8px 10px;font-size:.9rem}.save-dialog .field-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}.format-options{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.format-option{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;transition:border-color var(--transition), background var(--transition);align-items:center;gap:8px;padding:10px 12px;display:flex}.format-option:hover{border-color:var(--border-hover)}.format-option.selected{border-color:var(--accent);background:#0d7e8c0f}.format-option input[type=radio]{accent-color:var(--accent)}.format-option-label{color:var(--text);font-size:.85rem;font-weight:500}.format-option-ext{font-size:.75rem;font-family:var(--font-mono);color:var(--text-tertiary)}.save-dialog-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.save-dialog-actions button{border-radius:var(--radius);cursor:pointer;transition:background var(--transition), border-color var(--transition);padding:8px 16px;font-size:.85rem;font-weight:500}.btn-cancel{border:1px solid var(--border);color:var(--text-secondary);background:0 0}.btn-cancel:hover{border-color:var(--border-hover);color:var(--text)}.btn-validate{border:1px solid var(--border);color:var(--text-secondary);background:0 0}.btn-validate:hover{border-color:var(--accent);color:var(--accent)}.btn-download{background:var(--accent);border:1px solid var(--accent);color:#fff;font-weight:600}.btn-download:hover{background:var(--accent-hover)}.validation-results{border-radius:var(--radius);background:var(--bg);max-height:200px;padding:10px 12px;font-size:.8rem;overflow-y:auto}.validation-results.valid{border-left:3px solid #16a34a}.validation-results.invalid{border-left:3px solid #dc2626}.validation-results ul{margin:4px 0 0;padding-left:16px}.validation-results li{margin:2px 0}.validation-results .val-error{color:#dc2626}.validation-results .val-warning{color:#d97706}.glyph-detail-data{flex:1;min-width:0;overflow:hidden}.glyph-detail-title{color:var(--text);margin:0 0 12px;font-size:1.1rem;font-weight:600}.glyph-detail-unicode{color:var(--text-secondary);font-size:.9rem;font-weight:400}.glyph-detail-metrics{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:4px 16px;margin-bottom:16px;display:grid}.glyph-detail-metric{border-bottom:1px solid var(--border);justify-content:space-between;gap:8px;padding:3px 0;font-size:.8rem;display:flex}.gdm-label{color:var(--text-secondary)}.gdm-value{color:var(--text);font-family:var(--font-mono);font-weight:500}.glyph-detail-section{margin-top:12px}.glyph-detail-section h4{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin:0 0 6px;font-size:.8rem;font-weight:600}.glyph-detail-toggle{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;cursor:pointer;-webkit-user-select:none;user-select:none;margin:0 0 6px;font-size:.8rem;font-weight:600}.glyph-detail-toggle:hover{color:var(--text)}.glyph-detail-code{font-family:var(--font-mono);color:var(--text-secondary);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);white-space:pre;tab-size:2;max-height:240px;margin:0;padding:10px 12px;font-size:.72rem;line-height:1.5;overflow:auto}.glyph-detail-collapsed{display:none}@media (width<=640px){.glyph-detail-layout{flex-direction:column}.preview-subtabs{width:100%;display:flex}.preview-subtab{flex:1;min-width:0;padding-inline:8px}.preview-rule-grid{grid-template-columns:repeat(auto-fill,minmax(112px,1fr))}.rule-detail-preview,.kerning-detail-preview{width:100%}}@media (width<=1100px){.app-header{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;display:grid}.header-left{flex-wrap:wrap;min-width:0}.app-header .font-name,.app-header .font-chooser{max-width:100%}.l1-nav{grid-area:2/1/auto/-1;justify-content:flex-start;min-width:0;overflow-x:auto}}@media (width<=640px){.loading-card{padding:32px 20px}.drop-zone{padding:32px 16px}.app-header{grid-template-columns:minmax(0,1fr);padding:10px 16px}.header-right{grid-row:2;justify-content:flex-end}.l1-nav{grid-row:3}.tab-bar{padding:0 16px}.tab-content{padding:16px}.meta-grid{grid-template-columns:1fr}.stats-row{grid-template-columns:repeat(3,1fr)}}
