/* ImageHub Public Design System (03_PUBLIC_DESIGN_SYSTEM §3-5).
   One stylesheet for every public page. Design tokens first, then components;
   pages must use these tokens — no random per-page values. Palette and
   typography follow the previous public surface (restrained SaaS-tool style,
   light + dark via prefers-color-scheme). */

:root{
  /* type */
  --font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
  --font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --text-xs:12px;--text-sm:13.5px;--text-md:15px;--text-lg:17px;
  --text-xl:22px;--text-2xl:30px;--text-3xl:40px;
  --leading:1.65;--leading-tight:1.25;
  /* layout */
  --container:1080px;--container-narrow:780px;
  --space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;
  --space-5:24px;--space-6:32px;--space-7:48px;--space-8:72px;
  /* shape */
  --radius-sm:8px;--radius-md:10px;--radius-lg:14px;
  --border:1px solid var(--line);
  /* surfaces & lines */
  --bg:#f5f6f8;--surface:#fff;--surface-2:#fafbfc;
  --line:#e5e7eb;--line-2:#eff0f3;
  /* text */
  --text-1:#15171c;--text-2:#5a6070;--text-3:#98a0ae;
  /* primary & states */
  --primary:#2f6bf6;--primary-hover:#1d54d8;--primary-soft:#eef3ff;
  --ok:#0f9d58;--warn:#b45309;--danger:#d93025;
  --shadow-md:0 1px 2px rgba(16,20,32,.05),0 10px 28px -14px rgba(16,20,32,.18);
}
@media (prefers-color-scheme:dark){:root{
  --bg:#0f1115;--surface:#171a20;--surface-2:#1c2027;
  --line:#2a2f38;--line-2:#23272f;
  --text-1:#eff1f4;--text-2:#a7adb9;--text-3:#737a87;
  --primary:#5b8cff;--primary-hover:#7ba3ff;--primary-soft:#1a2436;
  --ok:#3ecf8e;--warn:#e0a54c;--danger:#ff6b60;
  --shadow-md:0 1px 2px rgba(0,0,0,.5),0 10px 28px -14px rgba(0,0,0,.6);
}}

*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text-1);font:var(--text-md)/var(--leading) var(--font-sans);-webkit-font-smoothing:antialiased}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%}
h1,h2,h3{line-height:var(--leading-tight);letter-spacing:-.01em}
h1{font-size:var(--text-3xl);font-weight:680;margin:0 0 var(--space-3)}
h2{font-size:var(--text-xl);font-weight:640;margin:var(--space-7) 0 var(--space-3)}
h3{font-size:var(--text-lg);font-weight:600;margin:var(--space-5) 0 var(--space-2)}
code{font-family:var(--font-mono)}

/* ---- layout containers ---- */
.p-container{max-width:var(--container);margin:0 auto;padding:0 22px}
.p-container--narrow{max-width:var(--container-narrow)}
main{padding:var(--space-7) 0 var(--space-8)}
.p-section{margin:var(--space-8) 0}
.p-section:first-child{margin-top:0}
.p-section__head{margin-bottom:var(--space-4)}
.p-section__body{color:var(--text-2);font-size:var(--text-md);margin:0 0 var(--space-4);max-width:680px}
.p-eyebrow{font-size:var(--text-xs);font-weight:600;color:var(--primary);text-transform:uppercase;letter-spacing:.08em;margin:0 0 var(--space-2)}

