*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;background:#e8f5e0}body{font-family:Noto Sans TC,Helvetica Neue,Arial,sans-serif;color:#4a4540;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gallery-container{width:100%;height:100%;position:fixed;top:0;right:0;bottom:0;left:0;background:#e8f5e0;touch-action:pan-y;cursor:default;overflow:hidden}.gallery-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;animation:galleryFadeIn 1s ease-out}@keyframes galleryFadeIn{0%{opacity:0}to{opacity:1}}.gallery-overlay-top{position:absolute;top:0;left:0;right:0;display:flex;justify-content:center;align-items:center;padding:20px 28px;background:linear-gradient(to bottom,rgba(232,245,224,.8) 0%,transparent 100%);z-index:10;pointer-events:none}.gallery-title{font-size:21px;font-weight:700;letter-spacing:4px;color:#2d5a1e;text-shadow:0 1px 2px rgba(45,90,30,.12)}.gallery-subtitle{font-size:12px;font-weight:400;letter-spacing:2px;color:#4a454099;margin-top:4px}.gallery-school-logo{position:absolute;bottom:20px;right:20px;z-index:10;pointer-events:auto}.gallery-school-logo a{display:block;opacity:.7;transition:opacity .2s}.gallery-school-logo a:hover{opacity:1}.gallery-school-logo img{width:36px;height:auto;display:block}.gallery-overlay-bottom{position:absolute;bottom:0;left:0;right:0;display:flex;flex-direction:column;align-items:center;padding:20px 28px 24px;background:linear-gradient(to top,rgba(232,245,224,.65) 0%,transparent 100%);z-index:10;pointer-events:none}.gallery-progress-bar{display:flex;gap:6px;margin-bottom:10px}.gallery-dot{width:6px;height:6px;border-radius:50%;background:#a09b8c4d;transition:all .4s ease}.gallery-dot.active{width:24px;border-radius:3px;background:linear-gradient(90deg,#c8a882,#b89b78)}.gallery-count{font-size:11px;color:#4a454073;letter-spacing:2px;font-weight:500}.gallery-scene-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;background:#e8f5e0;display:flex;align-items:center;justify-content:center;transition:opacity .8s ease;pointer-events:none}.gallery-scene-overlay.fade-out{opacity:0;pointer-events:none}.gallery-loading{width:100%;height:100%;background:#e8f5e0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#7a7568;font-family:Noto Sans TC,sans-serif}.gallery-spinner{width:32px;height:32px;border:3px solid rgba(160,155,140,.2);border-top:3px solid #7bc950;border-right:3px solid #a0d870;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.gallery-html-wrapper,.gallery-html-wrapper>div{background:transparent!important}@keyframes heartFloat{0%{transform:translate(var(--hx)) scale(1);opacity:1}60%{opacity:.9}to{transform:translate(var(--hx),var(--hy)) scale(.4);opacity:0}}.heart-particle{position:absolute;pointer-events:none;font-size:18px;line-height:1;z-index:999;animation:heartFloat var(--duration) ease-out forwards;animation-delay:var(--delay)}.seo-page{min-height:100vh;background:#f5f7f0;display:flex;flex-direction:column}.seo-nav{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:#e8f5e0;border-bottom:1px solid #d0e8c0;flex-wrap:wrap;gap:8px}.seo-nav-brand{font-size:16px;font-weight:700;color:#2d5a1e;text-decoration:none;letter-spacing:1px}.seo-nav-links{display:flex;gap:20px}.seo-nav-links a{font-size:14px;color:#5a7a48;text-decoration:none;font-weight:500;transition:color .2s}.seo-nav-links a:hover,.seo-nav-links a.active{color:#2d5a1e;text-decoration:underline}.seo-content{flex:1;max-width:760px;margin:0 auto;padding:40px 24px 60px;width:100%}.seo-content h1{font-size:28px;font-weight:700;color:#2d5a1e;margin-bottom:12px;letter-spacing:1px}.seo-lead{font-size:16px;color:#5a5040;line-height:1.8;margin-bottom:36px;border-left:3px solid #a8d490;padding-left:16px}.seo-content section{margin-bottom:36px}.seo-content h2{font-size:21px;font-weight:700;color:#3a6b28;margin-bottom:12px;padding-bottom:6px;border-bottom:2px solid #d0e8c0}.seo-content h3{font-size:17px;font-weight:600;color:#4a7a2a;margin:16px 0 8px}.seo-content p{font-size:15px;line-height:1.8;color:#4a4540;margin-bottom:12px}.seo-content ul{padding-left:20px;margin-bottom:12px}.seo-content li{font-size:15px;line-height:1.8;color:#4a4540;margin-bottom:4px}.seo-content a{color:#3a6b28;text-decoration:underline}.seo-content a:hover{color:#2d5a1e}.seo-contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-top:12px}.seo-contact-item{background:#e8f5e0;border-radius:8px;padding:16px;border:1px solid #d0e8c0}.seo-contact-item h3{font-size:13px;color:#7a7568;margin:0 0 4px;text-transform:uppercase;letter-spacing:1px}.seo-contact-item p{font-size:15px;color:#2d5a1e;margin:0;font-weight:500}.faq-list{margin-bottom:36px}.faq-item{border:1px solid #d0e8c0;border-radius:8px;margin-bottom:12px;background:#fff;overflow:hidden}.faq-question{font-size:16px;font-weight:600;color:#2d5a1e;padding:16px 20px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px}.faq-question:before{content:"▸";font-size:14px;transition:transform .2s;flex-shrink:0}.faq-item[open] .faq-question:before{transform:rotate(90deg)}.faq-question::-webkit-details-marker{display:none}.faq-answer{font-size:15px;line-height:1.8;color:#4a4540;padding:0 20px 16px;margin:0}.faq-contact{background:#e8f5e0;border-radius:8px;padding:24px;border:1px solid #d0e8c0}.faq-contact h2{border:none;padding-bottom:0}.seo-footer{text-align:center;padding:24px;background:#e8f5e0;border-top:1px solid #d0e8c0;font-size:13px;color:#7a7568}.seo-footer a{color:#3a6b28;text-decoration:none}.seo-footer a:hover{text-decoration:underline}.seo-footer p{margin:4px 0}.artwork-page-content{max-width:900px}.artwork-page-image-wrap{background:#fff;border-radius:8px;padding:12px;box-shadow:0 2px 12px #00000014;margin-bottom:24px}.artwork-page-image{width:100%;height:auto;display:block;border-radius:4px}.artwork-page-info{margin-bottom:32px}.artwork-page-title{font-size:26px;font-weight:700;color:#2d5a1e;margin-bottom:8px}.artwork-page-meta{display:flex;gap:16px;font-size:16px;color:#5a5040;margin-bottom:16px}.artwork-page-student{font-weight:500}.artwork-page-class{color:#7a7568}.artwork-page-actions{margin-bottom:20px}.artwork-page-like{padding:8px 20px;border-radius:20px;border:1px solid #d0e8c0;background:#f5f7f0;color:#5a5040;font-size:16px;cursor:pointer;transition:all .2s}.artwork-page-like:hover:not(:disabled){background:#e8f5e0;border-color:#a8d490}.artwork-page-like.liked{background:#fff8e1;border-color:#ffe082;cursor:default}.artwork-page-links{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.artwork-page-cta{display:inline-block;padding:10px 24px;background:#4a7a2a;color:#fff;border-radius:6px;text-decoration:none;font-weight:500;font-size:15px;transition:background .2s}.artwork-page-cta:hover{background:#3a6b28;color:#fff}.artwork-page-links a:not(.artwork-page-cta){color:#3a6b28;text-decoration:underline;font-size:14px}.artwork-page-about{margin-top:36px;padding-top:24px;border-top:1px solid #d0e8c0}.gallery-listing-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px}.gallery-listing-card{background:#fff;border-radius:8px;border:1px solid #e0e8d8;overflow:hidden;text-decoration:none;color:inherit;transition:box-shadow .2s,transform .2s}.gallery-listing-card:hover{box-shadow:0 4px 16px #0000001a;transform:translateY(-2px)}.gallery-listing-img-wrap{aspect-ratio:1;overflow:hidden;background:#f5f7f0}.gallery-listing-img-wrap img{width:100%;height:100%;object-fit:cover;display:block}.gallery-listing-card-info{padding:12px}.gallery-listing-card-title{font-size:14px;font-weight:600;color:#2d5a1e;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gallery-listing-card-meta{display:flex;gap:8px;font-size:12px;color:#7a7568}@media(max-width:600px){.seo-content h1{font-size:22px}.seo-nav{padding:12px 16px}.seo-content{padding:24px 16px 40px}.gallery-listing-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.artwork-page-title{font-size:22px}}@keyframes skeletonShimmer{0%{background-position:-400px 0}to{background-position:400px 0}}.skeleton{background:linear-gradient(90deg,#e8f0dc 25%,#f0f7e8,#e8f0dc 75%);background-size:800px 100%;animation:skeletonShimmer 1.5s ease-in-out infinite;border-radius:4px}.skeleton-card{background:#fff;border-radius:8px;border:1px solid #e0e8d8;overflow:hidden}.skeleton-card-img{aspect-ratio:1;background:linear-gradient(90deg,#e8f0dc 25%,#f0f7e8,#e8f0dc 75%);background-size:800px 100%;animation:skeletonShimmer 1.5s ease-in-out infinite}.skeleton-card-text{padding:12px}.skeleton-line{height:14px;background:linear-gradient(90deg,#e8f0dc 25%,#f0f7e8,#e8f0dc 75%);background-size:800px 100%;animation:skeletonShimmer 1.5s ease-in-out infinite;border-radius:4px;margin-bottom:8px}.skeleton-line:last-child{margin-bottom:0}.skeleton-line.short{width:60%}.skeleton-line.medium{width:80%}.skeleton-artwork-img{width:100%;max-width:700px;aspect-ratio:4/3;background:linear-gradient(90deg,#e8f0dc 25%,#f0f7e8,#e8f0dc 75%);background-size:800px 100%;animation:skeletonShimmer 1.5s ease-in-out infinite;border-radius:8px;margin-bottom:24px}.artwork-page-share{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}.artwork-page-share-btn{padding:8px 18px;border-radius:20px;border:1px solid #d0e8c0;background:#f5f7f0;color:#5a5040;font-size:14px;font-family:Noto Sans TC,sans-serif;cursor:pointer;transition:all .2s}.artwork-page-share-btn:hover{background:#e8f5e0;border-color:#a8d490}.artwork-page-share-whatsapp{background:#25d366;color:#fff;border-color:#20bd5a}.artwork-page-share-whatsapp:hover{background:#20bd5a;border-color:#1da851}
