*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--color-primary-start:#ff6b6b;--color-primary-mid:#ff8e53;--color-primary-end:#ffa94d;--color-primary:#ff6b6b;--color-accent-purple:#a29bfe;--color-accent-green:#2ed573;--color-accent-blue:#54a0ff;--color-bg:#fff5f0;--color-surface:#fff;--color-card-bg:#fff;--color-text:#2d3436;--color-text-secondary:#636e72;--color-text-muted:#b2bec3;--color-border:#f0e6e0;--color-success:#2ed573;--color-warning:#ffa94d;--color-danger:#ff6b6b;--shadow-xs:0 1px 3px #ff6b6b0f;--shadow-sm:0 2px 8px #ff6b6b14;--shadow-md:0 4px 16px #ff6b6b1a;--shadow-lg:0 8px 28px #ff6b6b1f;--shadow-card:0 2px 12px #0000000f;--radius-xs:6px;--radius-sm:10px;--radius-md:16px;--radius-lg:24px;--radius-full:9999px;--space-xs:.25rem;--space-sm:.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;--merge-bar-height:64px}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;overscroll-behavior-x:none;width:100%;font-size:16px;overflow-x:hidden}body{font-family:var(--font-family);background-color:var(--color-bg);color:var(--color-text);width:100%;min-height:100vh;line-height:1.6;position:relative;overflow-x:hidden}#root{flex-direction:column;min-height:100dvh;display:flex;position:relative}h1{font-size:1.5rem;font-weight:700;line-height:1.3}h2{font-size:1.25rem;font-weight:600;line-height:1.35}p{font-size:1rem;line-height:1.6}button{border-radius:var(--radius-sm);background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid));color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border:none;min-height:44px;padding:.65em 1.6em;font-family:inherit;font-size:1rem;font-weight:600;transition:transform .15s,box-shadow .2s,opacity .2s;position:relative;overflow:hidden}button:hover{box-shadow:0 4px 16px #ff6b6b59}button:active{transform:scale(.97)}button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}button.secondary{background:var(--color-surface);color:var(--color-text);border:2px solid var(--color-border);box-shadow:var(--shadow-xs)}button.secondary:hover{border-color:var(--color-primary-start);box-shadow:var(--shadow-sm)}button.secondary:active{background-color:#fff5f0}button.danger{color:#fff;background:linear-gradient(135deg,#ff6b6b,#e74c3c)}button.danger:hover{box-shadow:0 4px 16px #e74c3c59}input,textarea,select{border:2px solid var(--color-border);border-radius:var(--radius-sm);background-color:var(--color-surface);min-height:44px;color:var(--color-text);outline:none;width:100%;padding:.6em .9em;font-family:inherit;font-size:1rem;transition:border-color .2s,box-shadow .2s}input:focus,textarea:focus,select:focus{border-color:var(--color-primary-start);box-shadow:0 0 0 4px #ff6b6b1f}input::placeholder,textarea::placeholder{color:var(--color-text-muted)}.card{background-color:var(--color-card-bg);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:var(--space-lg)}.page{padding:var(--space-lg);width:100%;max-width:480px;padding-bottom:var(--space-lg);flex:1;margin:0 auto}.page h1{background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-end));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:.35rem;font-size:1.5rem;font-weight:700}.page p{color:var(--color-text-secondary);font-size:.95rem}.spinner{border:4px solid var(--color-border);border-top-color:var(--color-primary-start);border-radius:50%;width:40px;height:40px;margin:0 auto;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.dot-loader{padding:var(--space-lg) 0;justify-content:center;align-items:center;gap:6px;display:flex}.dot-loader:before,.dot-loader:after{content:"";background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid));border-radius:50%;width:10px;height:10px;animation:1.2s ease-in-out infinite dotBounce;display:block}.dot-loader__dot{background:linear-gradient(135deg, var(--color-primary-mid), var(--color-primary-end));border-radius:50%;width:10px;height:10px;animation:1.2s ease-in-out .2s infinite dotBounce}.dot-loader:before{animation-delay:0s}.dot-loader:after{animation-delay:.4s}@keyframes dotBounce{0%,80%,to{opacity:.4;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@keyframes breathe{0%,to{box-shadow:0 4px 16px #ff6b6b4d,0 0 #ff8c5066}50%{box-shadow:0 4px 24px #ff6b6b66,0 0 0 12px #ff8c5000}}@keyframes scaleIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes celebratePop{0%{opacity:0;transform:scale(0)}50%{opacity:1;transform:scale(1.15)}to{opacity:1;transform:scale(1)}}@keyframes confettiFall{0%{opacity:1;transform:translateY(-100%)rotate(0)}to{opacity:0;transform:translateY(100vh)rotate(720deg)}}@keyframes progressFill{0%{width:0%}}@keyframes heartbeat{0%,to{transform:scale(1)}25%{transform:scale(1.1)}50%{transform:scale(1)}75%{transform:scale(1.08)}}.home-header{padding:var(--space-xl) var(--space-lg);margin:calc(-1 * var(--space-lg));margin-bottom:var(--space-lg);background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid), var(--color-primary-end));border-radius:0 0 var(--radius-lg) var(--radius-lg);color:#fff;text-align:center;position:relative;box-shadow:0 4px 20px #ff6b6b40}.home-header h1{color:#fff;background:0 0;-webkit-background-clip:unset;-webkit-text-fill-color:#fff;background-clip:unset;text-shadow:0 2px 4px #0000001a;letter-spacing:.02em;margin-bottom:.25rem;font-size:1.75rem;font-weight:800}.home-header p{color:#ffffffd9;font-size:.95rem;font-weight:500}.home-header:after{content:"";pointer-events:none;background:#ffffff12;border-radius:50%;width:90px;height:90px;position:absolute;top:-30px;right:-20px}.home-header:before{content:"";pointer-events:none;background:#ffffff0d;border-radius:50%;width:60px;height:60px;position:absolute;bottom:-15px;left:-15px}.stats-row{gap:var(--space-sm);margin-bottom:var(--space-lg);grid-template-columns:repeat(3,1fr);animation:.5s fadeIn;display:grid}.stats-row .card{text-align:center;padding:var(--space-md);border-radius:var(--radius-md);background:var(--color-surface);box-shadow:var(--shadow-card);transition:transform .2s}.stats-row .card:hover{transform:translateY(-2px)}.stats-row .card__icon{margin-bottom:.25rem;font-size:1.5rem}.stats-row .card__number{background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-end));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:1.5rem;font-weight:800;line-height:1.2}.stats-row .card__label{color:var(--color-text-muted);font-size:.72rem;font-weight:500}.collection-card{background:var(--color-surface);border-radius:var(--radius-md);box-shadow:var(--shadow-card);margin-bottom:var(--space-md);animation:.4s slideUp;overflow:hidden}.collection-card__header{padding:var(--space-md) var(--space-lg);cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;transition:background-color .2s;display:flex}.collection-card__header:hover{background-color:#ff6b6b08}.collection-card__date{color:var(--color-text);align-items:center;gap:var(--space-sm);font-size:.95rem;font-weight:700;display:flex}.collection-card__date:before{content:"";background:linear-gradient(180deg, var(--color-primary-start), var(--color-primary-end));border-radius:2px;width:4px;height:20px}.collection-card__badge{border-radius:var(--radius-full);background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid));color:#fff;padding:.25em .7em;font-size:.75rem;font-weight:600}.collection-card__arrow{color:var(--color-text-muted);font-size:.85rem;transition:transform .3s}.collection-card--expanded .collection-card__arrow{transform:rotate(180deg)}.collection-grid{padding:0 var(--space-lg) var(--space-lg);grid-template-columns:repeat(3,1fr);gap:4px;animation:.3s fadeIn;display:grid}.collection-grid__thumb{aspect-ratio:1;object-fit:cover;border-radius:var(--radius-xs);cursor:pointer;width:100%;transition:transform .2s,box-shadow .2s;display:block}.collection-grid__thumb:hover{box-shadow:var(--shadow-md);transform:scale(1.05)}.fab{bottom:var(--space-lg);right:calc(50% - 240px + var(--space-lg));background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid));color:#fff;cursor:pointer;width:56px;height:56px;min-height:unset;z-index:99;-webkit-tap-highlight-color:transparent;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:1.5rem;transition:transform .2s,box-shadow .2s;display:flex;position:fixed;box-shadow:0 4px 16px #ff6b6b59}.fab:hover{transform:scale(1.08);box-shadow:0 6px 24px #ff6b6b73}.fab:active{transform:scale(.95)}.fab--breathe{animation:2s ease-in-out infinite breathe}.upload-zone{border:2px dashed var(--color-primary-start);border-radius:var(--radius-lg);text-align:center;cursor:pointer;margin-bottom:var(--space-xl);background-color:var(--color-surface);padding:2rem 1.5rem;transition:border-color .2s,background-color .2s,transform .2s;animation:.5s fadeIn}.upload-zone:hover{border-color:var(--color-primary-end);box-shadow:var(--shadow-sm);background-color:#ff6b6b08;transform:translateY(-2px)}.upload-zone:active{transform:scale(.98)}.upload-zone__icon{color:var(--color-primary-start);margin-bottom:.75rem;display:inline-block}.upload-zone__icon svg{filter:drop-shadow(0 2px 4px #ff6b6b33)}.upload-zone__text{color:var(--color-text);margin-bottom:.25rem;font-size:1.1rem;font-weight:700}.upload-zone__hint{color:var(--color-text-secondary);font-size:.85rem}.upload-zone__input{display:none}.home-section{margin-bottom:var(--space-xl);animation:.5s .15s both fadeIn}.home-section__title{color:var(--color-text);margin-bottom:var(--space-md);padding-bottom:var(--space-sm);border-bottom:2px solid var(--color-bg);align-items:center;gap:var(--space-sm);font-size:1.15rem;font-weight:700;display:flex}.home-section__loading{text-align:center;color:var(--color-text-secondary);padding:var(--space-xl) 0;font-size:.95rem}.photo-grid{gap:var(--space-sm);grid-template-columns:repeat(2,1fr);display:grid}.photo-card{border-radius:var(--radius-md);box-shadow:var(--shadow-card);background-color:var(--color-surface);aspect-ratio:1;transition:transform .2s,box-shadow .2s;animation:.3s scaleIn;position:relative;overflow:hidden}.photo-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px)}.photo-card__img{object-fit:cover;width:100%;height:100%;display:block}.photo-card__check{z-index:2;cursor:pointer;width:28px;height:28px;box-shadow:var(--shadow-xs);background:#fffffff2;border-radius:6px;justify-content:center;align-items:center;transition:transform .15s;display:flex;position:absolute;top:8px;left:8px}.photo-card__check:hover{transform:scale(1.1)}.photo-card__check input[type=checkbox]{cursor:pointer;width:16px;height:16px;min-height:16px;accent-color:var(--color-primary-start);flex-shrink:0;margin:0;padding:0}.photo-card__delete{z-index:2;color:#fff;cursor:pointer;width:28px;height:28px;min-height:28px;box-shadow:var(--shadow-xs);background:#e74c3ce6;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:1.1rem;font-weight:700;line-height:1;transition:background-color .2s,transform .15s;display:flex;position:absolute;top:8px;right:8px}.photo-card__delete:hover{background:#e74c3c;transform:scale(1.15)}.empty-state{text-align:center;color:var(--color-text-secondary);padding:2rem 1rem;animation:.5s fadeIn}.empty-state__icon{margin-bottom:var(--space-md);opacity:.7;font-size:3.5rem;animation:2s ease-in-out infinite heartbeat;display:block}.empty-state__text{font-size:.95rem;line-height:1.6}.merge-bar{width:100%;max-width:480px;height:var(--merge-bar-height);background-color:var(--color-surface);border-top:1px solid var(--color-border);padding:0 var(--space-lg);z-index:50;justify-content:center;align-items:center;display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%);box-shadow:0 -2px 12px #0000000d}.merge-bar__btn{border-radius:var(--radius-full);background:linear-gradient(135deg, var(--color-accent-blue), var(--color-accent-purple));color:#fff;min-height:44px;padding:.7em 2.5em;font-size:1.05rem;font-weight:700;transition:transform .2s,box-shadow .2s,opacity .2s}.merge-bar__btn:disabled{background:var(--color-border);color:var(--color-text-muted);box-shadow:none}.merge-bar--active .merge-bar__btn{background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-mid));animation:2.5s ease-in-out infinite breathe}.merge-bar--active .merge-bar__btn:hover{box-shadow:0 4px 20px #ff6b6b66}.home-page{padding-bottom:calc(var(--space-lg) + var(--merge-bar-height) + var(--space-sm))}.review-page{animation:.4s fadeIn}.review-progress{text-align:center;margin-bottom:var(--space-md);position:relative}.review-progress__bar{background-color:var(--color-border);width:100%;height:6px;margin-bottom:var(--space-xs);border-radius:3px;overflow:hidden}.review-progress__bar-fill{background:linear-gradient(90deg, var(--color-primary-start), var(--color-primary-mid), var(--color-primary-end));border-radius:3px;height:100%;transition:width .4s;animation:.6s progressFill}.review-progress__text{color:var(--color-text-secondary);font-size:.85rem;font-weight:600}.review-progress__text span{background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-end));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-weight:800}.review-actions{margin-top:var(--space-md);flex-wrap:wrap;justify-content:center;gap:.75rem;display:flex}.review-actions button{border-radius:var(--radius-full);padding:.6em 1.8em;font-size:.95rem;font-weight:700}.review-actions button:first-child{background:var(--color-surface);color:var(--color-accent-blue);border:2px solid var(--color-accent-blue);box-shadow:none}.review-actions button:first-child:hover{background:#54a0ff0d}.review-actions button:nth-child(2){background:linear-gradient(135deg, var(--color-accent-green), #7bed9f);color:#fff}.review-actions button:nth-child(2):hover{box-shadow:0 4px 16px #2ed57359}.review-actions button:nth-child(3){background:var(--color-surface);color:var(--color-text-secondary);border:2px solid var(--color-border);box-shadow:none}.review-actions button:nth-child(3):hover{border-color:var(--color-text-muted)}.review-completion{text-align:center;padding-top:3rem;animation:.6s cubic-bezier(.68,-.55,.265,1.55) celebratePop}.review-completion__icon{margin-bottom:var(--space-md);font-size:4rem;animation:1.5s ease-in-out infinite heartbeat;display:block}.review-completion h1{margin-bottom:var(--space-sm);background:linear-gradient(135deg, var(--color-accent-green), var(--color-accent-blue));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:1.5rem;font-weight:800}.review-completion p{color:var(--color-text-secondary);margin-bottom:var(--space-xl);font-size:1rem}.review-completion button{border-radius:var(--radius-full);padding:.75em 2.5em;font-size:1.05rem}.review-completion__stats{justify-content:center;gap:var(--space-xl);margin-bottom:var(--space-xl);display:flex}.review-completion__stat{text-align:center}.review-completion__stat-number{background:linear-gradient(135deg, var(--color-primary-start), var(--color-primary-end));-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:2rem;font-weight:800}.review-completion__stat-label{color:var(--color-text-muted);font-size:.8rem;font-weight:600}.review-page .card{margin-bottom:var(--space-md);padding:var(--space-sm);overflow:hidden}.review-page .card canvas{border-radius:var(--radius-sm);max-width:100%;height:auto;margin:0 auto;display:block}.merge-page{animation:.4s fadeIn}.merge-page h1{margin-bottom:0}.merge-page .merge-download-btn,button.merge-download-btn{border-radius:var(--radius-full);background:linear-gradient(135deg, var(--color-accent-blue), var(--color-accent-purple));color:#fff;padding:.85em 2.8em;font-size:1.15rem;font-weight:700;transition:transform .2s,box-shadow .2s;box-shadow:0 4px 16px #54a0ff4d}.merge-page .merge-download-btn:hover,button.merge-download-btn:hover{transform:translateY(-2px);box-shadow:0 6px 24px #54a0ff66}.merge-page .canvas-wrapper{border:2px solid var(--color-border);border-radius:var(--radius-md);background-color:var(--color-surface);box-shadow:var(--shadow-card);max-height:60vh;overflow:auto}.merge-page .canvas-wrapper canvas{max-width:100%;height:auto;display:block}.merge-page__back-row{align-items:center;gap:var(--space-md);margin-bottom:var(--space-lg);display:flex}@media (width<=480px){.page{padding:var(--space-md);padding-bottom:var(--space-md)}.home-header{margin:calc(-1 * var(--space-md));margin-bottom:var(--space-md);padding:var(--space-lg) var(--space-md);border-radius:0 0 var(--radius-md) var(--radius-md)}.home-header h1{font-size:1.45rem}.home-header p{font-size:.85rem}.stats-row{grid-template-columns:repeat(3,1fr);gap:6px}.stats-row .card{padding:var(--space-sm)}.stats-row .card__number{font-size:1.3rem}.stats-row .card__label{font-size:.68rem}.photo-grid{grid-template-columns:repeat(2,1fr);gap:8px}.collection-grid{padding:0 var(--space-md) var(--space-md);grid-template-columns:repeat(3,1fr);gap:3px}.upload-zone{border-radius:var(--radius-md);padding:1.5rem 1rem}.review-actions{gap:.5rem}.review-actions button{padding:.55em 1.2em;font-size:.9rem}.review-completion__stats{gap:var(--space-md)}.review-completion__stat-number{font-size:1.5rem}.merge-bar{padding:0 var(--space-md)}.merge-bar__btn{padding:.6em 1.8em;font-size:.95rem}.fab{right:var(--space-md);width:50px;height:50px;font-size:1.3rem}}@media (width<=360px){html{font-size:14px}.page{padding:var(--space-sm);padding-bottom:var(--space-sm)}.home-header{margin:calc(-1 * var(--space-sm));margin-bottom:var(--space-sm);padding:var(--space-md);border-radius:0 0 var(--radius-sm) var(--radius-sm)}.home-header h1{font-size:1.25rem}.home-header p{font-size:.78rem}.stats-row{grid-template-columns:repeat(3,1fr);gap:4px}.stats-row .card{padding:8px 4px}.stats-row .card__number{font-size:1.15rem}.stats-row .card__label{font-size:.62rem}.photo-grid{grid-template-columns:repeat(2,1fr);gap:6px}.photo-card__check{width:24px;height:24px;top:4px;left:4px}.photo-card__delete{width:24px;height:24px;min-height:24px;font-size:.9rem;top:4px;right:4px}.collection-grid{padding:0 var(--space-sm) var(--space-sm);grid-template-columns:repeat(2,1fr);gap:3px}.collection-card__header{padding:var(--space-sm) var(--space-md)}.collection-card__date{font-size:.85rem}.upload-zone{padding:1.25rem .75rem}.upload-zone__text{font-size:.95rem}.upload-zone__hint{font-size:.75rem}.card{padding:var(--space-md)}.review-actions{gap:.4rem}.review-actions button{min-height:40px;padding:.5em 1em;font-size:.85rem}.review-completion__stats{gap:var(--space-sm)}.review-completion__stat-number{font-size:1.3rem}.review-completion__icon{font-size:3rem}button{min-height:40px;padding:.5em 1.2em;font-size:.9rem}.merge-bar__btn{padding:.5em 1.5em;font-size:.85rem}.fab{width:44px;height:44px;right:var(--space-sm);font-size:1.15rem}}