/* ---- header / nav ---- */
.p-header{position:sticky;top:0;z-index:30;background:var(--surface);border-bottom:var(--border)}
.p-header__in{display:flex;align-items:center;gap:20px;height:58px}
.p-brand{display:inline-flex;align-items:center;gap:9px;font-weight:650;font-size:var(--text-md);letter-spacing:-.01em;color:var(--text-1);flex:none}
.p-brand:hover{text-decoration:none}
.p-brand__mark{width:26px;height:26px;border-radius:8px;background:var(--primary);color:#fff;display:grid;place-items:center;flex:none;font-weight:700;font-size:15px}
.p-brand__logo{width:26px;height:26px;border-radius:8px;object-fit:cover;flex:none}
.p-nav{display:flex;gap:2px;flex-wrap:wrap;font-size:var(--text-sm);min-width:0}
.p-nav a{padding:6px 9px;border-radius:var(--radius-sm);color:var(--text-2)}
.p-nav a:hover{background:var(--surface-2);color:var(--text-1);text-decoration:none}
.p-nav a.is-current{background:var(--primary-soft);color:var(--primary);font-weight:550}
.p-header__right{margin-left:auto;display:flex;gap:10px;align-items:center;flex:none}

/* ---- buttons ---- */
.p-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid transparent;border-radius:var(--radius-md);padding:8px 14px;font:inherit;font-size:var(--text-sm);font-weight:500;line-height:1.4;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s,color .15s;text-decoration:none}
.p-btn:hover{text-decoration:none}
.p-btn--primary{background:var(--primary);color:#fff}
.p-btn--primary:hover{background:var(--primary-hover);color:#fff}
.p-btn--ghost{border-color:var(--line);background:var(--surface);color:var(--text-2)}
.p-btn--ghost:hover{border-color:var(--text-3);color:var(--text-1)}
.p-btn--lg{padding:11px 20px;font-size:var(--text-md);border-radius:var(--radius-md)}
.p-btn--sm{padding:5px 10px;font-size:var(--text-xs);border-radius:var(--radius-sm)}
.p-btn.is-ok{color:var(--ok);border-color:var(--ok);background:var(--surface)}
.p-btn.is-err{color:var(--danger);border-color:var(--danger);background:var(--surface)}

/* ---- hero ---- */
.p-hero{padding:var(--space-6) 0 var(--space-5)}
.p-hero--center{text-align:center}
.p-hero--center .p-hero__sub{margin-left:auto;margin-right:auto}
.p-hero__sub{font-size:var(--text-lg);color:var(--text-2);margin:0 0 var(--space-5);max-width:640px}

/* ---- uploader (Product Component: image_upload) ---- */
.p-up{margin:0 0 6px}
.p-up__drop{border:1.5px dashed var(--line);border-radius:var(--radius-lg);background:var(--surface);padding:40px 22px 32px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s}
.p-up__drop:hover,.p-up__drop.is-drag{border-color:var(--primary);background:var(--primary-soft)}
.p-up__icon{width:48px;height:48px;margin:0 auto 14px;border-radius:50%;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center}
.p-up__drop:hover .p-up__icon,.p-up__drop.is-drag .p-up__icon{background:var(--surface)}
.p-up__title{font-size:var(--text-lg);font-weight:600;margin:0 0 4px}
.p-up__sub{font-size:var(--text-sm);color:var(--text-3);margin:0 0 16px}
.p-up__limit{font-size:var(--text-xs);color:var(--text-3);margin:12px 0 0}
.p-up__msg{font-size:var(--text-sm);margin:10px 0 0;color:var(--text-2)}
.p-up__msg.ok{color:var(--ok)}
.p-up__msg.err{color:var(--danger)}
.p-up__list{margin:14px 0 0;display:flex;flex-direction:column;gap:10px}
.p-up__queue{margin:12px 0 0;display:flex;flex-direction:column;gap:8px}
.p-up__qitem{display:flex;align-items:center;gap:10px;font-size:var(--text-sm);color:var(--text-2)}
.p-up__qitem .bar{flex:1}
.p-up__qitem.is-err{color:var(--danger)}
.bar{height:4px;border-radius:999px;background:var(--line-2);overflow:hidden}
.bar i{display:block;height:100%;width:0;background:var(--primary);transition:width .2s}
.spin{width:18px;height:18px;flex:none;border:2px solid var(--line);border-top-color:var(--primary);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.p-up__mine{margin:26px 0 0;border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:14px 16px 16px}
.p-up__mine-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.p-up__mine-head b{font-size:var(--text-sm);font-weight:600}
.p-up__mine-head span{font-size:var(--text-xs);color:var(--text-3);margin-right:auto}
.p-up__mine-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px}
.p-up__cell{position:relative;aspect-ratio:1;border-radius:var(--radius-md);overflow:hidden;border:var(--border);background:var(--surface-2)}
.p-up__cell img{width:100%;height:100%;object-fit:cover;display:block}
.p-up__cell button{position:absolute;top:5px;right:5px;width:22px;height:22px;padding:0;border:none;border-radius:50%;background:rgba(12,14,18,.62);color:#fff;font-size:14px;line-height:1;cursor:pointer;display:grid;place-items:center;opacity:0;transition:opacity .15s}
.p-up__cell:hover button{opacity:1}

/* ---- result item ---- */
.p-result{display:flex;gap:12px;align-items:flex-start;border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:12px}
.p-result__box{width:58px;height:58px;flex:none;border-radius:var(--radius-md);overflow:hidden;background:var(--surface-2);display:grid;place-items:center;color:var(--text-3);font-size:18px;font-weight:600}
.p-result__box.is-err{color:var(--danger)}
.p-result__box img{width:100%;height:100%;object-fit:cover;display:block}
.p-result__main{flex:1;min-width:0}
.p-result__name{font-size:var(--text-sm);font-weight:500;margin:0 0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.p-result__links{display:flex;flex-direction:column;gap:6px}
.p-result__row{display:flex;align-items:center;gap:8px;min-width:0}
.p-result__row>span{font-size:var(--text-xs);color:var(--text-3);flex:none;width:66px}
.p-result__row code{flex:1;min-width:0;font-size:var(--text-xs);color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}
.p-result__row code.is-err{color:var(--danger);white-space:normal}
.p-result__ops{flex:none;display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}

/* ---- cards & grids ---- */
.p-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));align-items:start;gap:16px}
.p-card{display:block;border:var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface);transition:box-shadow .18s,transform .18s;color:inherit}
.p-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);text-decoration:none}
/* height:auto is load-bearing: <img> also carries width/height attrs; a
   presentational height would defeat aspect-ratio (portrait blowout). */
