:root{--c-sage:#9a6b3f;--c-sage-light:#c4a484;--c-mint-cream:#f2ede6;--c-forest:#5c2a36;--c-fern:#7a4e2d;--c-charcoal:#1e2a3a;--c-lime-soft:#d4b896;--c-brass:#b8954a;--c-bg:#f2ede6;--c-surface:#fffbf7;--c-surface-alt:#f7f2eb;--c-border:#e0d5c8;--c-border-light:#ebe3d8;--c-text:#2a241c;--c-text-secondary:#6b5e52;--c-text-muted:#9a8b7a;--c-danger:#a33b2b;--sp-xs:4px;--sp-sm:8px;--sp-md:16px;--sp-lg:24px;--sp-xl:32px;--sp-2xl:48px;--sp-3xl:64px;--r-sm:12px;--r-md:20px;--r-lg:28px;--r-full:9999px;--shadow-sm:0 2px 8px #5c2a360f;--shadow-md:0 4px 16px #5c2a3614;--shadow-lg:0 8px 32px #1e2a3a1f;--ease-out:cubic-bezier(.16, 1, .3, 1);--dur-fast:.15s;--dur-normal:.3s;--dur-slow:.5s;--font-display:"Trebuchet MS", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--font-body:"PingFang SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;font-size:16px}html,body,#root{min-height:100%;margin:0}body{font-family:var(--font-body);background:var(--c-bg);color:var(--c-text);line-height:1.6;overflow-x:hidden}body:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(600px 400px at 10% 20%,#9a6b3f1f,#0000),radial-gradient(500px 500px at 90% 80%,#5c2a3614,#0000);position:fixed;inset:0}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}button{font-family:inherit}.screen{max-width:720px;padding:var(--sp-xl) var(--sp-lg) var(--sp-3xl);min-height:100dvh;animation:screenIn var(--dur-slow) var(--ease-out);margin:0 auto}@keyframes screenIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.btn{justify-content:center;align-items:center;gap:var(--sp-sm);padding:var(--sp-md) var(--sp-xl);border-radius:var(--r-full);font-weight:700;font-family:var(--font-display);cursor:pointer;transition:all var(--dur-normal) var(--ease-out);white-space:nowrap;border:none;font-size:1rem;display:inline-flex}.btn--primary{background:linear-gradient(135deg, var(--c-sage) 0%, var(--c-forest) 100%);color:#fff;box-shadow:var(--shadow-md)}.btn--primary:hover:not(:disabled){box-shadow:var(--shadow-lg), 0 0 0 4px #9a6b3f33;transform:translateY(-2px)}.btn--primary:disabled{opacity:.5;cursor:not-allowed}.btn--outline{border:2px solid var(--c-sage);color:var(--c-fern);background:0 0}.btn--outline:hover{background:#9a6b3f1a}.btn--ghost{color:var(--c-fern);padding:var(--sp-sm) var(--sp-md);background:0 0}.btn--ghost:hover:not(:disabled){background:#9a6b3f1a}.btn--ghost:disabled{opacity:.4}.btn--pulse{animation:2.5s ease-in-out infinite pulse}.btn--pulse:hover{animation:none}.btn__icon{transition:transform var(--dur-normal) var(--ease-out)}.btn:hover .btn__icon{transform:translate(4px)}@keyframes pulse{0%,to{box-shadow:var(--shadow-md), 0 0 0 0 #9a6b3f59}50%{box-shadow:var(--shadow-md), 0 0 0 10px #9a6b3f00}}.intro__decor{pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.leaf{opacity:.22;font-size:1.5rem;animation:18s ease-in-out infinite floatLeaf;position:absolute}.leaf--1{top:10%;left:5%}.leaf--2{font-size:1.8rem;animation-delay:-5s;top:28%;right:6%}.leaf--3{animation-delay:-10s;bottom:22%;left:8%}.leaf--4{font-size:1.2rem;animation-delay:-14s;top:62%;right:8%}@keyframes floatLeaf{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-18px)rotate(8deg)}}.intro{align-items:center;gap:var(--sp-xl);text-align:center;z-index:1;flex-direction:column;display:flex;position:relative}.intro__hero{align-items:center;gap:var(--sp-md);padding-top:var(--sp-lg);flex-direction:column;display:flex}.intro__sprout{font-size:3.6rem;line-height:1;animation:3s ease-in-out infinite sproutBounce}@keyframes sproutBounce{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.intro__title{font-family:var(--font-display);color:var(--c-forest);letter-spacing:-.02em;max-width:16em;margin:0;font-size:clamp(1.55rem,5.5vw,2.35rem);font-weight:700;line-height:1.35;position:relative}.intro__title:after{content:"";background:var(--c-sage-light);border-radius:2px;height:4px;position:absolute;bottom:-6px;left:12%;right:12%}.intro__subtitle{color:var(--c-fern);margin-top:var(--sp-sm);letter-spacing:.04em;font-size:clamp(.95rem,3vw,1.2rem);font-weight:600;display:block}.intro__tagline{font-family:var(--font-display);color:var(--c-charcoal);margin:var(--sp-md) 0 0;font-size:clamp(1.15rem,4vw,1.45rem);font-weight:700}.intro__desc{color:var(--c-text-secondary);max-width:380px;margin:0;font-size:.95rem}.intro__consent{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md);width:100%;padding:var(--sp-lg);text-align:left;box-shadow:var(--shadow-sm)}.intro__consent h2{margin:0 0 var(--sp-sm);color:var(--c-forest);font-size:1rem}.intro__consent p{color:var(--c-text-secondary);margin:0;font-size:.9rem}.intro__types{width:100%;padding-top:var(--sp-xl);border-top:1px solid var(--c-border-light)}.intro__types-title{font-family:var(--font-display);color:var(--c-forest);margin:0 0 var(--sp-xs);font-size:1.35rem;font-weight:700}.intro__types-sub{color:var(--c-text-muted);margin:0 0 var(--sp-lg);font-size:.85rem}.intro__grid{gap:var(--sp-md);grid-template-columns:repeat(auto-fill,minmax(104px,1fr));display:grid}.type-card{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md);padding:var(--sp-md) var(--sp-sm);text-align:center;transition:all var(--dur-normal) var(--ease-out)}.type-card:hover{box-shadow:var(--shadow-md);border-color:var(--c-sage-light);transform:translateY(-3px)}.type-card__code{font-family:var(--font-display);color:var(--c-forest);margin:var(--sp-sm) 0 2px;font-size:.82rem;font-weight:700}.type-card__name{color:var(--c-text-secondary);margin:0;font-size:.72rem;line-height:1.35}.persona-img{background:var(--c-surface-alt);border:2px solid var(--c-border);border-radius:22%;margin:0 auto;overflow:hidden}.persona-img img{object-fit:cover;width:100%;height:100%;display:block}.persona-img--sm{width:56px;height:56px}.persona-img--md{width:96px;height:96px}.persona-img--lg{width:140px;height:140px}.persona-img--xl{aspect-ratio:1;border:1px solid var(--c-border);width:min(280px,78vw);height:auto;box-shadow:none;background:0 0;border-radius:0;overflow:hidden}.persona-img--xl img{object-fit:contain}.persona-img__ph{background:linear-gradient(145deg, var(--c-sage-light), var(--c-fern));color:#fff;flex-direction:column;justify-content:center;align-items:center;gap:2px;width:100%;height:100%;display:flex}.persona-img__emoji{font-size:1.1em;line-height:1}.persona-img--sm .persona-img__emoji{font-size:1rem}.persona-img--xl .persona-img__emoji{font-size:2rem}.persona-img__code{font-family:var(--font-display);letter-spacing:.04em;font-size:.7em;font-weight:700}.persona-img--xl .persona-img__code{font-size:1.1rem}.persona-img__hint{opacity:.85;font-size:.55em}.persona-img--sm .persona-img__hint{display:none}.test{z-index:1;position:relative}.test__top{margin-bottom:var(--sp-lg)}.test__back{color:var(--c-fern);margin-bottom:var(--sp-md);font-size:.9rem;font-weight:600;display:inline-block}.vine__track{background:var(--c-border-light);border-radius:var(--r-full);height:10px;position:relative;overflow:visible}.vine__fill{background:linear-gradient(90deg, var(--c-sage-light), var(--c-sage), var(--c-fern));border-radius:var(--r-full);height:100%;transition:width var(--dur-normal) var(--ease-out)}.vine__bud{transition:left var(--dur-normal) var(--ease-out);filter:drop-shadow(0 2px 4px #5c2a3633);font-size:1.1rem;position:absolute;top:-10px}.vine__label{align-items:center;gap:var(--sp-sm);margin:var(--sp-sm) 0 0;color:var(--c-text-muted);font-size:.88rem;display:flex}.badge{color:var(--c-forest);border-radius:var(--r-full);background:#9a6b3f2e;padding:2px 10px;font-size:.75rem;font-weight:600}.q-card{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-lg);padding:var(--sp-xl) var(--sp-lg);box-shadow:var(--shadow-md);animation:screenIn var(--dur-normal) var(--ease-out)}.q-card__section{margin:0 0 var(--sp-sm);color:var(--c-sage);font-size:.85rem;font-weight:700}.q-card__title{margin:0 0 var(--sp-sm);color:var(--c-charcoal);font-size:1.2rem;line-height:1.45;font-family:var(--font-display)}.q-card__hint{margin:0 0 var(--sp-md);color:var(--c-text-muted);font-size:.9rem}.q-card__count{margin:-8px 0 var(--sp-md);color:var(--c-forest);font-size:.9rem;font-weight:700}.q-card__options{gap:var(--sp-sm);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.opt{gap:var(--sp-md);text-align:left;border-radius:var(--r-sm);border:2px solid var(--c-border-light);background:var(--c-surface-alt);cursor:pointer;width:100%;transition:all var(--dur-fast) var(--ease-out);font:inherit;color:inherit;align-items:flex-start;padding:14px 16px;display:flex}.opt:hover:not(:disabled){border-color:var(--c-sage-light);background:#fff}.opt--on{border-color:var(--c-sage);background:#9a6b3f1f;box-shadow:inset 0 0 0 1px #9a6b3f40}.opt--disabled{opacity:.4;cursor:not-allowed}.opt__key{background:var(--c-sage);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:.85rem;font-weight:700;display:inline-flex}.opt--on .opt__key{background:var(--c-forest)}.opt__label{padding-top:3px;line-height:1.45}.q-card__textarea,.q-card__other,.admin-login input{width:100%;margin-top:var(--sp-md);border-radius:var(--r-sm);border:2px solid var(--c-border);font:inherit;background:var(--c-surface-alt);color:var(--c-text);padding:12px 14px}.q-card__textarea:focus,.q-card__other:focus,.admin-login input:focus{border-color:var(--c-sage);outline:none}.q-card__error{color:var(--c-danger);margin:var(--sp-md) 0 0;font-size:.9rem}.test__nav{gap:var(--sp-md);margin-top:var(--sp-lg);flex-wrap:wrap;justify-content:space-between;display:flex}.result{align-items:center;gap:var(--sp-xl);text-align:center;z-index:1;flex-direction:column;display:flex;position:relative}.result--empty{justify-content:center;gap:var(--sp-md)}.result__hero{align-items:center;gap:var(--sp-sm);flex-direction:column;display:flex}.result__eyebrow{color:var(--c-fern);margin:0;font-size:.95rem;font-weight:600}.result__avatar{margin:var(--sp-md) 0;animation:none}.result__code{font-family:var(--font-display);color:var(--c-sage);letter-spacing:.14em;margin:0;font-size:1.6rem;font-weight:700}.result__name{font-family:var(--font-display);color:var(--c-forest);margin:0;font-size:clamp(1.6rem,5vw,2.2rem)}.result__tag{color:var(--c-text-secondary);margin:0}.result__quote{margin:var(--sp-md) 0 0;max-width:28em;color:var(--c-charcoal);font-size:1.05rem;line-height:1.55}.result__sync{margin:var(--sp-sm) 0 0;font-size:.82rem}.result__sync--ok{color:#2f6b4f}.result__sync--warn{color:#8a5a2b}.result__dims{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md);width:100%;padding:var(--sp-lg);text-align:left;box-shadow:var(--shadow-sm)}.result__dims h2{margin:0 0 var(--sp-md);color:var(--c-forest);text-align:center;font-size:1rem}.dim-row{margin-bottom:var(--sp-md)}.dim-row:last-child{margin-bottom:0}.dim-ends{color:var(--c-text-muted);justify-content:space-between;margin-bottom:6px;font-size:.82rem;display:flex}.dim-ends .is-strong{color:var(--c-forest);font-weight:700}.dim-track{background:var(--c-border-light);border-radius:var(--r-full);height:10px;overflow:hidden}.dim-fill{background:linear-gradient(90deg, var(--c-sage), var(--c-fern));border-radius:var(--r-full);height:100%}.result__actions{gap:var(--sp-sm);flex-direction:column;width:100%;max-width:360px;display:flex}.poster{align-items:center;gap:var(--sp-md);flex-direction:column;width:100%;display:flex;position:relative}.poster__canvas{width:min(100%,340px);height:auto;box-shadow:var(--shadow-lg);border:1px solid var(--c-border);border-radius:0}.poster__canvas--hidden{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute;overflow:hidden}.poster__photo{-webkit-touch-callout:default;-webkit-user-select:auto;user-select:auto;touch-action:manipulation;display:block}.poster__skeleton{aspect-ratio:720/1080;background:var(--c-surface-alt);color:var(--c-text-muted);box-shadow:none;place-items:center;font-size:.9rem;display:grid}.poster__tip{color:var(--c-text-muted);margin:0;font-size:.85rem}.keyword-cloud{flex-wrap:wrap;gap:10px;display:flex}.kw-cloud{width:100%}.kw-cloud__stage{background:radial-gradient(#f0c27a1f,#0000 62%),#ffffff08;border:1px solid #f0c27a38;border-radius:16px;width:100%;height:clamp(280px,42vw,420px);min-height:280px;position:relative;overflow:hidden}.kw-cloud__word{color:#fff8ee;letter-spacing:.02em;white-space:nowrap;cursor:default;border-radius:8px;max-width:46%;padding:.15em .35em;font-weight:650;line-height:1.2;transition:transform .2s,opacity .2s;position:absolute;transform:translate(-50%,-50%)}.kw-cloud__word:hover{background:#f0c27a29;transform:translate(-50%,-50%)scale(1.06)}.kw-cloud__word em{color:#f0c27a;font-variant-numeric:tabular-nums;margin-left:.35em;font-size:.72em;font-style:normal;font-weight:700}.kw-cloud__hint{color:#e8e2d89e;margin:10px 0 0;font-size:.78rem}.keyword-tag{color:#fff8ee;word-break:break-word;background:#f0c27a1a;border:1px solid #f0c27a47;border-radius:999px;align-items:center;gap:8px;max-width:100%;padding:8px 12px;font-size:.86rem;line-height:1.35;display:inline-flex}.keyword-tag em{font-variant-numeric:tabular-nums;color:#f0c27a;font-style:normal;font-weight:700}.keyword-tag--c1{opacity:.78;font-size:.8rem}.keyword-tag--c2{font-size:.86rem}.keyword-tag--c3{background:#f0c27a29;font-size:.92rem}.keyword-tag--c4,.keyword-tag--c5{background:#f0c27a38;border-color:#f0c27a73;font-size:1rem}.record-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.record-item{background:#00000038;border:1px solid #e8e2d829;border-radius:12px;overflow:hidden}.record-item__head{align-items:stretch;gap:8px;display:flex}.record-item__toggle{text-align:left;color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;flex:1;grid-template-columns:minmax(120px,160px) 1fr auto;align-items:center;gap:10px;padding:12px 14px;display:grid}.record-item__meta{color:#e8e2d8a6;font-size:.82rem}.record-item__gene{color:#fff8ee;font-weight:600}.record-item__chev{color:#f0c27a;white-space:nowrap;font-size:.82rem}.record-item__del{align-self:center;margin:8px 10px 8px 0;padding:8px 14px!important}.record-item__body{border-top:1px solid #e8e2d81f;padding:0 14px 14px}.record-answers{margin:10px 0 0}.record-answers__row{border-bottom:1px solid #e8e2d81a;padding:10px 0}.record-answers__row dt{color:#e8e2d89e;margin:0 0 4px;font-size:.82rem}.record-answers__row dd{color:#fff8ee;margin:0;font-size:.92rem;line-height:1.5}@media (width<=720px){.record-item__toggle{grid-template-columns:1fr;gap:4px}}.reveal{text-align:center;justify-content:center;align-items:center;min-height:100vh;padding:32px 20px;display:flex}.reveal--empty{flex-direction:column;gap:16px}.reveal__stage{width:min(100%,360px)}.reveal__orbit{background:radial-gradient(circle at 50% 45%,#f4e4c8e6,#f2ede666);border-radius:50%;place-items:center;width:120px;height:120px;margin:0 auto 28px;display:grid;position:relative;box-shadow:inset 0 0 0 8px #fffbf7b3}.reveal__orbit:before{content:"";border:2px dashed #9a6b3f66;border-radius:50%;animation:1.35s linear infinite revealSpin;position:absolute;inset:0}.reveal__horse{z-index:1;font-size:3rem;line-height:1;animation:.9s ease-in-out infinite alternate revealBob;display:block;position:relative}.reveal__title{font-family:var(--font-display);color:var(--c-forest);margin:0 0 10px;font-size:1.45rem;font-weight:700}.reveal__tip{color:var(--c-text-secondary);min-height:1.4em;margin:0 0 22px;font-size:.95rem}.reveal__bar{background:#9a6b3f24;border-radius:999px;height:8px;overflow:hidden}.reveal__bar-fill{border-radius:inherit;background:linear-gradient(90deg, var(--c-sage), var(--c-fern));width:40%;height:100%;animation:1.6s ease-in-out infinite revealBar;display:block}@keyframes revealSpin{to{transform:rotate(360deg)}}@keyframes revealBob{0%{transform:translateY(2px)scale(1)}to{transform:translateY(-4px)scale(1.04)}}@keyframes revealBar{0%{transform:translate(-120%)}to{transform:translate(320%)}}.admin h1{color:var(--c-forest);font-family:var(--font-display)}.admin .card-block{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md);padding:var(--sp-lg);margin-bottom:var(--sp-md);box-shadow:var(--shadow-sm)}.admin .nav-row{gap:var(--sp-sm);margin:var(--sp-md) 0;flex-wrap:wrap;display:flex}.admin .muted{color:var(--c-text-muted);font-size:.9rem}.admin .stat-list{margin:0;padding:0;list-style:none}.admin .stat-list li,.admin-shell-page .stat-list li{border-bottom:1px solid var(--c-border-light);justify-content:space-between;align-items:flex-start;gap:28px;padding:10px 4px;font-size:.9rem;display:flex}.admin .stat-list li>span:first-child,.admin-shell-page .stat-list li>span:first-child{flex:1;min-width:0;padding-right:12px;line-height:1.45}.admin .stat-list li>span:last-child,.admin-shell-page .stat-list li>span:last-child,.stat-list__count{text-align:right;font-variant-numeric:tabular-nums;color:#f0c27a;flex-shrink:0;min-width:2.5em;margin-left:8px;font-weight:700}.admin-login{flex-direction:column;gap:10px;max-width:320px;display:flex}.admin-sub{color:var(--c-text-secondary);margin:0 0 8px;font-size:.92rem}.admin-badge{color:#f3e6d8;letter-spacing:.02em;background:#3d2b1f;border-radius:999px;margin:0 0 12px;padding:4px 10px;font-size:.78rem;display:inline-block}.view-toggle{background:var(--c-surface-alt);border:1px solid var(--c-border);border-radius:var(--r-full);gap:4px;margin:12px 0 4px;padding:4px;display:inline-flex}.view-toggle__btn{border-radius:var(--r-full);font:inherit;color:var(--c-text-secondary);cursor:pointer;transition:all var(--dur-fast) var(--ease-out);background:0 0;border:none;padding:8px 16px;font-size:.9rem;font-weight:600}.view-toggle__btn.is-on{background:linear-gradient(135deg, var(--c-sage), var(--c-forest));color:#fff;box-shadow:var(--shadow-sm)}.purpose-desc{margin:0 0 var(--sp-md);color:var(--c-text-secondary);font-size:.9rem}.purpose-block>h2{margin-bottom:6px}.chart-grid{gap:var(--sp-lg);grid-template-columns:1fr;display:grid}@media (width>=900px){.chart-grid{grid-template-columns:1fr 1fr}.page.admin{max-width:1100px}}.chart-block{background:var(--c-surface-alt);border:1px solid var(--c-border-light);border-radius:var(--r-md);padding:var(--sp-md)}.chart-block__head{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px;display:flex}.chart-block__head h3{color:var(--c-charcoal);flex:1;margin:0;font-size:.95rem;line-height:1.4}.chart-kind-tag{color:var(--c-forest);border-radius:var(--r-full);white-space:nowrap;background:#9a6b3f1f;flex-shrink:0;padding:3px 8px;font-size:.72rem;font-weight:600}.chart-empty{text-align:center;padding:48px 12px}.chart-tooltip{background:var(--c-surface);border:1px solid var(--c-border);max-width:260px;box-shadow:var(--shadow-md);border-radius:10px;padding:8px 12px;font-size:.85rem}.chart-tooltip p{color:var(--c-text-secondary);margin:0 0 4px}.chart-tooltip strong{color:var(--c-forest)}.filter-panel{background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md);margin:16px 0;padding:14px 16px}.filter-panel__title{color:var(--c-forest);margin:0 0 10px;font-size:1rem}.filter-grid{grid-template-columns:repeat(2,1fr);gap:10px 12px;margin-bottom:10px;display:grid}@media (width>=720px){.filter-grid{grid-template-columns:repeat(4,1fr)}}.filter-grid label{color:var(--c-text-secondary);flex-direction:column;gap:4px;font-size:.82rem;font-weight:600;display:flex}.filter-grid select{font:inherit;border:1px solid var(--c-border);background:var(--c-surface-alt);color:var(--c-text);border-radius:10px;padding:8px 10px;font-weight:500}.btn--danger{color:#fff;border-radius:var(--r-full);font-weight:700;font-family:var(--font-display);cursor:pointer;background:#8b3a3a;border:none;padding:12px 22px}.btn--danger:hover:not(:disabled){filter:brightness(1.05)}.btn--danger:disabled{opacity:.45;cursor:not-allowed}.admin-toast{background:var(--c-charcoal);color:#fff;border-radius:var(--r-full);z-index:1000;box-shadow:var(--shadow-lg);padding:12px 20px;font-size:.9rem;font-weight:600;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.page{max-width:720px;padding:var(--sp-xl) var(--sp-lg) var(--sp-3xl);margin:0 auto}@media (width<=480px){.screen,.page{padding:var(--sp-lg) var(--sp-md) var(--sp-2xl)}.intro__grid{grid-template-columns:repeat(2,1fr)}}
