/* ArtMap — liquid glass design system (ref: desgin.md) */
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
body{
  font-family:'Helvetica Neue Light','Helvetica Neue',Helvetica,'Noto Sans SC','PingFang SC','Hiragino Sans GB','Microsoft YaHei',Arial,sans-serif;
  background:#c2ccd3;color:#000;min-height:100vh;overflow-x:hidden;
}
::selection{background:rgba(0,0,0,.85);color:#fff}
a{color:inherit}

/* ---------- background video ---------- */
.bg-video{position:fixed;top:0;left:0;display:block;width:100%;height:100%;object-fit:cover;z-index:0;opacity:1;pointer-events:none}
.glass-defs{position:absolute;width:0;height:0;pointer-events:none}

/* ---------- vertical rules (desktop) ---------- */
.rule{position:fixed;top:0;bottom:0;display:none;flex-direction:column;align-items:center;z-index:1;pointer-events:none}
.rule--left{left:1.25rem}
.rule--right{right:1.25rem}
.rule__seg{width:1px;background:rgba(0,0,0,.2)}
.rule__seg--end{height:15%}
.rule__seg--mid{flex:1 1 0%}
.rule__plus{font-size:.75rem;line-height:1;color:rgba(0,0,0,.4);padding:.25rem 0}
@media(min-width:768px){.rule{display:flex}}

/* ---------- layout ---------- */
.page{position:relative;z-index:10;min-height:100vh;display:flex;flex-direction:column}
.wrap{width:100%;max-width:1080px;margin:0 auto;padding:0 1.25rem 4rem;position:relative;z-index:2;flex:1}
.topbar{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:1.25rem}
.topbar__left{display:flex;align-items:center;gap:.875rem}
.topbar__actions{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}
.logo{width:44px;height:44px;border-radius:14px;display:block}
.topbar__name{font-size:1.125rem;font-weight:500;letter-spacing:-.025em}
.page-title{font-size:1.375rem;font-weight:500;letter-spacing:-.025em}
.navlink{font-size:.875rem;text-decoration:none;color:rgba(0,0,0,.7);transition:opacity 300ms,color 300ms;cursor:pointer;background:none;border:0;font:inherit}
.navlink:hover{opacity:.6}
.icon{flex:none}

@media(min-width:640px){.topbar{padding:1.25rem 1.5rem}}
@media(min-width:768px){.topbar{padding:1.5rem 3rem}}

/* ---------- chamfer button ---------- */
.chamfer{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;width:220px;height:44px;padding:0 1.25rem;color:#000;text-decoration:none;cursor:pointer;border:0;background:none;font:inherit;font-size:.75rem;letter-spacing:.025em;transition:opacity 300ms}
.chamfer:hover{opacity:.7}
.chamfer__glass{position:absolute;inset:0;background:rgba(255,255,255,.6);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(0,0,0,.2);clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px)}
.chamfer__outline{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.chamfer__label{position:relative}
.chamfer .icon{position:relative}
.chamfer--solid{color:#fff}
.chamfer--solid .chamfer__glass{background:#000;border-color:#000}
.chamfer--block{width:100%}
@media(min-width:640px){
  .chamfer{width:260px;height:48px;padding:0 1.5rem;font-size:.875rem}
  .chamfer--ghost .chamfer__glass{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border-color:transparent}
}

/* ---------- glass panel ---------- */
.glass{position:relative;background:rgba(255,255,255,.5);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);border:1px solid rgba(47,47,47,.15);border-radius:32px;box-shadow:inset 0 1.5px 2px rgba(255,255,255,.5),inset 0 -1px 2px rgba(0,0,0,.1),0 8px 32px rgba(0,0,0,.06)}

/* refraction duplicate layers (driven by glass.js) */
.glass-dup{position:absolute;left:0;top:0;z-index:0;overflow:hidden;pointer-events:none}
.glass-dup__canvas{position:absolute;inset:0;width:100%;height:100%;filter:url(#liquid-glass-refraction)}

/* ---------- pills ---------- */
.pill{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.625rem .875rem;border-radius:9999px;font-size:.8125rem;font-weight:500;text-decoration:none;cursor:pointer;border:1px solid rgba(47,47,47,.18);background:rgba(255,255,255,.55);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:#000;transition:background .2s,color .2s,border-color .2s,transform .2s;font-family:inherit}
.pill:hover{background:rgba(255,255,255,.9)}
.pill--ink{background:#000;color:#fff;border-color:#000}
.pill--ink:hover{background:rgba(0,0,0,.85)}
.pill--icon{padding:0;width:38px;height:38px;flex:none}
.pill--sm{padding:.5rem .75rem;font-size:.75rem}

/* ---------- forms ---------- */
.input{width:100%;padding:.875rem 1rem;border-radius:14px;border:1px solid rgba(0,0,0,.15);background:rgba(255,255,255,.55);font:inherit;font-size:1rem;outline:none;transition:border .2s,background .2s;color:#000}
.input:focus{border-color:rgba(0,0,0,.55);background:rgba(255,255,255,.85)}
.input::placeholder{color:rgba(0,0,0,.35)}
.form-error{color:#ff3b30;font-size:.8125rem;margin-bottom:.75rem}
.field-label{display:block;font-size:.75rem;letter-spacing:.05em;color:rgba(0,0,0,.45);margin-bottom:.375rem}

/* ---------- hero (welcome) ---------- */
.hero{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:3rem 1.25rem 2rem;position:relative;z-index:2}
.hero__logo{width:80px;height:80px;border-radius:22px;margin-bottom:1.5rem;animation:rise .9s cubic-bezier(.16,1,.3,1) both}
.hero__title{font-size:2.5rem;font-weight:300;letter-spacing:-.03em;line-height:1.1;animation:rise .9s cubic-bezier(.16,1,.3,1) .08s both}
.hero__sub{margin-top:1rem;font-size:1.125rem;color:rgba(0,0,0,.6);animation:rise .9s cubic-bezier(.16,1,.3,1) .16s both}
.hero__desc{margin-top:.75rem;max-width:34rem;font-size:.875rem;line-height:1.7;color:rgba(0,0,0,.55);animation:rise .9s cubic-bezier(.16,1,.3,1) .16s both}
.hero__actions{display:flex;gap:1rem;flex-wrap:wrap;justify-content:center;margin-top:2.5rem;animation:rise .9s cubic-bezier(.16,1,.3,1) .24s both}
.hero__wave{display:block;width:220px;max-width:60vw;height:auto;margin-top:3rem;opacity:.8;animation:rise .9s cubic-bezier(.16,1,.3,1) .32s both}
@media(min-width:640px){.hero__title{font-size:3.5rem}.hero__sub{font-size:1.375rem}}
@media(min-width:1024px){.hero__title{font-size:4rem}}

/* ---------- features ---------- */
.features{max-width:56rem;margin:0 auto;padding:0 1.25rem 4rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem;position:relative;z-index:2}
.feature{padding:2rem;text-align:center;transition:transform .3s,box-shadow .3s}
.feature:hover{transform:translateY(-4px);box-shadow:inset 0 1.5px 2px rgba(255,255,255,.5),inset 0 -1px 2px rgba(0,0,0,.1),0 16px 48px rgba(0,0,0,.12)}
.feature svg{width:36px;height:36px;margin-bottom:1rem;opacity:.75}
.feature h3{font-size:1rem;font-weight:600;letter-spacing:-.025em;margin-bottom:.5rem}
.feature p{font-size:.8125rem;line-height:1.625;color:rgba(0,0,0,.55)}

/* ---------- footer ---------- */
.foot{position:relative;z-index:2;text-align:center;padding:2.5rem 1.25rem 3rem;font-size:.8125rem;color:rgba(0,0,0,.5)}
.foot .navlink{color:rgba(0,0,0,.55)}
.foot p+p{margin-top:.5rem}

/* ---------- auth (login) ---------- */
.auth{flex:1;display:flex;align-items:center;justify-content:center;padding:2.5rem 1.25rem;position:relative;z-index:2}
.auth-card{width:100%;max-width:400px;padding:2.5rem 2rem;text-align:center;overflow:hidden;border-radius:48px;animation:rise .9s cubic-bezier(.16,1,.3,1) both}
.auth-card>:not(.glass-dup){position:relative;z-index:1}
.auth-logo{width:64px;height:64px;border-radius:18px;margin-bottom:1.25rem}
.auth-card h1{font-size:1.5rem;font-weight:500;letter-spacing:-.025em;margin-bottom:.375rem}
.auth-sub{font-size:.8125rem;color:rgba(0,0,0,.55);margin-bottom:1.5rem}
.auth-card form{display:flex;flex-direction:column;gap:.875rem}
.auth-back{display:inline-block;margin-top:1.5rem;font-size:.8125rem;color:rgba(0,0,0,.5)}

/* ---------- projects ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.25rem;margin-top:.5rem}
.card{padding:1.5rem;display:flex;flex-direction:column;gap:.75rem;transition:transform .3s,box-shadow .3s,opacity .3s;animation:rise .9s cubic-bezier(.16,1,.3,1) both}
.card:hover{transform:translateY(-4px);box-shadow:inset 0 1.5px 2px rgba(255,255,255,.5),inset 0 -1px 2px rgba(0,0,0,.1),0 16px 48px rgba(0,0,0,.12)}
.card.paused{opacity:.45}
.card.paused:hover{transform:none;box-shadow:inset 0 1.5px 2px rgba(255,255,255,.5),inset 0 -1px 2px rgba(0,0,0,.1),0 8px 32px rgba(0,0,0,.06)}
.card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}
.card__name{font-size:1rem;font-weight:600;letter-spacing:-.025em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.card__meta{font-size:.75rem;color:rgba(0,0,0,.5)}
/* actions: uniform horizontal pill grid, two rows; labels never wrap */
.card__actions{display:grid;grid-template-columns:repeat(6,1fr);gap:.5rem;margin-top:auto;padding-top:.5rem}
.card__actions .pill{height:36px;min-width:0;padding:0 .25rem;font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-flex;align-items:center;justify-content:center}
.card__actions .pill--span2{grid-column:span 2}
.card__actions .pill--span3{grid-column:span 3}
.badge{display:inline-flex;align-items:center;gap:.375rem;flex:none;padding:.25rem .625rem;border-radius:9999px;font-size:.6875rem;letter-spacing:.05em;border:1px solid rgba(0,0,0,.15);color:rgba(0,0,0,.6);background:rgba(255,255,255,.4)}
.badge__dot{width:6px;height:6px;border-radius:50%;background:#ff9500}

/* dropdown — opens upward, stays inside its own card */
.dropdown{position:relative;grid-column:span 1}
.dropdown-menu{display:none;position:absolute;right:0;bottom:calc(100% + 6px);background:rgba(255,255,255,.8);backdrop-filter:blur(24px) saturate(160%);-webkit-backdrop-filter:blur(24px) saturate(160%);border:1px solid rgba(47,47,47,.15);border-radius:16px;box-shadow:0 12px 40px rgba(0,0,0,.14);z-index:100;min-width:124px;overflow:hidden;padding:.25rem}
.dropdown-menu.show{display:block}
.dropdown-item{width:100%;padding:.5rem .75rem;text-align:left;background:none;border:0;border-radius:10px;font-size:.8125rem;font-weight:500;cursor:pointer;color:#000;display:flex;align-items:center;gap:.5rem;font-family:inherit;transition:background .2s}
.dropdown-item:hover{background:rgba(0,0,0,.06)}
.dropdown-item--danger{color:rgba(255,59,48,.75)}
.dropdown-item--danger:hover{background:rgba(255,59,48,.08);color:#ff3b30}
.chevron-down{width:8px;height:8px;border-right:2.2px solid currentColor;border-bottom:2.2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s;display:block}
.dropdown.open .chevron-down{transform:translateY(1px) rotate(-135deg)}

/* empty state */
.empty{text-align:center;padding:4.5rem 1.25rem;color:rgba(0,0,0,.5)}
.empty svg{width:64px;height:64px;margin-bottom:1.25rem;opacity:.35}
.empty p{font-size:.9375rem}

/* ---------- modal ---------- */
.modal{position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;background:rgba(255,255,255,.25);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);padding:1.25rem}
.modal.show{display:flex}
.modal__panel{background:rgba(255,255,255,.6);backdrop-filter:blur(28px) saturate(180%);-webkit-backdrop-filter:blur(28px) saturate(180%);border:1px solid rgba(255,255,255,.65);border-radius:20px;box-shadow:inset 0 2px 3px rgba(255,255,255,.6),inset 0 -2px 4px rgba(0,0,0,.08),0 24px 64px rgba(0,0,0,.18);padding:2rem;width:100%;max-width:360px;text-align:center;animation:pop .35s cubic-bezier(.16,1,.3,1) both}
.modal__panel h3{font-size:1.125rem;font-weight:600;letter-spacing:-.025em;margin-bottom:.75rem}
.modal__panel .modal-sub{color:rgba(0,0,0,.55);font-size:.8125rem;margin-bottom:.5rem}
.modal__panel .input{margin:1rem 0;text-align:left}
.modal__btns{display:flex;gap:.75rem}
.modal__btns .pill{flex:1;padding:.75rem}
.modal__panel .input{margin:1rem 0}
.modal__btns{display:flex;gap:.75rem}
.modal__btns .pill{flex:1;padding:.75rem}

/* ---------- toast — light liquid glass, same system as cards ---------- */
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-20px);background:rgba(255,255,255,.55);color:#000;padding:12px 24px;border-radius:980px;border:1px solid rgba(47,47,47,.15);font-size:.875rem;font-weight:500;opacity:0;transition:all .4s cubic-bezier(.25,1,.5,1);z-index:200;backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);box-shadow:inset 0 1.5px 2px rgba(255,255,255,.5),inset 0 -1px 2px rgba(0,0,0,.1),0 8px 32px rgba(0,0,0,.08);display:flex;align-items:center;gap:8px;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast .icon{width:20px;height:20px;flex-shrink:0}

/* ---------- upload ---------- */
.drop{padding:3.5rem 2rem;text-align:center;cursor:pointer;transition:border-color .3s,background .3s,transform .3s;position:relative;overflow:hidden}
.drop:hover,.drop.drag{background:rgba(255,255,255,.72);transform:translateY(-2px)}
.drop svg.drop__icon{width:44px;height:44px;margin-bottom:1rem;opacity:.7}
.drop h2{font-size:1.125rem;font-weight:600;letter-spacing:-.025em;margin-bottom:.375rem}
.drop p{color:rgba(0,0,0,.55);font-size:.8125rem}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.tips{margin-top:1rem;padding:1rem 1.25rem;font-size:.8125rem;color:rgba(0,0,0,.6);line-height:1.7;display:flex;gap:.625rem;align-items:flex-start}
.tips svg{width:18px;height:18px;flex:none;margin-top:2px;opacity:.6}
.tips code{background:rgba(0,0,0,.07);padding:2px 6px;border-radius:4px;font-size:.75rem}
.panel{margin-top:1.5rem;padding:1.5rem}
.panel h3{font-size:1rem;font-weight:600;letter-spacing:-.025em;margin-bottom:.75rem}
.bar{height:6px;background:rgba(0,0,0,.08);border-radius:3px;overflow:hidden;margin-top:1rem}
.bar-fill{height:100%;background:#000;border-radius:3px;transition:width .3s;width:0}
.link-box{display:flex;gap:.625rem;margin:.5rem 0 .75rem}
.link-box input{flex:1;padding:.75rem .875rem;border:1px solid rgba(0,0,0,.15);border-radius:12px;font-size:.8125rem;background:rgba(255,255,255,.6);outline:none;color:#000;min-width:0}
.result-text{margin-top:1rem;text-align:center}
.result-text .navlink{color:#000;text-decoration:underline;text-underline-offset:4px}

/* ---------- feedback ---------- */
.contact-card{padding:2.5rem;text-align:center}
.contact-card h2{font-size:1.25rem;font-weight:600;letter-spacing:-.025em;margin-bottom:1.5rem}
.contact-item{margin:1.25rem 0}
.contact-item a{font-size:1.0625rem;color:#000;text-decoration:underline;text-underline-offset:5px;transition:opacity .2s}
.contact-item a:hover{opacity:.6}
.note{margin-top:2rem;padding-top:1.5rem;border-top:1px solid rgba(0,0,0,.1);font-size:.8125rem;color:rgba(0,0,0,.5);line-height:1.8}

/* ---------- pause page ---------- */
.pause{position:relative;z-index:10;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:6rem 1.5rem}
.pause__kicker{font-size:.75rem;letter-spacing:.25em;text-transform:uppercase;color:rgba(0,0,0,.4);margin-bottom:2rem;animation:rise .9s cubic-bezier(.16,1,.3,1) both}
.pause__title{font-size:clamp(28px,6.8vw,110px);font-weight:300;line-height:1.15;letter-spacing:-.02em;color:#000;animation:rise .9s cubic-bezier(.16,1,.3,1) .1s both}
.pause__sub{margin-top:1.4em;font-size:clamp(11px,2.04vw,33px);font-weight:300;color:rgba(0,0,0,.6);line-height:1.8;animation:rise .9s cubic-bezier(.16,1,.3,1) .22s both}
.pause__contact{color:#000;text-decoration:underline;text-underline-offset:.35em;text-decoration-thickness:1px;cursor:pointer;transition:opacity .2s}
.pause__contact:hover{opacity:.6}

/* pause dialog: light frosted outside, deep liquid glass inside */
.pdialog{position:fixed;inset:0;z-index:50;display:none;align-items:center;justify-content:center;background:rgba(255,255,255,.3);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);padding:1.25rem}
.pdialog.show{display:flex}
.pdialog__panel{position:relative;overflow:hidden;border-radius:20px;width:100%;max-width:380px;padding:2.5rem 2rem;text-align:center;background:rgba(255,255,255,.55);backdrop-filter:blur(28px) saturate(180%);-webkit-backdrop-filter:blur(28px) saturate(180%);border:1px solid rgba(255,255,255,.6);box-shadow:inset 0 2px 3px rgba(255,255,255,.65),inset 0 -2px 4px rgba(0,0,0,.08),0 24px 64px rgba(0,0,0,.2);animation:pop .35s cubic-bezier(.16,1,.3,1) both}
.pdialog__inner{position:relative;z-index:1}
.pdialog__label{font-size:.75rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(0,0,0,.45);margin-bottom:1rem}
.pdialog__mail{font-size:1.125rem;font-weight:500;letter-spacing:-.01em;margin-bottom:1.75rem;word-break:break-all}
.pdialog__actions{display:flex;gap:.75rem;justify-content:center}
.pdialog__actions .pill{padding:.625rem 1.25rem}

/* ---------- animations ---------- */
@keyframes rise{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
@keyframes pop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
.rise{animation:rise .9s cubic-bezier(.16,1,.3,1) both}
.rise-1{animation-delay:.08s}
.rise-2{animation-delay:.16s}
.rise-3{animation-delay:.24s}

@media(prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important}}