.p-card img{width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;display:block;background:var(--surface-2)}
.p-card .cap{display:block;padding:9px 11px;font-size:var(--text-xs);color:var(--text-2);border-top:1px solid var(--line-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---- features / steps / faq / cta ---- */
.p-features{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
.p-feature{border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:18px}
.p-feature__icon{font-size:22px;margin-bottom:8px}
.p-feature b{display:block;font-size:var(--text-md);font-weight:600;margin-bottom:4px}
.p-feature p{margin:0;font-size:var(--text-sm);color:var(--text-2)}
.p-steps{counter-reset:step;list-style:none;margin:0;padding:0;display:grid;gap:12px}
.p-steps li{counter-increment:step;display:flex;gap:14px;align-items:flex-start;border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:14px 16px}
.p-steps li::before{content:counter(step);flex:none;width:28px;height:28px;border-radius:50%;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-weight:650;font-size:14px}
.p-steps b{display:block;font-size:var(--text-sm);font-weight:600;margin-bottom:2px}
.p-steps p{margin:0;font-size:var(--text-sm);color:var(--text-2)}
.p-faq{border-top:var(--border)}
.p-faq details{border-bottom:var(--border)}
.p-faq summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 0;font-size:var(--text-md);font-weight:600}
.p-faq summary::-webkit-details-marker{display:none}
.p-faq summary::after{content:"+";color:var(--text-3);font-weight:400;font-size:18px;flex:none}
.p-faq details[open] summary::after{content:"–"}
.p-faq .a{margin:0 0 15px;font-size:var(--text-sm);color:var(--text-2);max-width:720px}
.p-cta{border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:var(--space-6);text-align:center}
.p-cta h2{margin:0 0 var(--space-2)}
.p-cta p{margin:0 auto var(--space-4);color:var(--text-2);max-width:560px}
.p-cta__btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

/* ---- link format examples ---- */
.p-formats{border:var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface)}
.p-formats .row{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:12px;align-items:center;padding:9px 14px;border-top:1px solid var(--line-2)}
.p-formats .row:first-child{border-top:none}
.p-formats .row>span{font-size:var(--text-xs);color:var(--text-3)}
.p-formats code{font-size:var(--text-xs);color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}

/* ---- prose (rendered markdown) ---- */
.p-prose{font-size:var(--text-md);color:var(--text-2);max-width:var(--container-narrow)}
.p-prose h2,.p-prose h3{color:var(--text-1)}
.p-prose ul,.p-prose ol{padding-left:22px;margin:0 0 var(--space-4)}
.p-prose li{margin-bottom:6px}
.p-prose a{color:var(--primary)}
.p-prose code{background:var(--surface-2);border:1px solid var(--line-2);border-radius:6px;padding:1px 5px;font-size:.92em}
.p-prose pre{background:var(--surface-2);border:var(--border);border-radius:var(--radius-md);padding:14px;overflow:auto}
.p-prose pre code{border:none;background:none;padding:0}
.p-prose blockquote{margin:0 0 var(--space-4);padding:2px 0 2px 16px;border-left:3px solid var(--line);color:var(--text-3)}
.p-prose img{border-radius:var(--radius-md)}
.p-prose table{border-collapse:collapse;width:100%;margin:0 0 var(--space-4);font-size:var(--text-sm)}
.p-prose th,.p-prose td{border:var(--border);padding:8px 10px;text-align:left}
.p-prose th{background:var(--surface-2)}

/* ---- articles / blog ---- */
.p-articles{display:grid;gap:14px}
.p-article-card{display:block;position:relative;border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:18px 20px;color:inherit}
.p-article-card:hover{box-shadow:var(--shadow-md);text-decoration:none}
.p-article-card__title{margin:0 0 6px;font-size:var(--text-lg)}
.p-article-card__title a{color:inherit;text-decoration:none}
/* Stretched link: the <a> stays scoped to the title in the DOM (clean anchor
   text / no block-level link soup), while ::after spreads its hit area over
   the whole card. */
.p-article-card__title a::after{content:"";position:absolute;inset:0}
.p-article-card p{margin:0 0 10px;color:var(--text-2);font-size:var(--text-sm)}
.p-article-card time{font-size:var(--text-xs);color:var(--text-3)}
.p-badge{display:inline-block;font-size:var(--text-xs);color:var(--primary);background:var(--primary-soft);border-radius:999px;padding:2px 10px;margin-right:6px}
.p-article{max-width:var(--container-narrow)}
.p-article__meta{display:flex;gap:10px;align-items:center;font-size:var(--text-xs);color:var(--text-3);margin-bottom:var(--space-5)}
.p-article__cover{border-radius:var(--radius-lg);margin:0 0 var(--space-5);width:100%}

/* ---- pager / notice / image page ---- */
.p-pager{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:var(--space-6)}
.p-pager span{font-size:var(--text-sm);color:var(--text-3)}
.p-notice{color:var(--text-3);font-size:var(--text-sm)}
.p-shot{border:var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:14px;display:grid;place-items:center;background-image:linear-gradient(45deg,var(--surface-2) 25%,transparent 25%),linear-gradient(-45deg,var(--surface-2) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--surface-2) 75%),linear-gradient(-45deg,transparent 75%,var(--surface-2) 75%);background-size:18px 18px;background-position:0 0,0 9px,9px -9px,-9px 0}
.p-shot img{display:block;width:auto;height:auto;max-width:100%;max-height:68vh;border-radius:6px}
dl.p-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin:22px 0 0}
dl.p-meta>div{border:var(--border);border-radius:var(--radius-md);padding:9px 12px;background:var(--surface)}
dl.p-meta dt{font-size:var(--text-xs);color:var(--text-3);margin-bottom:3px}
dl.p-meta dd{margin:0;font-size:var(--text-sm);word-break:break-all}
dl.p-meta dd .p-btn{margin-right:6px}

