:root{--paper:#f5f0e6;--paper-light:#faf6ee;--paper-dark:#e8e0d0;--ink:#1a1a1a;--ink-light:#3a3a3a;--ink-soft:#6b6b6b;--vermilion:#c0392b;--vermilion-light:#d4543f;--bamboo:#4a7c59;--bamboo-light:#6b9b7a;--gold:#b8924a;--gold-light:#d4b06a;--seal:#b83227;--font-display:-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Helvetica Neue", "KaiTi", "STKaiti", serif;--font-body:-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Helvetica Neue", "KaiTi", "STKaiti", serif;--font-brush:-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "KaiTi", "STKaiti", serif;--space-xs:.5rem;--space-sm:1rem;--space-md:2rem;--space-lg:4rem;--space-xl:6rem;--border-ink:1px solid var(--ink);--border-soft:1px solid #1a1a1a26;--border-ink-thick:2px solid var(--ink)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-body);background-color:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.8;overflow-x:hidden}body:before{content:"";pointer-events:none;z-index:0;background-image:repeating-linear-gradient(0deg,#0000,#0000 2px,#8b735508 2px 4px),repeating-linear-gradient(90deg,#0000,#0000 2px,#8b735505 2px 4px);width:100%;height:100%;position:fixed;top:0;left:0}.bamboo-bg{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;top:0;left:0;overflow:hidden}.bamboo-bg svg{width:100%;height:100%}#root{z-index:1;position:relative}.seal-stamp{background:var(--seal);width:3.5rem;height:3.5rem;color:var(--paper-light);font-family:var(--font-brush);letter-spacing:2px;writing-mode:vertical-rl;border-radius:4px;justify-content:center;align-items:center;padding:.3rem;font-size:1.5rem;font-weight:700;line-height:1;display:inline-flex;transform:rotate(-2deg);box-shadow:2px 2px #0000001a}.title-line{align-items:center;gap:1rem;margin:0 auto 2rem;display:flex}.title-line:before,.title-line:after{content:"";background:linear-gradient(to right, transparent, var(--ink), transparent);flex:1;max-width:120px;height:1px}.btn-primary{background:var(--ink);color:var(--paper-light);font-family:var(--font-body);letter-spacing:4px;cursor:pointer;border:none;border-radius:12px;justify-content:center;align-items:center;gap:.5rem;padding:.875rem 2.5rem;font-size:1.1rem;font-weight:600;transition:all .3s;display:inline-flex;position:relative;overflow:hidden}.btn-primary:hover{background:var(--seal);transform:translateY(-2px);box-shadow:0 6px 20px #00000026}.btn-secondary{color:var(--ink);font-family:var(--font-body);letter-spacing:4px;border:var(--border-ink-thick);cursor:pointer;background:0 0;border-radius:12px;justify-content:center;align-items:center;gap:.5rem;padding:.875rem 2.5rem;font-size:1.1rem;font-weight:600;transition:all .3s;display:inline-flex}.btn-secondary:hover{background:var(--ink);color:var(--paper-light);transform:translateY(-2px)}.btn-vermilion{background:var(--vermilion);color:var(--paper-light);font-family:var(--font-body);letter-spacing:4px;cursor:pointer;border:none;border-radius:12px;justify-content:center;align-items:center;gap:.5rem;padding:.875rem 2.5rem;font-size:1.1rem;font-weight:600;transition:all .3s;display:inline-flex}.btn-vermilion:hover{background:var(--seal);transform:translateY(-2px);box-shadow:0 6px 20px #c0392b4d}.ink-card{background:var(--paper-light);border:var(--border-soft);border-radius:16px;padding:2rem;transition:all .3s;position:relative}.ink-card:hover{border-color:var(--ink);transform:translateY(-4px);box-shadow:4px 4px #1a1a1a14}.vertical-text{writing-mode:vertical-rl;text-orientation:upright;letter-spacing:.5rem;line-height:2}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes inkSpread{0%{opacity:0;filter:blur(8px);transform:scale(.8)}to{opacity:1;filter:blur();transform:scale(1)}}@keyframes sealStamp{0%{opacity:0;transform:rotate(-2deg)scale(2)}50%{opacity:.6;transform:rotate(-2deg)scale(1.1)}to{opacity:1;transform:rotate(-2deg)scale(1)}}.animate-fade-up{animation:.8s forwards fadeInUp}.animate-ink{animation:1.2s forwards inkSpread}.delay-1{opacity:0;animation-delay:.1s}.delay-2{opacity:0;animation-delay:.3s}.delay-3{opacity:0;animation-delay:.5s}.delay-4{opacity:0;animation-delay:.7s}.delay-5{opacity:0;animation-delay:.9s}.page-container{max-width:1200px;margin:0 auto;padding:0 1.5rem}.section{padding:var(--space-xl) 0;position:relative}.section-title{font-family:var(--font-display);text-align:center;letter-spacing:8px;color:var(--ink);margin-bottom:1rem;font-size:2.5rem;font-weight:700}.section-subtitle{text-align:center;color:var(--ink-soft);letter-spacing:2px;margin-bottom:3rem;font-size:1.1rem}@media (width<=768px){:root{--space-lg:2rem;--space-xl:3rem}.section-title{letter-spacing:4px;font-size:1.8rem}.section-subtitle{font-size:.95rem}.btn-primary,.btn-secondary,.btn-vermilion{letter-spacing:2px;padding:.75rem 1.5rem;font-size:1rem}}.toast-container{z-index:9999;pointer-events:none;flex-direction:column;gap:.5rem;display:flex;position:fixed;top:1rem;right:1rem}.toast{color:#fff;pointer-events:auto;border-radius:8px;align-items:center;gap:.5rem;max-width:360px;padding:.75rem 1.25rem;font-size:.9rem;animation:.3s toast-slide-in;display:flex;box-shadow:0 4px 12px #00000026}.toast-info{background:#3498db}.toast-success{background:#2ea049}.toast-error{background:#e74c3c}.toast-warning{background:#f39c12}.toast-icon{background:#ffffff40;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;font-size:1rem;font-weight:700;display:flex}.toast-message{flex:1;line-height:1.4}@keyframes toast-slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@media (width<=600px){.toast-container{top:.5rem;left:.5rem;right:.5rem}.toast{max-width:none}}.portal-page{background:#f5f0e1;flex-direction:column;min-height:100vh;display:flex;position:relative}.portal-nav{z-index:10;justify-content:space-between;align-items:center;padding:1.5rem 3rem;display:flex;position:absolute;top:0;left:0;right:0}.portal-nav-brand{align-items:center;gap:.75rem;display:flex}.portal-seal{color:#f5f0e1;background:#c0392b;border-radius:4px;justify-content:center;align-items:center;width:2.5rem;height:2.5rem;font-family:KaiTi,楷体,STKaiti,serif;font-size:1.3rem;display:flex;transform:rotate(-2deg);box-shadow:3px 3px #00000026}.portal-brand-name{letter-spacing:4px;color:#1a1a1a;font-family:KaiTi,楷体,STKaiti,serif;font-size:1.3rem}.portal-nav-actions{align-items:center;gap:.6rem;display:flex}.portal-nav-register{letter-spacing:2px;color:#c0392b;border:1px solid #c0392b;border-radius:4px;padding:.5rem 1.5rem;font-family:KaiTi,楷体,STKaiti,serif;font-size:1rem;text-decoration:none;transition:all .3s}.portal-nav-register:hover{color:#f5f0e1;background:#c0392b}.portal-nav-login{letter-spacing:2px;color:#1a1a1a;border:1px solid #1a1a1a;border-radius:4px;padding:.5rem 1.5rem;font-family:KaiTi,楷体,STKaiti,serif;font-size:1rem;text-decoration:none;transition:all .3s}.portal-nav-login:hover{color:#f5f0e1;background:#1a1a1a}.portal-main{flex-direction:column;flex:1;justify-content:center;align-items:center;min-height:100vh;padding:5rem 2rem 2rem;display:flex;overflow:hidden}.portal-hero{text-align:center;opacity:0;margin-bottom:.5rem;transition:opacity .6s,transform .6s;transform:translateY(15px)}.portal-hero.portal-loaded{opacity:1;transform:translateY(0)}.portal-hero-subtitle{letter-spacing:.3rem;color:#666;margin-bottom:.4rem;font-size:1rem}.portal-hero-divider{justify-content:center;align-items:center;gap:1rem;margin-bottom:.3rem;display:flex}.portal-hero-divider span:first-child,.portal-hero-divider span:last-child{background:linear-gradient(90deg,#0000,#666,#0000);width:50px;height:1px}.portal-divider-dot{letter-spacing:3px;color:#666;font-family:KaiTi,楷体,STKaiti,serif;font-size:.85rem}.portal-hero-hint{letter-spacing:2px;color:#666;opacity:.7;font-size:.8rem}.portal-cards-wrap{opacity:0;width:min(90vw,720px);margin:0 auto;transition:opacity .8s .2s,transform .8s cubic-bezier(.34,1.56,.64,1) .2s;position:relative;transform:scale(.9)}.portal-cards-wrap.portal-loaded{opacity:1;transform:scale(1)}.portal-cards-grid{grid-template-columns:1fr 1fr;gap:1rem;width:100%;display:grid}.portal-card{cursor:pointer;z-index:1;border-radius:14px;width:100%;padding-bottom:56.25%;text-decoration:none;transition:transform .4s,box-shadow .4s;position:relative;overflow:hidden}.portal-card:hover{transform:translateY(-3px);box-shadow:0 10px 28px #0003}.portal-card-disabled{cursor:default}.portal-card-disabled:hover{box-shadow:none;transform:none}.portal-card-bg{z-index:0;background-position:top;background-repeat:no-repeat;background-size:cover;border-radius:14px;width:100%;height:100%;transition:transform .6s;position:absolute;top:0;left:0}.portal-card:hover .portal-card-bg{transform:scale(1.05)}.portal-card-bg-wood{background-color:#1a3a2a;background-image:url(/beasts/dragon.png)}.portal-card-bg-fire{background-color:#3a1a1a;background-image:url(/beasts/phoenix.png)}.portal-card-bg-metal{background-color:#3a3520;background-image:url(/beasts/tiger.png)}.portal-card-bg-water{background-color:#1a2030;background-image:url(/beasts/tortoise.png)}.portal-card-qi{pointer-events:none;opacity:0;filter:blur(40px);z-index:2;border-radius:50%;width:140%;height:140%;transition:opacity .8s;position:absolute;top:-20%;left:-20%}.portal-card:hover .portal-card-qi{opacity:.6}.portal-card-wood .portal-card-qi{background:radial-gradient(40% 50% at 40% 40%,#4ac87873 0%,#0000 60%),radial-gradient(35% 40% at 65% 60%,#78dc964d 0%,#0000 55%);animation:8s ease-in-out infinite qiDrift1}.portal-card-fire .portal-card-qi{background:radial-gradient(40% 50% at 40% 40%,#e6643c80 0%,#0000 60%),radial-gradient(35% 40% at 65% 60%,#ffa06459 0%,#0000 55%);animation:8s ease-in-out infinite qiDrift1}.portal-card-metal .portal-card-qi{background:radial-gradient(40% 50% at 40% 40%,#e6c87873 0%,#0000 60%),radial-gradient(35% 40% at 65% 60%,#ffe6a04d 0%,#0000 55%);animation:8s ease-in-out infinite qiDrift1}.portal-card-water .portal-card-qi{background:radial-gradient(40% 50% at 40% 40%,#508cdc66 0%,#0000 60%),radial-gradient(35% 40% at 65% 60%,#82b4fa4d 0%,#0000 55%);animation:8s ease-in-out infinite qiDrift1}.portal-card-qi-2{animation:12s ease-in-out infinite reverse qiDrift2!important}.portal-card:hover .portal-card-qi-2{opacity:.35}.portal-card-disabled:hover .portal-card-qi,.portal-card-disabled:hover .portal-card-qi-2{opacity:0}@keyframes qiDrift1{0%,to{transform:translate(0)scale(1)rotate(0)}25%{transform:translate(8%,-5%)scale(1.05)rotate(2deg)}50%{transform:translate(-5%,6%)scale(.98)rotate(-1deg)}75%{transform:translate(6%,3%)scale(1.03)rotate(1deg)}}@keyframes qiDrift2{0%,to{transform:translate(0)scale(1)}33%{transform:translate(-8%,5%)scale(1.06)}66%{transform:translate(7%,-4%)scale(.97)}}.portal-card-text{text-align:center;z-index:3;background:linear-gradient(#0000 0%,#00000026 25%,#000000b3 100%);flex-direction:column;align-items:center;gap:.15rem;padding:.8rem .5rem .6rem;display:flex;position:absolute;bottom:0;left:0;right:0}.portal-card-title{letter-spacing:4px;color:#f5f0e1;text-shadow:0 2px 6px #000000e6,0 0 12px #00000080;font-family:KaiTi,楷体,STKaiti,华文楷体,STXingkai,华文行楷,LXGW WenKai,LXGW WenKai TC,serif;font-size:1.6rem;font-weight:900;line-height:1.3}.portal-card-desc{letter-spacing:2px;color:#fffc;text-shadow:0 1px 3px #000000e6;font-family:KaiTi,楷体,STKaiti,serif;font-size:.7rem}.portal-footer{text-align:center;opacity:0;margin-top:1.5rem;transition:opacity .6s .5s}.portal-footer.portal-loaded{opacity:1}.portal-footer-text{letter-spacing:2px;color:#666;margin-bottom:.6rem;font-size:.8rem}.portal-footer-links{flex-wrap:wrap;justify-content:center;align-items:center;gap:1.5rem;display:flex}.portal-footer-link{letter-spacing:2px;color:#1a1a1a;border-bottom:1px dashed #666;padding-bottom:2px;font-family:KaiTi,楷体,STKaiti,serif;font-size:.85rem;text-decoration:none;transition:color .3s}.portal-footer-link:hover{color:#c0392b;border-bottom-color:#c0392b}.portal-footer-register{color:#c0392b;border-bottom-color:#c0392b;font-weight:600}@media (width<=768px){.portal-nav{padding:1rem 1.5rem}.portal-main{padding:4rem 1rem 2rem}.portal-hero-subtitle{font-size:.9rem}.portal-cards-wrap{width:94vw}.portal-cards-grid{gap:.6rem}.portal-card{border-radius:10px}.portal-card-title{letter-spacing:2px;font-size:1.2rem}.portal-card-desc{letter-spacing:1px;font-size:.65rem}.portal-card-text{padding:.6rem .3rem .4rem}.portal-footer-text{font-size:.7rem}}@media (width<=360px){.portal-cards-wrap{width:96vw}.portal-cards-grid{gap:.4rem}.portal-card-title{letter-spacing:1px;font-size:1rem}.portal-card-desc{display:none}.portal-card-text{padding:.4rem .2rem .3rem}}.portal-iot-card{color:#fff;background:linear-gradient(135deg,#147a6d,#0f5f55);border-radius:16px;justify-content:space-between;align-items:center;gap:1rem;max-width:940px;margin:0 auto;padding:1.1rem 1.4rem;text-decoration:none;transition:transform .25s,box-shadow .25s;display:flex;box-shadow:0 6px 20px #126a6359}.portal-iot-card:hover{transform:translateY(-2px);box-shadow:0 10px 26px #126a6373}.portal-iot-left{align-items:center;gap:.9rem;display:flex}.portal-iot-icon{font-size:1.8rem}.portal-iot-title{letter-spacing:.5px;font-size:1.05rem;font-weight:700;display:block}.portal-iot-desc{color:#ffffffd9;margin-top:3px;font-size:.8rem;display:block}.portal-iot-go{color:#ffe9a8;flex-shrink:0;font-size:.95rem;font-weight:600}.ff-fab{z-index:950;color:#fff;cursor:pointer;background:linear-gradient(135deg,#2d5016,#3d6b22);border:none;border-radius:50%;justify-content:center;align-items:center;width:58px;height:58px;transition:all .2s;display:flex;position:fixed;bottom:1.4rem;right:1.6rem;box-shadow:0 4px 18px #2d501666}.ff-fab:hover{transform:translateY(-2px)scale(1.05)}.ff-fab-tip{white-space:nowrap;color:#fff;opacity:0;pointer-events:none;background:#2d2c2ad9;border-radius:16px;padding:.3rem .7rem;font-size:.75rem;transition:all .2s;position:absolute;right:68px}.ff-fab:hover .ff-fab-tip{opacity:1}.ff-overlay{z-index:960;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ff-panel{background:#fff;border-radius:18px;width:340px;max-width:92vw;padding:1.4rem 1.3rem 1.2rem;position:relative;box-shadow:0 12px 40px #0003}.ff-close{color:#999;cursor:pointer;background:0 0;border:none;font-size:1.5rem;line-height:1;position:absolute;top:.4rem;right:.6rem}.ff-menu h3,.ff-form-title{color:#2d5016;margin:0 0 .4rem;font-size:1.05rem}.ff-desc{color:#888;margin:0 0 1rem;font-size:.85rem}.ff-menu-btn{text-align:left;cursor:pointer;background:#fff;border:1.5px solid;border-radius:10px;flex-direction:column;gap:.2rem;width:100%;margin-bottom:.6rem;padding:.85rem 1rem;text-decoration:none;display:flex}.ff-menu-btn b{font-size:.95rem}.ff-menu-btn span{color:#777;font-size:.8rem}.ff-menu-idea{color:#2d5016;border-color:#2d5016}.ff-menu-idea:hover{background:#eef5ea}.ff-menu-square{color:#b8860b;border-color:#d4a017}.ff-menu-square:hover{background:#fdf6e8}.ff-form-title{margin-bottom:.7rem}.ff-types{flex-wrap:wrap;gap:.4rem;margin-bottom:.7rem;display:flex}.ff-type{cursor:pointer;color:#555;background:#fff;border:1px solid #ddd;border-radius:18px;padding:.32rem .8rem;font-size:.8rem}.ff-type.on{color:#fff;background:#2d5016;border-color:#2d5016}.ff-textarea{box-sizing:border-box;resize:vertical;border:1px solid #ddd;border-radius:8px;width:100%;margin-bottom:.7rem;padding:.7rem .8rem;font-size:.9rem}.ff-submit{color:#fff;cursor:pointer;background:#2d5016;border:none;border-radius:8px;width:100%;padding:.7rem;font-size:1rem;font-weight:600}.ff-link{color:#b8860b;cursor:pointer;text-align:center;background:0 0;border:none;width:100%;margin-top:.5rem;font-size:.82rem;display:block}.ff-success{text-align:center;padding:.8rem 0}.ff-ok{color:#fff;background:#2ea049;border-radius:50%;justify-content:center;align-items:center;width:52px;height:52px;margin:0 auto .7rem;font-size:1.5rem;display:flex}.ff-success h3{color:#2d5016;margin:0 0 .4rem}.ff-success p{color:#777;margin:0 0 1rem;font-size:.85rem}.ff-btn{color:#fff;cursor:pointer;background:#2d5016;border:none;border-radius:8px;padding:.6rem 2rem;font-size:.9rem}.ff-compact{color:#b8860b;background:#fff;border:1.5px solid #d4a017;border-radius:20px;align-items:center;gap:.3rem;padding:.4rem .9rem;font-size:.82rem;text-decoration:none;display:inline-flex}.ff-compact:hover{background:#fdf6e8}.ff-compact{z-index:220;position:fixed;bottom:1.5rem;left:1.3rem}
