:root{--color-primary:#1a3a5c;--color-primary-light:#264f7a;--color-gold:#d4a843;--color-gold-light:#e8c96a;--color-bg:#f8f9fa;--color-white:#ffffff;--color-accent:#e8734a;--color-accent-light:#f09b7a;--color-text:#2c3e50;--color-text-light:#5a6c7d;--color-border:#e0e4e8;--color-card-shadow:rgba(26, 58, 92, 0.08);--color-overlay:rgba(0, 0, 0, 0.85);--radius-sm:8px;--radius-md:12px;--radius-lg:20px;--radius-xl:28px;--shadow-sm:0 2px 8px rgba(0,0,0,0.06);--shadow-md:0 4px 20px rgba(0,0,0,0.08);--shadow-lg:0 8px 40px rgba(0,0,0,0.12);--shadow-card:0 4px 16px var(--color-card-shadow);--font-title:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;--font-body:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;--max-width:600px;--nav-dot-size:10px}*,::after,::before{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;-webkit-tap-highlight-color:transparent;font-size:16px}body{font-family:var(--font-body);color:var(--color-text);background:var(--color-bg);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}.nav-dots{position:fixed;right:12px;top:50%;transform:translateY(-50%);z-index:900;display:flex;flex-direction:column;gap:14px}.nav-dot{width:var(--nav-dot-size);height:var(--nav-dot-size);border-radius:50%;background:rgba(26,58,92,.25);border:2px solid transparent;transition:all .3s ease;display:block;text-decoration:none;position:relative}.nav-dot::after{content:attr(title);position:absolute;right:22px;top:50%;transform:translateY(-50%);background:var(--color-primary);color:#fff;font-size:11px;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s}.nav-dot:active::after,.nav-dot:hover::after{opacity:1}.nav-dot.active{background:var(--color-gold);border-color:var(--color-gold-light);width:12px;height:12px;box-shadow:0 0 8px rgba(212,168,67,.5)}section{padding:60px 20px;position:relative}.section-header{text-align:center;margin-bottom:40px}.section-title{font-family:var(--font-title);font-size:1.8rem;font-weight:700;color:var(--color-primary);margin-bottom:8px;letter-spacing:2px}.section-desc{font-size:.95rem;color:var(--color-text-light);letter-spacing:1px}.hero-section{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;text-align:center;background:linear-gradient(135deg,#0d2137 0,#1a3a5c 30%,#1e4d7b 60%,#1a3a5c 100%);padding:0 20px;position:relative;overflow:hidden}.hero-section::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle at 30% 20%,rgba(212,168,67,.08) 0,transparent 50%),radial-gradient(circle at 70% 80%,rgba(232,115,74,.06) 0,transparent 50%),radial-gradient(circle at 50% 50%,rgba(255,255,255,.03) 0,transparent 70%);animation:heroBgShift 15s ease-in-out infinite}@keyframes heroBgShift{0%,100%{transform:translate(0,0)}33%{transform:translate(1%,-1%)}66%{transform:translate(-1%,1%)}}.confetti-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.hero-content{position:relative;z-index:2;animation:heroFadeIn 1.2s ease-out}@keyframes heroFadeIn{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.hero-badge{display:inline-block;font-size:.8rem;letter-spacing:4px;color:var(--color-gold);border:1px solid rgba(212,168,67,.4);padding:6px 18px;border-radius:20px;margin-bottom:24px;text-transform:uppercase;animation:badgePulse 3s ease-in-out infinite}@keyframes badgePulse{0%,100%{border-color:rgba(212,168,67,.4)}50%{border-color:rgba(212,168,67,.8)}}.hero-title{margin-bottom:16px}.title-line{display:block;font-family:var(--font-title);color:var(--color-white);letter-spacing:4px}.title-line:first-child{font-size:1.2rem;font-weight:300;margin-bottom:4px;letter-spacing:8px}.title-school{font-size:2rem;font-weight:600;margin-bottom:4px}.title-class{font-size:2.6rem;font-weight:900;background:linear-gradient(180deg,#fff 0,#c9d8e8 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.title-class .accent{font-size:3.2rem;-webkit-text-fill-color:var(--color-gold)}.hero-subtitle{font-size:1rem;color:rgba(255,255,255,.7);letter-spacing:3px;margin-bottom:8px}.hero-motto{font-size:.85rem;color:rgba(255,255,255,.45);letter-spacing:2px;margin-bottom:32px}.hero-cap{animation:capFloat 3s ease-in-out infinite}@keyframes capFloat{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-12px) rotate(2deg)}}.grad-cap{width:80px;height:auto}.scroll-hint{position:absolute;bottom:30px;left:50%;transform:translateX(-50%);z-index:2;display:flex;flex-direction:column;align-items:center;gap:6px;color:rgba(255,255,255,.5);font-size:.75rem;letter-spacing:2px;animation:scrollPulse 2s ease-in-out infinite}@keyframes scrollPulse{0%,100%{opacity:.4;transform:translateX(-50%) translateY(0)}50%{opacity:1;transform:translateX(-50%) translateY(6px)}}.scroll-arrow{animation:arrowBounce 1.5s ease-in-out infinite}@keyframes arrowBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}.countdown-section{background:var(--color-white);text-align:center}.countdown-container{display:flex;justify-content:center;align-items:center;gap:8px;margin-bottom:16px}.countdown-card{background:linear-gradient(180deg,#1a3a5c 0,#264f7a 100%);color:#fff;border-radius:var(--radius-md);padding:16px 14px;min-width:64px;box-shadow:0 6px 20px rgba(26,58,92,.25)}.countdown-number{font-size:2rem;font-weight:900;font-family:var(--font-title);line-height:1;margin-bottom:4px;letter-spacing:2px}.countdown-label{font-size:.75rem;color:rgba(255,255,255,.7);letter-spacing:2px}.countdown-divider{font-size:2rem;font-weight:300;color:var(--color-gold);padding-bottom:16px}.countdown-status{font-size:.95rem;color:var(--color-text-light);margin-bottom:8px}.graduation-date{font-size:.9rem;color:var(--color-accent);font-weight:600;letter-spacing:1px}.gallery-section{background:var(--color-bg)}.gallery-grid{columns:2;column-gap:10px;max-width:960px;margin:0 auto}.gallery-item{break-inside:avoid;margin-bottom:10px;border-radius:var(--radius-md);overflow:hidden;cursor:pointer;position:relative;background:linear-gradient(135deg,#e0e7ee 0,#c8d6e5 100%);transition:transform .3s ease,box-shadow .3s ease;-webkit-tap-highlight-color:transparent}.gallery-item:active{transform:scale(.97)}.gallery-item img{width:100%;display:block;transition:transform .4s ease}.gallery-item:hover img{transform:scale(1.05)}.gallery-item-overlay{position:absolute;bottom:0;left:0;right:0;padding:16px 12px;background:linear-gradient(transparent,rgba(0,0,0,.6));color:#fff;font-size:.8rem;opacity:0;transition:opacity .3s;letter-spacing:1px}.gallery-item:active .gallery-item-overlay,.gallery-item:hover .gallery-item-overlay{opacity:1}.lightbox{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000}.lightbox.active{display:block}.lightbox-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--color-overlay)}.lightbox-content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-width:90vw;max-height:85vh;z-index:1}.lightbox-content img{max-width:100%;max-height:85vh;object-fit:contain;border-radius:var(--radius-sm);box-shadow:0 20px 60px rgba(0,0,0,.5)}.lightbox-close{position:fixed;top:16px;right:16px;background:rgba(255,255,255,.15);border:none;color:#fff;font-size:2rem;width:44px;height:44px;border-radius:50%;cursor:pointer;z-index:2;display:flex;align-items:center;justify-content:center;transition:background .2s;-webkit-tap-highlight-color:transparent}.lightbox-close:hover{background:rgba(255,255,255,.25)}.lightbox-next,.lightbox-prev{position:fixed;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.12);border:none;color:#fff;font-size:1.8rem;width:44px;height:44px;border-radius:50%;cursor:pointer;z-index:2;display:flex;align-items:center;justify-content:center;transition:background .2s;-webkit-tap-highlight-color:transparent}.lightbox-prev{left:12px}.lightbox-next{right:12px}.lightbox-next:hover,.lightbox-prev:hover{background:rgba(255,255,255,.25)}.lightbox-counter{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);color:rgba(255,255,255,.7);font-size:.85rem;letter-spacing:2px;z-index:2}.students-section{background:var(--color-white)}.students-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;max-width:960px;margin:0 auto}.student-card{position:relative;perspective:800px;-webkit-tap-highlight-color:transparent}.student-card-inner{position:relative;width:100%;padding-bottom:130%;transition:transform .6s cubic-bezier(.4, 0, .2, 1);transform-style:preserve-3d}.student-card.flipped .student-card-inner{transform:rotateY(180deg)}.student-card-back,.student-card-front{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:var(--radius-lg);overflow:hidden;backface-visibility:hidden;-webkit-backface-visibility:hidden}.student-card-front{background:var(--color-white);box-shadow:var(--shadow-card);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px}.student-avatar{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#e0e7ee 0,#c8d6e5 100%);display:flex;align-items:center;justify-content:center;font-size:1.8rem;margin-bottom:10px;color:var(--color-primary);border:3px solid var(--color-gold-light)}.student-name{font-size:1rem;font-weight:700;color:var(--color-primary);margin-bottom:4px}.student-role{font-size:.7rem;color:var(--color-gold);letter-spacing:2px}.student-card-back{background:linear-gradient(135deg,var(--color-primary) 0,var(--color-primary-light) 100%);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;transform:rotateY(180deg);text-align:center}.student-back-label{font-size:.7rem;letter-spacing:4px;margin-bottom:12px;color:var(--color-gold);text-transform:uppercase}.student-quote{font-size:.9rem;line-height:1.6;opacity:.9}.student-quote::before{content:'"'}.student-quote::after{content:'"'}.card-flip-hint{position:absolute;bottom:8px;right:10px;font-size:.65rem;color:var(--color-text-light);opacity:.5}.timeline-section{background:var(--color-bg)}.timeline{position:relative;max-width:500px;margin:0 auto;padding-left:30px}.timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:2px;background:linear-gradient(180deg,var(--color-gold) 0,var(--color-gold-light) 30%,var(--color-accent) 70%,var(--color-accent-light) 100%);border-radius:1px}.timeline-item{position:relative;margin-bottom:32px;padding:18px;background:var(--color-white);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);opacity:0;transform:translateX(-20px);transition:all .5s ease}.timeline-item.visible{opacity:1;transform:translateX(0)}.timeline-item::before{content:'';position:absolute;left:-26px;top:24px;width:10px;height:10px;border-radius:50%;background:var(--color-gold);border:2px solid #fff;box-shadow:0 0 0 3px var(--color-gold-light)}.timeline-date{font-size:.8rem;font-weight:700;color:var(--color-accent);letter-spacing:2px;margin-bottom:6px}.timeline-title{font-size:1.05rem;font-weight:700;color:var(--color-primary);margin-bottom:6px}.timeline-desc{font-size:.85rem;color:var(--color-text-light);line-height:1.6}.timeline-thumb{width:100%;height:120px;object-fit:cover;border-radius:var(--radius-sm);margin-top:10px;background:linear-gradient(135deg,#e0e7ee,#c8d6e5)}.teachers-section{background:var(--color-white)}.teachers-scroll{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding:10px 20px 20px;margin:0 -20px;scroll-padding:20px}.teachers-scroll::-webkit-scrollbar{display:none}.teacher-card{flex:0 0 260px;scroll-snap-align:start;background:var(--color-white);border-radius:var(--radius-lg);padding:24px 20px;box-shadow:var(--shadow-card);text-align:center;position:relative;overflow:visible}.teacher-card::before{content:'"';position:absolute;top:8px;left:16px;font-size:3rem;color:var(--color-gold);opacity:.3;font-family:Georgia,serif;line-height:1}.teacher-avatar{width:60px;height:60px;border-radius:50%;background:linear-gradient(135deg,#c8d6e5,#a0b9d0);display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin:0 auto 12px;border:3px solid var(--color-gold-light)}.teacher-name{font-size:1rem;font-weight:700;color:var(--color-primary);margin-bottom:2px}.teacher-subject{font-size:.75rem;color:var(--color-gold);letter-spacing:2px;margin-bottom:12px}.teacher-message{font-size:.85rem;color:var(--color-text-light);line-height:1.7;font-style:italic}.messages-section{background:var(--color-bg)}.messages-container{max-width:500px;margin:0 auto}.message-form{background:var(--color-white);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);margin-bottom:24px}.form-row{position:relative;margin-bottom:16px}.form-input{width:100%;padding:14px 16px;border:2px solid var(--color-border);border-radius:var(--radius-md);font-size:.95rem;font-family:var(--font-body);color:var(--color-text);background:var(--color-bg);transition:border-color .3s,box-shadow .3s;outline:0}.form-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(26,58,92,.1)}.form-textarea{min-height:100px;resize:vertical;line-height:1.6}.char-count{position:absolute;right:12px;bottom:10px;font-size:.7rem;color:var(--color-text-light)}.form-submit{width:100%;padding:14px;background:linear-gradient(135deg,var(--color-primary) 0,var(--color-primary-light) 100%);color:#fff;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;letter-spacing:2px;cursor:pointer;transition:transform .2s,box-shadow .2s;font-family:var(--font-body);-webkit-tap-highlight-color:transparent}.form-submit:active{transform:scale(.97)}.form-submit:hover{box-shadow:0 4px 16px rgba(26,58,92,.3)}.messages-header{margin-bottom:16px}.messages-count{font-size:.85rem;color:var(--color-text-light)}.messages-count strong{color:var(--color-accent);font-size:1.1rem}.messages-list{display:flex;flex-direction:column;gap:12px}.message-card{background:var(--color-white);border-radius:var(--radius-md);padding:16px;box-shadow:var(--shadow-sm);position:relative;animation:msgSlideIn .4s ease-out}@keyframes msgSlideIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.message-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.message-author{font-weight:700;color:var(--color-primary);font-size:.9rem;display:flex;align-items:center;gap:6px}.message-author::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--color-gold);display:inline-block}.message-time{font-size:.7rem;color:var(--color-text-light)}.message-text{font-size:.9rem;color:var(--color-text);line-height:1.6;word-break:break-word}.message-delete{position:absolute;top:10px;right:10px;background:0 0;border:none;color:var(--color-text-light);font-size:.75rem;cursor:pointer;opacity:0;transition:opacity .2s;padding:4px 8px;border-radius:4px;-webkit-tap-highlight-color:transparent}.message-card:active .message-delete,.message-card:hover .message-delete{opacity:.6}.message-delete:hover{opacity:1!important;color:var(--color-accent);background:rgba(232,115,74,.1)}.messages-empty{text-align:center;padding:40px 20px;color:var(--color-text-light);font-size:.9rem}.messages-empty.hidden{display:none}.footer{background:var(--color-primary);color:rgba(255,255,255,.8);text-align:center;padding:40px 20px}.footer-content{max-width:400px;margin:0 auto}.footer-class{font-size:1rem;font-weight:700;color:#fff;margin-bottom:6px;letter-spacing:2px}.footer-info{font-size:.85rem;margin-bottom:12px;color:var(--color-gold-light)}.footer-quote{font-size:.9rem;font-style:italic;margin-bottom:16px;color:rgba(255,255,255,.6)}.footer-divider{width:40px;height:1px;background:var(--color-gold);margin:0 auto 16px;opacity:.5}.footer-thanks{font-size:.8rem;margin-bottom:4px}.footer-copy{font-size:.7rem;color:rgba(255,255,255,.4)}.back-to-top{position:fixed;bottom:24px;right:16px;width:44px;height:44px;border-radius:50%;background:var(--color-primary);color:#fff;border:none;box-shadow:var(--shadow-md);cursor:pointer;z-index:800;display:flex;align-items:center;justify-content:center;opacity:0;transform:translateY(20px);pointer-events:none;transition:opacity .3s,transform .3s;-webkit-tap-highlight-color:transparent}.back-to-top.visible{opacity:1;transform:translateY(0);pointer-events:auto}.back-to-top:active{transform:scale(.9)}.music-toggle{position:fixed;bottom:24px;left:16px;background:var(--color-white);border:2px solid var(--color-border);border-radius:24px;padding:8px 14px;display:flex;align-items:center;gap:6px;cursor:pointer;z-index:800;box-shadow:var(--shadow-sm);font-size:.8rem;color:var(--color-text-light);transition:all .3s;-webkit-tap-highlight-color:transparent;font-family:var(--font-body)}.music-toggle.playing{border-color:var(--color-gold);color:var(--color-gold);box-shadow:0 0 12px rgba(212,168,67,.2)}.music-icon-pause,.music-icon-play{display:none}.music-toggle:not(.playing) .music-icon-play{display:block}.music-toggle.playing .music-icon-pause{display:block}.music-label{letter-spacing:1px}.scroll-reveal{opacity:0;transform:translateY(30px);transition:opacity .6s ease,transform .6s ease}.scroll-reveal.revealed{opacity:1;transform:translateY(0)}@media (min-width:768px){section{padding:80px 40px}.section-title{font-size:2.2rem}.section-desc{font-size:1rem}.hero-badge{font-size:.9rem;padding:8px 24px}.title-line:first-child{font-size:1.5rem}.title-school{font-size:2.8rem}.title-class{font-size:3.6rem}.title-class .accent{font-size:4.4rem}.hero-subtitle{font-size:1.1rem}.hero-motto{font-size:.95rem}.grad-cap{width:100px}.countdown-card{min-width:80px;padding:20px 18px}.countdown-number{font-size:2.6rem}.gallery-grid{columns:3;column-gap:14px}.gallery-item{margin-bottom:14px}.students-grid{grid-template-columns:repeat(4,1fr);gap:20px}.student-card.flipped .student-card-inner,.student-card:hover .student-card-inner{transform:rotateY(180deg)}.timeline{max-width:600px;padding-left:40px}.timeline::before{left:12px}.timeline-item::before{left:-32px}.teachers-scroll{justify-content:center;overflow-x:visible;flex-wrap:wrap;gap:20px}.teacher-card{flex:0 0 280px}.messages-container{max-width:560px}.nav-dots{right:20px;gap:16px}.back-to-top{right:24px;bottom:32px}.music-toggle{left:24px;bottom:32px}.lightbox-prev{left:24px}.lightbox-next{right:24px}.map-stage{transform:perspective(1200px) rotateX(10deg)}.map-hint{display:block}.edit-modal-overlay{align-items:center}.edit-modal{border-radius:var(--radius-xl);animation:editFadeIn .3s ease}@keyframes editFadeIn{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.map-detail-overlay{align-items:center}.map-detail-card{border-radius:var(--radius-xl);max-height:70vh;animation:detailFadeIn .3s ease}@keyframes detailFadeIn{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.upload-modal-overlay{align-items:center}.upload-modal{border-radius:var(--radius-xl);animation:detailFadeIn .3s ease}}@media (min-width:1024px){section{padding:100px 60px}.gallery-grid{columns:4;max-width:1100px}.students-grid{grid-template-columns:repeat(5,1fr);max-width:1100px}.timeline{max-width:700px}}.student-edit-btn{position:absolute;top:8px;right:8px;z-index:10;width:30px;height:30px;border-radius:50%;border:1.5px solid rgba(26,58,92,.15);background:rgba(255,255,255,.85);font-size:.8rem;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s,transform .2s,background .2s;-webkit-tap-highlight-color:transparent;backdrop-filter:blur(4px)}.student-card:active .student-edit-btn,.student-card:hover .student-edit-btn{opacity:1}@media (hover:none) and (pointer:coarse){.student-edit-btn{opacity:.7}}.student-edit-btn:active{transform:scale(.9);background:var(--color-gold-light)}.student-avatar-img{width:100%;height:100%;border-radius:50%;object-fit:cover}.student-destination{font-size:.7rem;color:var(--color-accent);margin-top:4px;letter-spacing:1px}.student-back-school{font-size:.75rem;color:var(--color-gold);margin-top:8px;letter-spacing:1px}.edit-modal-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.6);z-index:3000;align-items:flex-end;justify-content:center;backdrop-filter:blur(4px)}.edit-modal-overlay.active{display:flex}.edit-modal{background:var(--color-white);border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:24px 20px 32px;width:100%;max-width:480px;max-height:85vh;overflow-y:auto;position:relative;animation:editSlideUp .35s cubic-bezier(.32,.72,0,1);box-shadow:0 -8px 40px rgba(0,0,0,.15)}@keyframes editSlideUp{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.edit-modal-close{position:absolute;top:12px;right:16px;background:0 0;border:none;font-size:1.8rem;color:var(--color-text-light);cursor:pointer;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .2s}.edit-modal-close:hover{background:var(--color-bg)}.edit-modal-title{text-align:center;font-size:1.2rem;font-weight:700;color:var(--color-primary);margin-bottom:20px;letter-spacing:2px}.edit-avatar-section{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:20px}.edit-avatar-preview{width:90px;height:90px;border-radius:50%;background:var(--color-bg);border:3px dashed var(--color-border);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;transition:border-color .3s,box-shadow .3s;position:relative}.edit-avatar-preview:hover{border-color:var(--color-gold);box-shadow:0 0 0 4px rgba(212,168,67,.15)}.edit-avatar-placeholder{font-size:2rem;opacity:.5}.edit-avatar-img{position:absolute;width:100%;height:100%;object-fit:cover;border-radius:50%}.edit-avatar-btn{font-size:.8rem;color:var(--color-primary);background:var(--color-bg);border:1px solid var(--color-border);padding:6px 16px;border-radius:20px;cursor:pointer;letter-spacing:1px;transition:all .2s}.edit-avatar-btn:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.edit-avatar-remove{font-size:.75rem;color:var(--color-accent);background:0 0;border:none;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background .2s}.edit-avatar-remove:hover{background:rgba(232,115,74,.1)}.edit-form{display:flex;flex-direction:column;gap:6px}.edit-label{font-size:.8rem;color:var(--color-text-light);font-weight:600;letter-spacing:1px;margin-top:8px}.edit-input{width:100%;padding:12px 14px;border:2px solid var(--color-border);border-radius:var(--radius-sm);font-size:.95rem;font-family:var(--font-body);color:var(--color-text);background:var(--color-bg);outline:0;transition:border-color .3s,box-shadow .3s;box-sizing:border-box}.edit-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(26,58,92,.1)}.edit-input[readonly]{background:#eef1f5;color:var(--color-text-light);cursor:default}select.edit-input{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%235a6c7d' stroke-width='1.5' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}.edit-modal-actions{display:flex;gap:12px;margin-top:24px}.edit-btn{flex:1;padding:14px;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;letter-spacing:2px;cursor:pointer;transition:transform .2s,box-shadow .2s;font-family:var(--font-body)}.edit-btn:active{transform:scale(.96)}.edit-btn-cancel{background:var(--color-bg);color:var(--color-text-light);border:2px solid var(--color-border)}.edit-btn-save{background:linear-gradient(135deg,var(--color-primary) 0,var(--color-primary-light) 100%);color:#fff;box-shadow:0 4px 12px rgba(26,58,92,.3)}.edit-btn-save:hover{box-shadow:0 6px 20px rgba(26,58,92,.4)}.save-toast{position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-20px);background:var(--color-primary);color:#fff;padding:10px 24px;border-radius:24px;font-size:.9rem;letter-spacing:1px;z-index:4000;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;box-shadow:var(--shadow-lg)}.save-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.map-section{background:linear-gradient(180deg,var(--color-white) 0,#e8ecf1 100%);overflow:hidden}.map-container{position:relative;max-width:600px;margin:0 auto;perspective:1200px;padding:10px}.map-stage{width:100%;transform:perspective(1200px) rotateX(15deg);transition:transform .15s ease-out;will-change:transform;position:relative}.map-svg{width:100%;height:auto;display:block;border-radius:var(--radius-lg);box-shadow:0 20px 60px rgba(26,58,92,.25),0 0 0 1px rgba(26,58,92,.08)}.map-hint{text-align:center;font-size:.7rem;color:var(--color-text-light);opacity:.5;margin-top:10px;letter-spacing:1px;pointer-events:none}.map-province-dot{transition:transform .3s ease}.province-ring{animation:ringPulse 2s ease-in-out infinite;transform-origin:center}@keyframes ringPulse{0%,100%{opacity:.5}50%{opacity:.1}}.map-origin circle:first-child{animation:originPulse 2s ease-in-out infinite}@keyframes originPulse{0%,100%{opacity:.4;stroke-width:2}50%{opacity:.8;stroke-width:3}}.connection-line{animation:lineDash 3s linear infinite}@keyframes lineDash{to{stroke-dashoffset:-20}}.map-stats{max-width:600px;margin:20px auto 0;text-align:center}.map-stats-inner{display:flex;flex-direction:column;align-items:center;gap:10px}.map-stats-text{font-size:1rem;color:var(--color-text);letter-spacing:1px}.map-stats-text strong{color:var(--color-accent);font-size:1.2rem}.map-stats-hint{font-size:.8rem;color:var(--color-text-light);letter-spacing:1px}.map-stats-top{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;font-size:.8rem;color:var(--color-text-light)}.map-stats-badge{background:linear-gradient(135deg,var(--color-primary) 0,var(--color-primary-light) 100%);color:#fff;padding:4px 12px;border-radius:16px;font-size:.75rem;letter-spacing:1px;animation:badgePopIn .5s ease backwards}@keyframes badgePopIn{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.map-detail-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:2500;align-items:flex-end;justify-content:center;backdrop-filter:blur(3px)}.map-detail-overlay.active{display:flex}.map-detail-card{background:var(--color-white);border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:100%;max-width:480px;max-height:65vh;overflow-y:auto;padding:0 20px 32px;animation:detailSlideUp .4s cubic-bezier(.32,.72,0,1);box-shadow:0 -8px 40px rgba(0,0,0,.15)}@keyframes detailSlideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}.map-detail-handle{width:36px;height:4px;background:var(--color-border);border-radius:2px;margin:12px auto 16px}.map-detail-header{display:flex;align-items:baseline;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--color-border)}.map-detail-province{font-size:1.3rem;font-weight:700;color:var(--color-primary);letter-spacing:2px}.map-detail-count{font-size:.85rem;color:var(--color-accent);font-weight:600;letter-spacing:1px}.map-detail-list{display:flex;flex-direction:column;gap:10px}.map-detail-student{display:flex;align-items:center;gap:12px;padding:12px;background:var(--color-bg);border-radius:var(--radius-md);animation:detailItemIn .4s ease backwards}.map-detail-student:first-child{animation-delay:50ms}.map-detail-student:nth-child(2){animation-delay:.1s}.map-detail-student:nth-child(3){animation-delay:.15s}.map-detail-student:nth-child(4){animation-delay:.2s}.map-detail-student:nth-child(5){animation-delay:.25s}.map-detail-student:nth-child(n+6){animation-delay:.3s}@keyframes detailItemIn{from{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:translateX(0)}}.map-detail-avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#e0e7ee,#c8d6e5);display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;border:2px solid var(--color-gold-light)}.map-detail-photo{width:100%;height:100%;object-fit:cover;border-radius:50%}.map-detail-emoji{font-size:1.2rem}.map-detail-info{flex:1;min-width:0}.map-detail-name{font-size:.9rem;font-weight:700;color:var(--color-primary)}.map-detail-school{font-size:.75rem;color:var(--color-text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-detail-quote{font-size:.78rem;color:var(--color-gold);font-style:italic;flex-shrink:0;max-width:120px;text-align:right;line-height:1.4}.gallery-upload-card{break-inside:avoid;margin-bottom:10px;cursor:pointer}.gallery-upload-inner{border:2px dashed rgba(26,58,92,.2);border-radius:var(--radius-md);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 16px;transition:all .3s ease;background:rgba(255,255,255,.5);min-height:140px}.gallery-upload-inner:active,.gallery-upload-inner:hover{border-color:var(--color-gold);background:rgba(212,168,67,.08);transform:scale(1.02)}.gallery-upload-icon{font-size:2.5rem;color:var(--color-gold);font-weight:300;line-height:1;margin-bottom:8px}.gallery-upload-text{font-size:.9rem;color:var(--color-primary);font-weight:600;letter-spacing:2px}.gallery-upload-hint{font-size:.7rem;color:var(--color-text-light);margin-top:4px;letter-spacing:1px}.gallery-delete-btn{position:absolute;top:8px;right:8px;z-index:10;width:26px;height:26px;border-radius:50%;border:none;background:rgba(0,0,0,.5);color:#fff;font-size:1rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s,background .2s;-webkit-tap-highlight-color:transparent}.gallery-item:active .gallery-delete-btn,.gallery-item:hover .gallery-delete-btn{opacity:1}.gallery-delete-btn:hover{background:rgba(232,115,74,.9)}@media (hover:none) and (pointer:coarse){.gallery-delete-btn{opacity:.7;width:30px;height:30px}}.upload-modal-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.6);z-index:3100;align-items:flex-end;justify-content:center;backdrop-filter:blur(4px)}.upload-modal-overlay.active{display:flex}.upload-modal{background:var(--color-white);border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:24px 20px 32px;width:100%;max-width:440px;max-height:85vh;overflow-y:auto;position:relative;animation:editSlideUp .35s cubic-bezier(.32,.72,0,1)}.upload-modal-close{position:absolute;top:12px;right:16px;background:0 0;border:none;font-size:1.8rem;color:var(--color-text-light);cursor:pointer;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center}.upload-modal-title{text-align:center;font-size:1.2rem;font-weight:700;color:var(--color-primary);margin-bottom:18px;letter-spacing:2px}.upload-preview{width:100%;height:180px;border:2px dashed var(--color-border);border-radius:var(--radius-md);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer;overflow:hidden;transition:border-color .3s;margin-bottom:16px;position:relative}.upload-preview:hover{border-color:var(--color-gold)}.upload-preview-icon{font-size:2.5rem;opacity:.5}.upload-preview-text{font-size:.85rem;color:var(--color-text-light)}.upload-preview-img{position:absolute;width:100%;height:100%;object-fit:contain;border-radius:var(--radius-sm)}.upload-label{font-size:.8rem;color:var(--color-text-light);font-weight:600;letter-spacing:1px}.upload-input{width:100%;padding:12px 14px;border:2px solid var(--color-border);border-radius:var(--radius-sm);font-size:.95rem;font-family:var(--font-body);color:var(--color-text);background:var(--color-bg);outline:0;transition:border-color .3s;box-sizing:border-box;margin:6px 0 2px}.upload-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(26,58,92,.1)}.upload-char-count{font-size:.7rem;color:var(--color-text-light);display:block;text-align:right;margin-bottom:12px}.upload-modal-actions{display:flex;gap:12px;margin-top:16px}.upload-btn{flex:1;padding:14px;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;letter-spacing:2px;cursor:pointer;transition:transform .2s,box-shadow .2s;font-family:var(--font-body)}.upload-btn:active{transform:scale(.96)}.upload-btn-cancel{background:var(--color-bg);color:var(--color-text-light);border:2px solid var(--color-border)}.upload-btn-save{background:linear-gradient(135deg,var(--color-gold) 0,var(--color-accent) 100%);color:#fff;box-shadow:0 4px 12px rgba(212,168,67,.3)}.ripple-effect{animation:rippleExpand .8s ease-out forwards}@keyframes rippleExpand{0%{r:5;opacity:.8;stroke-width:2}100%{r:50;opacity:0;stroke-width:.5}}.origin-ring{animation:originRingPulse 2s ease-in-out infinite}@keyframes originRingPulse{0%,100%{opacity:.4}50%{opacity:.15}}.orbit-ring{animation:orbitRotate 4s linear infinite;transform-origin:center}.orbit-particle{animation:orbitFloat 3s ease-in-out infinite}@keyframes orbitFloat{0%,100%{opacity:.4}50%{opacity:.9}}.traveling-dot{animation:travelPath 4s linear infinite}.province-main-dot{transition:fill .3s ease,opacity .3s ease}.province-path{vector-effect:non-scaling-stroke;transition:fill .35s ease,stroke .35s ease,stroke-width .35s ease}.province-path:hover{filter:brightness(1.3)}.map-svg{width:100%;height:auto;display:block;border-radius:var(--radius-lg);box-shadow:0 20px 60px rgba(26,58,92,.3),0 0 0 1px rgba(212,168,67,.15)}.map-loading-text{animation:loadingPulse 1.5s ease-in-out infinite}@keyframes loadingPulse{0%,100%{opacity:.3}50%{opacity:.7}}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}html{scroll-behavior:auto}}