/* ---- footer ---- */
.p-footer{border-top:var(--border);margin-top:var(--space-7)}
.p-footer__in{padding:26px 22px 44px;display:flex;flex-wrap:wrap;gap:20px 30px;align-items:flex-start;color:var(--text-3);font-size:var(--text-xs)}
.p-footer__in p{margin:0}
.p-footer__about{min-width:220px;max-width:340px}
.p-footer__brand{font-weight:650;color:var(--text-1);font-size:var(--text-sm);margin-bottom:5px}
.p-footer__nav{display:flex;flex-wrap:wrap;gap:2px;margin-left:auto}
.p-footer__nav a{padding:5px 9px;border-radius:var(--radius-sm);color:var(--text-2)}
.p-footer__nav a:hover{background:var(--surface-2);color:var(--text-1);text-decoration:none}
.p-footer__copy{flex-basis:100%}

/* ---- preview banner ---- */
.p-preview-bar{background:var(--warn);color:#fff;text-align:center;font-size:var(--text-sm);padding:7px 12px}

/* ---- responsive (03 §7: mobile-first checks) ---- */
@media (max-width:700px){
  h1{font-size:var(--text-2xl)}
  .p-header__in{height:auto;padding:10px 0;flex-wrap:wrap;gap:10px}
  .p-nav{order:3;flex-basis:100%;overflow-x:auto;flex-wrap:nowrap}
  main{padding:var(--space-5) 0 var(--space-7)}
  .p-hero{padding:var(--space-3) 0 var(--space-4)}
  .p-up__drop{padding:28px 16px 24px}
  .p-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
  .p-formats .row{grid-template-columns:1fr;gap:6px}
  .p-formats .row .p-btn{justify-self:start}
  .p-result{flex-wrap:wrap}
  .p-result__ops{width:100%;justify-content:flex-start}
  .p-footer__nav{margin-left:0}
  .p-up__mine-head{flex-wrap:wrap}
}
