:root{--warm-bg-1:#fff5ef;--warm-bg-2:#ffe8ec;--warm-bg-3:#ffe4d4;--accent:#e8897a;--accent-soft:#f4b8a8;--accent-secondary:#f5c4d0;--accent-link:#b84d5f;--accent-r:232;--accent-g:137;--accent-b:122;--accent-2-r:245;--accent-2-g:196;--accent-2-b:208;--warm-shadow-rgb:120,65,55;--warm-gradient-page:linear-gradient(135deg,var(--warm-bg-1) 0%,var(--warm-bg-2) 50%,var(--warm-bg-3) 100%);--warm-gradient-page-pwa:linear-gradient(135deg,var(--warm-bg-1) 0%,var(--warm-bg-2) 40%,var(--warm-bg-3) 100%);--accent-gradient:linear-gradient(135deg,var(--accent),var(--accent-secondary));--accent-gradient-90:linear-gradient(90deg,var(--accent),var(--accent-secondary));--accent-alpha-10:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.1);--accent-alpha-14:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.14);--accent-alpha-20:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.2);--accent-alpha-30:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.3);--accent-alpha-35:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.35);--accent-alpha-40:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.4);--accent-alpha-50:rgba(var(--accent-r),var(--accent-g),var(--accent-b),0.5);--accent-2-alpha-10:rgba(var(--accent-2-r),var(--accent-2-g),var(--accent-2-b),0.1);--accent-2-alpha-85:rgba(var(--accent-2-r),var(--accent-2-g),var(--accent-2-b),0.85);--warm-deep-alpha-08:rgba(var(--warm-shadow-rgb),0.08);--warm-deep-alpha-12:rgba(var(--warm-shadow-rgb),0.12);--warm-deep-alpha-14:rgba(var(--warm-shadow-rgb),0.14);--warm-deep-alpha-32:rgba(var(--warm-shadow-rgb),0.32)}body{margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}::-webkit-scrollbar{display:none;height:0;width:0}*{-ms-overflow-style:none;scrollbar-width:none}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,Noto Sans SC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,system-ui,sans-serif;overflow-y:scroll}.App,body{overflow-x:hidden}.App{background:var(--warm-gradient-page);min-height:100vh;position:relative}.app-background{background-position:50%;background-size:cover;filter:blur(10px);-webkit-filter:blur(10px);inset:0;transform:scale(1.06);z-index:0}.App:before,.app-background{pointer-events:none;position:fixed}.App:before{animation:bgFloat 20s ease-in-out infinite;background:radial-gradient(circle at 20% 45%,#ffece48c 0,#0000 52%),radial-gradient(circle at 82% 78%,#ffdae473 0,#0000 50%);bottom:0;content:"";left:0;right:0;top:0;z-index:1}@keyframes bgFloat{0%,to{opacity:1;transform:translateY(0)}50%{opacity:.8;transform:translateY(-20px)}}.container{margin:0 auto;max-width:1200px;padding:30px 20px;position:relative;z-index:2}.loading-container{align-items:center;color:#fff;display:flex;flex-direction:column;justify-content:center;min-height:100vh}.loading-spinner{animation:spin 1s linear infinite;border:4px solid #ffffff4d;border-radius:50%;border-top-color:#fff;height:50px;width:50px}@keyframes spin{to{transform:rotate(1turn)}}.loading-container p{font-size:18px;margin-top:20px}.pwa-launch{align-items:center;display:flex;inset:0;justify-content:center;overflow:hidden;position:fixed;z-index:9999}.pwa-launch-bg{animation:pwaLaunchBgPulse 3s ease-in-out infinite;background:var(--warm-gradient-page-pwa);inset:0;position:absolute}.pwa-launch-bg:before{animation:pwaLaunchShine 4s ease-in-out infinite;background:radial-gradient(circle at 30% 30%,#fff6 0,#0000 45%),radial-gradient(circle at 70% 70%,#ffffff4d 0,#0000 45%);content:"";inset:0;position:absolute}@keyframes pwaLaunchBgPulse{0%,to{opacity:1}50%{opacity:.92}}@keyframes pwaLaunchShine{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.pwa-launch-content{animation:pwaLaunchFadeIn .6s ease-out;position:relative;text-align:center;z-index:1}@keyframes pwaLaunchFadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.pwa-launch-logo-wrap{height:120px;margin:0 auto 24px;position:relative;width:120px}.pwa-launch-logo{animation:pwaLaunchLogoFloat 2.5s ease-in-out infinite;border-radius:22px;box-shadow:0 8px 32px #0000001f;height:88px;position:relative;width:88px;z-index:2}@keyframes pwaLaunchLogoFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.pwa-launch-ring{border:2px solid var(--accent-alpha-40);border-radius:50%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.pwa-launch-ring-1{animation:pwaLaunchRing 2s ease-out infinite;height:100px;width:100px}.pwa-launch-ring-2{animation:pwaLaunchRing 2s ease-out .3s infinite;height:120px;width:120px}.pwa-launch-ring-3{animation:pwaLaunchRing 2s ease-out .6s infinite;height:140px;width:140px}@keyframes pwaLaunchRing{0%{opacity:.8;transform:translate(-50%,-50%) scale(.6)}to{opacity:0;transform:translate(-50%,-50%) scale(1.4)}}.pwa-launch-title{color:#000000bf;font-size:28px;font-weight:700;letter-spacing:2px;margin:0 0 8px}.pwa-launch-subtitle{color:#00000080;font-size:14px;margin:0 0 20px}.pwa-launch-dots{display:flex;gap:8px;justify-content:center}.pwa-launch-dot{animation:pwaLaunchDot 1.2s ease-in-out infinite both;background:var(--accent);border-radius:50%;height:8px;width:8px}.pwa-launch-dot:first-child{animation-delay:0s}.pwa-launch-dot:nth-child(2){animation-delay:.2s}.pwa-launch-dot:nth-child(3){animation-delay:.4s}@keyframes pwaLaunchDot{0%,80%,to{opacity:.5;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}.error-container{align-items:center;color:#fff;display:flex;flex-direction:column;justify-content:center;min-height:100vh;padding:20px;text-align:center}.error-container h2{font-size:32px;margin-bottom:16px}.error-container p{font-size:18px;margin-bottom:12px}.error-hint{background:#ffffff1a;border-radius:8px;margin-top:20px;padding:12px 24px}.footer{color:#fffc;font-size:14px;padding:20px;position:relative;text-align:center;z-index:2}.footer-visitor{color:#ffffffbf;font-size:12px;margin-top:8px}.footer-visitor span{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#0000001f;border-radius:999px;display:inline-block;padding:6px 12px}.admin-token-backdrop{align-items:center;background:#00000059;display:flex;inset:0;justify-content:center;padding:16px;position:fixed;z-index:10000}.admin-token-box{background:#fffffff5;border-radius:12px;box-shadow:0 8px 32px #0000002e;max-width:320px;padding:20px;width:100%}.admin-token-title{color:#1a1a1a;font-size:15px;font-weight:600;margin:0 0 12px}.admin-token-input{border:1px solid #ccc;border-radius:8px;box-sizing:border-box;font-size:14px;padding:10px 12px;width:100%}.admin-token-input:focus{border-color:var(--accent);outline:none}.admin-token-err{color:#c0392b;font-size:12px;margin:8px 0 0}.admin-token-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}.admin-token-btn{border:none;border-radius:8px;cursor:pointer;font-size:14px;padding:8px 16px}.admin-token-btn.secondary{background:#eee;color:#333}.admin-token-btn.primary{background:var(--accent);color:#fff}@media (max-width:768px){.container{padding:20px 10px}.error-container h2{font-size:24px}.error-container p{font-size:16px}}.profile-section{margin-bottom:40px}.profile-card{animation:fadeInUp .8s ease-out;background:#0000;border-radius:24px;box-shadow:none;overflow:hidden;padding:40px 30px;position:relative;text-align:center}.profile-avatar-container{display:inline-block;margin-bottom:20px;position:relative}.profile-avatar{animation:avatarPulse 3s ease-in-out infinite;border:5px solid #fff;border-radius:50%;box-shadow:0 10px 30px #0003;cursor:pointer;height:120px;object-fit:cover;position:relative;width:120px;z-index:1}@keyframes avatarPulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.avatar-ring{animation:ringPulse 3s ease-in-out infinite;background:var(--accent-gradient);border-radius:50%;bottom:-10px;left:-10px;opacity:.3;position:absolute;right:-10px;top:-10px}@keyframes ringPulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.5;transform:scale(1.1)}}.profile-nickname{-webkit-text-fill-color:#0000;background:var(--accent-gradient);-webkit-background-clip:text;background-clip:text;color:#2d3748;font-size:36px;font-weight:700;margin-bottom:12px;text-shadow:0 2px 4px #0000001a}.profile-position{margin-bottom:24px}.position-badge{background:var(--accent-gradient);border-radius:20px;box-shadow:0 4px 15px var(--accent-alpha-40);color:#fff;display:inline-block;font-size:14px;font-weight:600;letter-spacing:.5px;padding:8px 24px}.profile-introduction{color:#2d3748;font-size:16px;font-weight:500;line-height:1.6;margin-bottom:0;margin-left:auto;margin-right:auto;max-width:600px;text-shadow:0 1px 3px #fffc}.profile-motto{align-items:center;background:linear-gradient(135deg,var(--accent-alpha-10),var(--accent-2-alpha-10));border-radius:12px;display:flex;gap:12px;justify-content:center;margin-left:auto;margin-right:auto;margin-top:24px;max-width:500px;padding:16px 24px}.motto-icon{font-size:24px}.motto-text{color:var(--accent-link);font-size:16px;font-style:italic;font-weight:500}@media (max-width:768px){.profile-card{padding:30px 20px}.profile-avatar{height:100px;width:100px}.profile-nickname{font-size:28px}.profile-introduction{font-size:15px}.profile-motto{flex-direction:column;gap:8px}}.techstack-section{animation:fadeInUp .8s ease-out .15s both;background:#ffffff0d;border:2px solid var(--accent-alpha-30);border-radius:20px;box-shadow:0 4px 20px var(--accent-alpha-10);margin-bottom:40px;padding:24px}.techstack-container{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:#ffffff1a;border:1px solid #fff3;border-radius:16px;box-shadow:0 8px 32px #0000001a;padding:16px}.tech-items{align-items:center;display:flex;flex-wrap:wrap;gap:4px}.tech-badge-link,.tech-item{display:inline-flex}.tech-badge-link{text-decoration:none}.tech-badge{align-items:center;border-radius:4px;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d;display:inline-flex;font-family:Inter,Noto Sans SC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,system-ui,sans-serif;font-size:20px;font-weight:600;height:36px;justify-content:center;line-height:1;max-height:36px;min-height:36px;overflow:hidden;padding:0;transition:all .2s ease;white-space:nowrap}.tech-badge:hover{box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b;transform:translateY(-1px)}.badge-icon{align-items:center;background-color:#00000026;display:flex;flex-shrink:0;height:36px;justify-content:center;max-height:36px;min-height:36px;padding:0 6px 0 8px;width:52px}.badge-icon img{display:block;height:36px;object-fit:contain;width:36px}.badge-icon-placeholder{font-size:18px;font-weight:700;width:36px}.badge-icon-placeholder,.badge-text{align-items:center;display:flex;height:36px;justify-content:center}.badge-text{line-height:36px;max-height:36px;min-height:36px;padding:0 8px 0 6px;text-align:center;white-space:nowrap}@media (max-width:768px){.techstack-section{padding:16px 10px}.section-title{font-size:28px}.techstack-container{padding:12px 10px}.tech-items{gap:4px}.tech-badge{font-size:16px;height:30px}.badge-icon{height:30px;padding:0 4px 0 5px;width:42px}.badge-icon img{height:28px;width:28px}.badge-icon-placeholder{font-size:14px;height:28px;width:28px}.badge-text{height:30px;line-height:30px;padding:0 6px 0 4px}}@media (max-width:480px){.techstack-section{padding:14px 8px}.techstack-container{padding:10px 8px}}.projects-section{animation:fadeInUp .8s ease-out .2s both;background:#ffffff0d;border:2px solid var(--accent-alpha-30);border-radius:20px;box-shadow:0 4px 20px var(--accent-alpha-10);margin-bottom:40px;padding:24px}.section-header{align-items:center;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:20px}.section-title{margin:0}.title-icon{animation:bounce 2s ease-in-out infinite;display:inline-block;font-size:36px}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.category-buttons{display:flex;flex-wrap:wrap;gap:8px}.category-btn{align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff1a;border:2px solid var(--accent-alpha-30);border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:600;gap:6px;padding:8px 18px;transition:all .3s ease;white-space:nowrap}.category-btn:hover{background:var(--accent-alpha-20);border-color:var(--accent-alpha-50);box-shadow:0 4px 12px var(--accent-alpha-30);transform:translateY(-2px)}.category-btn.active{background:var(--accent-gradient);border-color:var(--accent);box-shadow:0 4px 16px var(--accent-alpha-40);color:#fff}.projects-grid{grid-gap:16px;align-items:stretch;display:grid;gap:16px;grid-auto-rows:1fr;grid-template-columns:repeat(4,minmax(0,1fr));justify-items:stretch}.project-card{align-self:stretch;backdrop-filter:blur(14px) saturate(1.12);-webkit-backdrop-filter:blur(14px) saturate(1.12);background:linear-gradient(145deg,#fff2ec70 0,#ffffff38 52%,rgba(var(--accent-r),var(--accent-g),var(--accent-b),.08) 100%);border:1px solid #ffffff8c;border-radius:14px;box-shadow:0 4px 24px #00000012,inset 0 1px 0 #ffffffa6;box-sizing:border-box;color:inherit;display:flex;flex-direction:column;height:100%;isolation:isolate;min-height:0;min-width:0;overflow:hidden;padding:20px;position:relative;text-decoration:none;transition:background .3s ease,border-color .3s ease,box-shadow .3s ease,transform .3s ease;width:100%;z-index:0}.project-card:before{background:var(--accent-gradient-90);content:"";height:3px;left:0;pointer-events:none;position:absolute;right:0;top:0;transform:scaleX(0);transition:transform .3s ease;z-index:0}.project-card:hover:before{transform:scaleX(1)}.project-card:hover{background:linear-gradient(145deg,#ffe4e885 0,#ffffff52 52%,rgba(var(--accent-r),var(--accent-g),var(--accent-b),.14) 100%);border-color:#ffe6ebd1;box-shadow:0 14px 36px var(--warm-deep-alpha-12),0 1px 0 #fff8f6c7 inset;transform:translateY(-5px)}.project-header{align-items:center;display:flex;flex-shrink:0;gap:12px;margin-bottom:12px;position:relative;z-index:1}.project-icon{background:#ffffff59;border-radius:8px;box-shadow:0 2px 10px #00000014,inset 0 1px 0 #fff6;flex-shrink:0;height:40px;overflow:hidden;width:40px}.project-icon img{height:100%;object-fit:cover;width:100%}.project-title{color:#1a202c;flex:1 1;font-size:18px;font-weight:700;margin:0;text-shadow:0 1px 0 #ffffff73}.project-description{color:#2d3748;flex:1 1 auto;font-size:14px;line-height:1.5;margin-bottom:12px;min-height:0;text-shadow:0 1px 0 #ffffff59}.project-tags{align-items:center;display:flex;flex-shrink:0;flex-wrap:wrap;gap:8px;height:27px;margin-bottom:0;min-height:27px;overflow:hidden}.project-tag{border:1px solid #0000;border-radius:6px;display:inline-block;font-size:13px;font-weight:500;padding:4px 11px}.project-tag--category{border-style:solid}.project-tag--tech{background:linear-gradient(135deg,#4299e138,#81b2f51f);border-color:#4299e166;color:#2c5282}.project-tech-icons{align-content:flex-start;align-items:center;display:flex;flex-shrink:0;flex-wrap:wrap-reverse;gap:4px;height:76px;margin-bottom:8px;min-height:76px;overflow:hidden}.project-tech-icon{align-items:center;border-radius:4px;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d;box-sizing:border-box;display:inline-flex;flex-shrink:0;height:36px;justify-content:center;min-height:36px;min-width:36px;padding:0;width:36px}.project-tech-icon img{display:block;height:100%;object-fit:contain;width:100%}.project-link-indicator{align-items:center;border-top:1px solid #fff6;color:var(--accent-link);display:flex;font-size:13px;font-weight:600;justify-content:space-between;padding-top:12px;text-shadow:0 1px 0 #ffffff59}.arrow{font-size:18px;transition:transform .3s ease}.project-card:hover .arrow{transform:translateX(4px)}@media (max-width:768px){.projects-section{padding:16px 10px}.projects-grid{gap:8px;grid-template-columns:repeat(2,minmax(0,1fr))}.section-header{align-items:flex-start;flex-direction:column;gap:16px}.section-title{font-size:28px}.category-buttons{gap:8px;width:100%}.category-btn{flex:1 1;font-size:13px;justify-content:center;padding:8px 14px}.project-card{padding:14px 11px}.project-header{gap:10px;margin-bottom:10px}.project-icon{height:36px;width:36px}.project-title{font-size:16px}.project-description{font-size:13px}.project-tag{border-radius:5px;font-size:12px;padding:3px 9px}.project-tech-icon{border-radius:4px;height:32px;min-height:32px;min-width:32px;width:32px}}@media (min-width:769px) and (max-width:1024px){.projects-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.pagination-dots{align-items:center;display:flex;gap:12px;justify-content:center;margin-top:30px;padding:20px 0}.pagination-dot{background:#ffffff4d;border:none;border-radius:50%;cursor:pointer;height:12px;outline:none;padding:0;transition:all .3s ease;width:12px}.pagination-dot:hover{background:#ffffff80;transform:scale(1.2)}.pagination-dot.active{background:var(--accent);box-shadow:0 0 10px var(--accent-alpha-50);height:14px;width:14px}.pagination-dot:focus{outline:2px solid var(--accent-alpha-50);outline-offset:2px}.contacts-section{animation:fadeInUp .8s ease-out .4s both;background:#ffffff0d;border:2px solid var(--accent-alpha-30);border-radius:20px;box-shadow:0 4px 20px var(--accent-alpha-10);margin-bottom:40px;padding:24px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.section-title{align-items:center;color:#fff;display:flex;font-size:32px;font-weight:700;gap:12px;margin-bottom:20px}.title-icon{font-size:32px}.contacts-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(3,1fr)}.contact-card{align-items:center;backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);background:linear-gradient(145deg,#fff2ec85 0,#ffffff47 48%,rgba(var(--accent-r),var(--accent-g),var(--accent-b),.12) 100%);border:1px solid #f5beaf8c;border-radius:16px;box-shadow:0 4px 24px var(--warm-deep-alpha-08),0 1px 0 #ffe8e29e inset;display:flex;gap:16px;overflow:hidden;padding:20px;position:relative;transition:background .3s ease,border-color .3s ease,box-shadow .3s ease,transform .3s ease}.contact-card:hover{background:linear-gradient(145deg,#ffe4e89e 0,#ffffff52 48%,rgba(var(--accent-r),var(--accent-g),var(--accent-b),.2) 100%);border-color:#e8aa9eb8;box-shadow:0 14px 36px var(--warm-deep-alpha-14),0 1px 0 #ffecf0ad inset;transform:translateY(-4px)}.contact-icon{align-items:center;background:#ffece88c;border:1px solid rgba(var(--accent-2-r),var(--accent-2-g),var(--accent-2-b),.42);border-radius:10px;box-shadow:0 3px 14px var(--warm-deep-alpha-08),0 1px 0 #ffffff8c inset;display:flex;flex-shrink:0;font-size:28px;height:48px;justify-content:center;overflow:hidden;position:relative;width:48px}.contact-icon-img{border-radius:10px;height:100%;object-fit:cover;width:100%}.contact-icon-emoji{font-size:28px;line-height:1}.contact-info{flex-grow:1;min-width:0}.contact-label{color:#1a202c;font-size:15px;font-weight:600;margin-bottom:4px;text-shadow:0 1px 0 #ffffff73}.contact-value{color:#2d3748;font-size:13px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 0 #ffffff59;white-space:nowrap}.contact-actions{display:flex;flex-shrink:0;gap:6px}.contact-button{align-items:center;background:#ffeee86b;border:1px solid rgba(var(--accent-r),var(--accent-g),var(--accent-b),.28);border-radius:8px;color:var(--accent-link);cursor:pointer;display:flex;font-size:16px;height:32px;justify-content:center;text-decoration:none;transition:all .2s ease;width:32px}.contact-button:hover{background:linear-gradient(135deg,rgba(var(--accent-r),var(--accent-g),var(--accent-b),.88),rgba(var(--accent-2-r),var(--accent-2-g),var(--accent-2-b),.82));border-color:#ffffff80;color:#fff;transform:scale(1.1)}.contact-button:active{transform:scale(.95)}.copy-toast{animation:toastSlideIn .3s ease-out;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:#b84d5fe6;border-radius:8px;box-shadow:0 4px 16px var(--warm-deep-alpha-32);color:#fff;font-size:13px;font-weight:600;padding:6px 12px;position:absolute;right:20px;top:-36px}@keyframes toastSlideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (max-width:768px){.contacts-grid{gap:12px;grid-template-columns:1fr}.section-title{font-size:24px;margin-bottom:20px}.contact-card{border-radius:12px;gap:12px;padding:14px}.contact-icon{font-size:22px;height:40px;width:40px}.contact-icon,.contact-icon-img{border-radius:8px}.contact-icon-emoji{font-size:22px}.contact-label{font-size:14px}.contact-value{font-size:12px}.contact-actions{gap:6px}.contact-button{font-size:14px;height:28px;width:28px}.copy-toast{right:50%;transform:translateX(50%)}}@media (min-width:769px) and (max-width:1024px){.contacts-grid{grid-template-columns:repeat(3,1fr)}}.click-particle{animation-fill-mode:forwards;animation-name:particle-radiate;animation-timing-function:ease-out;border-radius:50%;box-shadow:0 0 8px #ffffffe6;mix-blend-mode:screen;pointer-events:none;position:fixed;transform:translate(-50%,-50%);will-change:transform,opacity;z-index:9999}@keyframes particle-radiate{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}25%{opacity:.9;transform:translate(calc(-50% + var(--target-x)*.3),calc(-50% + var(--target-y)*.3)) scale(1.2)}to{opacity:0;transform:translate(calc(-50% + var(--target-x)),calc(-50% + var(--target-y))) scale(0)}}.click-burst{animation:burst-effect .6s ease-out forwards;background:radial-gradient(circle,#fffc 0,#fff6 30%,#fff0 70%);border-radius:50%;height:20px;pointer-events:none;position:fixed;transform:translate(-50%,-50%);width:20px;z-index:9998}@keyframes burst-effect{0%{opacity:1;transform:translate(-50%,-50%) scale(0)}50%{opacity:.6;transform:translate(-50%,-50%) scale(2)}to{opacity:0;transform:translate(-50%,-50%) scale(3)}}.admin-modal-backdrop{align-items:center;background:#00000073;box-sizing:border-box;display:flex;inset:0;justify-content:center;padding:16px;position:fixed;z-index:20000}.admin-modal-backdrop:has(.admin-modal-panel--wide){padding:12px}.admin-modal-panel{background:#fff;border-radius:14px;box-shadow:0 16px 48px #0003;display:flex;flex-direction:column;max-height:min(90vh,720px);max-width:520px;overflow:hidden;width:100%}.admin-modal-panel--wide{max-height:min(94vh,920px);max-width:min(98vw,1120px)}.admin-modal-panel--wide .admin-modal-footer,.admin-modal-panel--wide .admin-modal-header{padding-left:24px;padding-right:24px}.admin-modal-panel--wide .admin-modal-body{padding:20px 32px}.admin-modal-header{align-items:center;border-bottom:1px solid #eee;display:flex;flex-shrink:0;gap:12px;justify-content:space-between;padding:14px 16px}.admin-modal-title{color:#5c3d42;font-size:1.05rem;font-weight:600;margin:0}.admin-modal-close{align-items:center;background:#f0f0f0;border:none;border-radius:8px;color:#333;cursor:pointer;display:flex;font-size:22px;height:32px;justify-content:center;line-height:1;padding:0;width:32px}.admin-modal-close:hover{background:#e0e0e0}.admin-modal-body{-webkit-overflow-scrolling:touch;flex:1 1;overflow-y:auto;padding:16px}.admin-modal-footer{background:#fafafa;border-top:1px solid #eee;display:flex;flex-shrink:0;gap:10px;justify-content:flex-end;padding:12px 16px}.admin-modal-footer button{border:none;border-radius:8px;cursor:pointer;font-size:14px;padding:10px 18px}.admin-modal-footer button.secondary{background:#e8e8e8;color:#333}.admin-modal-footer button.primary:disabled,.admin-modal-footer button.secondary:disabled{cursor:not-allowed;opacity:.55}.admin-modal-footer button.primary{background:var(--accent);color:#fff}.admin-field-hint{color:#666;font-size:12px;line-height:1.4;margin:-8px 0 10px}.admin-page{background:var(--warm-gradient-page);box-sizing:border-box;min-height:100vh;padding:16px}.admin-top{align-items:center;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;margin:0 auto 16px;max-width:960px}.admin-top h1{color:#5c3d42;font-size:1.25rem;margin:0}.admin-top-actions{display:flex;flex-wrap:wrap;gap:8px}.admin-top-actions button{background:#fff;border:none;border-radius:8px;box-shadow:0 1px 4px #00000014;color:#5c3d42;cursor:pointer;font-size:14px;padding:8px 14px}.admin-top-actions button.danger{background:#e07a5f;color:#fff}.admin-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 auto 16px;max-width:960px}.admin-tabs button{background:#ffffff8c;border:none;border-radius:999px;color:#5c3d42;cursor:pointer;font-size:14px;padding:8px 14px}.admin-tabs button.active{background:var(--accent);color:#fff}.admin-panel{background:#ffffffeb;border-radius:12px;box-shadow:0 4px 24px #00000014;margin:0 auto;max-width:960px;padding:20px}.admin-msg{color:var(--accent-link);font-size:13px;margin:0 0 12px}.admin-msg.err{color:#c0392b}.admin-form-grid label{color:#555;display:block;font-size:12px;margin-bottom:4px}.admin-form-grid input,.admin-form-grid textarea{border:1px solid #ccc;border-radius:8px;box-sizing:border-box;font-size:14px;margin-bottom:12px;padding:8px 10px;width:100%}.admin-form-grid input[type=checkbox],.admin-form-grid input[type=radio]{align-self:center;border:none;border-radius:4px;flex-shrink:0;margin-bottom:0;max-width:none;min-width:1.125rem;padding:0;width:auto}.admin-form-grid label.admin-check{align-items:center;box-sizing:border-box;cursor:pointer;display:flex!important;gap:8px;margin-bottom:0;margin-top:10px;width:100%}.admin-form-grid textarea{min-height:72px;resize:vertical}.admin-form-actions{margin-top:8px}.admin-form-actions button{background:var(--accent);border:none;border-radius:8px;color:#fff;cursor:pointer;font-size:14px;padding:10px 20px}.admin-tech-grid{grid-gap:10px;align-items:start;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.admin-tech-card{background:#fafafa;border:1px solid #e0e0e0;border-radius:10px;min-width:0;padding:8px 10px}.admin-tech-card .admin-row-head{flex-wrap:nowrap;justify-content:flex-start;margin-bottom:0}.admin-tech-card__ico{flex-shrink:0}.admin-tech-card__ph{font-size:13px;font-weight:700;line-height:1}.admin-tech-card__name{color:#5c3d42;flex:1 1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-tech-card .admin-row-btns{flex-shrink:0}.admin-row{background:#fafafa;border:1px solid #e0e0e0;border-radius:10px;margin-bottom:12px;padding:12px}.admin-row-head{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;margin-bottom:8px}.admin-row-head strong{color:#5c3d42}.admin-row-btns{display:flex;gap:6px}.admin-row-btns button{background:#fff;border:1px solid #ccc;border-radius:6px;cursor:pointer;font-size:13px;padding:6px 12px}.admin-row-btns button.warn{background:#fde8e4;border-color:#e07a5f;color:#922b21}.admin-check{align-items:center;display:flex;font-size:13px;gap:6px;margin-right:12px}.admin-check-row{display:flex;flex-wrap:wrap;margin-bottom:8px}.admin-summary{background:#fff8f5;border:1px solid #fce0d8;border-radius:10px;margin-bottom:16px;padding:14px}.admin-summary p{margin:0 0 6px}.admin-summary-meta{color:#555;font-size:13px}.admin-toolbar{margin-bottom:16px}.admin-toolbar-btn{background:#e8e8e8;border:none;border-radius:8px;color:#333;cursor:pointer;font-size:14px;padding:10px 18px}.admin-toolbar-btn.primary{background:var(--accent);color:#fff}.admin-toolbar-btn:disabled{cursor:not-allowed;opacity:.6}.admin-list-heading{color:#5c3d42;font-size:1rem;margin:0 0 12px}.admin-row-sub{color:#555;font-size:13px}.admin-project-card{align-items:flex-start;display:flex;gap:14px}.admin-project-card__icon-wrap{align-items:center;background:#fff;border:1px solid #e0e0e0;border-radius:12px;display:flex;flex-shrink:0;height:52px;justify-content:center;overflow:hidden;width:52px}.admin-project-card__icon{height:36px;object-fit:contain;width:36px}.admin-project-card__main{flex:1 1;min-width:0}.admin-project-card__head{align-items:flex-start;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-bottom:6px}.admin-project-card__title{color:#5c3d42;font-size:1rem;line-height:1.3}.admin-project-card__desc{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#555;display:-webkit-box;font-size:13px;line-height:1.45;margin:0 0 8px;overflow:hidden}.admin-project-card__link{color:var(--accent-link);display:inline-block;font-size:12px;margin-bottom:8px;max-width:100%;text-decoration:none;word-break:break-all}.admin-project-card__link:hover{text-decoration:underline}.admin-project-card__link--empty{color:#999;cursor:default}.admin-project-card__meta{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.admin-project-card__tag{background:#fff0eb;border:1px solid #f5cfc4;border-radius:999px;color:#9d4e56;font-size:11px;padding:2px 8px}.admin-project-card__tag--more{background:#f5f5f5;border-color:#ddd;color:#666}.admin-project-card__tag--tech{background:#e3f2fd;border-color:#90caf9;color:#1565c0}.admin-project-card__pill{border-radius:999px;font-size:11px;font-weight:600;padding:2px 8px}.admin-project-card__pill--dev{background:#e3f2fd;border:1px solid #90caf9;color:#1565c0}.admin-project-card__pill--deploy{background:#fff3e0;border:1px solid #ffcc80;color:#e65100}.admin-project-card__pill--admin{background:#fce4ec;border:1px solid #f48fb1;color:#c2185b}.admin-project-card__pill--hidden{background:#eceff1;border:1px solid #b0bec5;color:#546e7a}.admin-inline-title{margin-bottom:16px}.admin-title-row{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.admin-title-row input{border:1px solid #ccc;border-radius:8px;box-sizing:border-box;flex:1 1;font-size:14px;min-width:160px;padding:8px 10px}.admin-tech-picker{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;max-height:240px;overflow-y:auto;padding:4px 0}.admin-modal-panel--wide .admin-tech-picker{gap:12px;max-height:min(52vh,480px);padding:8px 4px}.admin-modal-panel--wide .admin-tech-pick{border-radius:12px;font-size:12px;gap:8px;min-height:96px;min-width:104px;padding:12px 8px;width:104px}.admin-modal-panel--wide .admin-tech-pick__img{height:44px;width:44px}.admin-modal-panel--wide .admin-tech-pick__ph{border-radius:8px;font-size:18px;height:44px;width:44px}.admin-modal-panel--wide .admin-tech-pick__name{font-size:12px;line-height:1.25}.admin-tech-picker-empty{color:#888;font-size:13px;margin:0}.admin-tech-pick{align-items:center;background:#fff;border:2px solid #e0e0e0;border-radius:10px;color:#333;cursor:pointer;display:inline-flex;flex-direction:column;font-size:11px;gap:4px;padding:8px 6px;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;width:76px}.admin-tech-pick--on,.admin-tech-pick:hover{border-color:var(--accent)}.admin-tech-pick--on{background:var(--accent-alpha-14);box-shadow:0 0 0 1px var(--accent-alpha-35)}.admin-tech-pick__img{height:28px;object-fit:contain;width:28px}.admin-tech-pick__ph{align-items:center;background:#eee;border-radius:6px;color:#999;display:flex;font-weight:700;height:28px;justify-content:center;width:28px}.admin-tech-pick__name{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;line-height:1.2;max-width:100%;overflow:hidden;text-align:center;text-overflow:ellipsis}.admin-project-card__tech-ico{align-items:center;border-radius:6px;box-shadow:0 1px 2px #00000014;box-sizing:border-box;display:inline-flex;height:26px;justify-content:center;padding:3px;width:26px}.admin-project-card__tech-ico img{height:100%;object-fit:contain;width:100%}.admin-color-row{align-items:stretch;box-sizing:border-box;display:flex;gap:10px;margin-bottom:8px;width:100%}.admin-form-grid .admin-color-row input{margin-bottom:0}.admin-form-grid .admin-color-row input[type=color]{flex-shrink:0;max-width:52px;min-width:52px;padding:3px;width:52px}.admin-color-native{background:#fff;border:1px solid #ccc;border-radius:8px;box-sizing:border-box;cursor:pointer;height:42px;min-width:52px;padding:3px;width:52px}.admin-color-native::-webkit-color-swatch-wrapper{padding:2px}.admin-color-native::-webkit-color-swatch{border:none;border-radius:4px}.admin-color-hex-input{flex:1 1;min-width:0}.admin-color-swatches{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.admin-color-swatch{border:2px solid #0000001f;border-radius:6px;box-sizing:border-box;cursor:pointer;height:30px;padding:0;transition:transform .12s ease,box-shadow .12s ease;width:30px}.admin-color-swatch:hover{box-shadow:0 2px 8px #0000002e;transform:scale(1.1);z-index:1}.admin-color-swatch--light{border-color:#bbb}
/*# sourceMappingURL=main.e72267e5.css.map*/