@import "https://fonts.googleapis.com/css2?family=Manrope:wght@600;700;800&family=Noto+Sans+SC:wght@400;500;600;700;800&display=swap";:root{color:#1f2720;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:0 0}html{min-width:320px}body{min-width:320px;min-height:100vh;margin:0}#root{width:100%;min-height:100vh}a{color:inherit}:root{--bg:#ece6d9;--surface:#fffcf6f0;--surface-strong:#fffdf9;--surface-muted:#f2ebdf;--text:#1a1f1b;--text2:#445048;--text3:#7a7468;--border:#3f49422e;--accent:#0f645b;--accent-strong:#0a403a;--accent-soft:#0f645b24;--accent-copper:#9f5532;--accent-copper-soft:#9f553224;--warning:#94511e;--warning-soft:#94511e24;--danger:#a04330;--danger-soft:#a0433024;--shadow:0 20px 50px #222a241f;--shadow-soft:0 12px 28px #222a2417}*{box-sizing:border-box;margin:0;padding:0}body{background:radial-gradient(circle at top left, #0f645b1a, transparent 34%), radial-gradient(circle at top right, #9f55321f, transparent 28%), linear-gradient(180deg, #f7f2e9 0%, var(--bg) 100%);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Noto Sans SC,PingFang SC,Microsoft YaHei,sans-serif;line-height:1.65}button,input,a{color:inherit;font:inherit}button{background:0 0}.fade-in{animation:.35s ease-out fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.app-shell{min-height:100vh;position:relative}.app-shell:before{content:"";pointer-events:none;opacity:.7;border:1px solid #6458451f;border-radius:32px;position:fixed;inset:28px}.app-header{z-index:20;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#f6f0e6d1;border-bottom:1px solid #6458451f;justify-content:space-between;align-items:center;gap:20px;padding:18px 40px;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:14px;display:flex}.logo-dot{background:linear-gradient(145deg, var(--accent), var(--accent-copper));border-radius:14px;width:42px;height:42px;box-shadow:0 10px 24px #0e6b623d}.brand-copy{flex-direction:column;gap:4px;display:flex}.header-kicker,.eyebrow{letter-spacing:.18em;text-transform:uppercase;color:var(--accent);font-family:Manrope,Noto Sans SC,sans-serif;font-size:.78rem;font-weight:700}.header-left h1{letter-spacing:-.015em;font-size:1.24rem;font-weight:800}.header-nav{gap:10px;display:flex}.nav-pill,.sub-pill{cursor:pointer;border:1px solid #0000;border-radius:999px;transition:all .2s}.nav-pill{color:var(--text2);background:#fff9;padding:10px 16px;font-size:.9rem;font-weight:600}.nav-pill.on{color:var(--accent-strong);background:linear-gradient(135deg,#0e6b622e,#0e6b6214);border-color:#0e6b6229}.app-body{width:100%;max-width:1440px;margin:0 auto;padding:36px 40px 56px;position:relative}.sub-tabs{box-shadow:var(--shadow-soft);background:#ffffffad;border:1px solid #6458451f;border-radius:999px;gap:6px;margin-bottom:24px;padding:6px;display:inline-flex}.sub-pill{color:var(--text2);padding:9px 16px;font-size:.88rem;font-weight:600}.sub-pill.on{color:var(--accent-strong);background:linear-gradient(135deg,#0e6b6224,#0e6b620f);border-color:#0e6b621f}.view-hero{border:1px solid var(--border);box-shadow:var(--shadow);background:linear-gradient(#fffbf5eb,#f8f1e8e0);border-radius:28px;margin-bottom:28px;padding:30px;display:block;position:relative;overflow:hidden}.view-hero:after{content:"";background:radial-gradient(circle,#0e6b621f,#0000 70%);border-radius:999px;width:180px;height:180px;position:absolute;top:-48px;right:-48px}.view-hero.compact{display:block}.view-hero-copy{z-index:1;position:relative}.view-hero-copy h2{letter-spacing:-.03em;max-width:26ch;font-size:clamp(1.9rem,3.1vw,2.7rem);line-height:1.18}.view-hero-copy p:not(.eyebrow){max-width:64ch;color:var(--text2);margin-top:14px;line-height:1.82}.state-panel,.error-banner{border-radius:24px}.state-panel{border:1px solid var(--border);box-shadow:var(--shadow-soft);background:linear-gradient(#fffbf5eb,#f4ece1e6);justify-content:space-between;align-items:center;gap:20px;padding:22px 24px;display:flex}.state-panel h3{margin-bottom:6px;font-size:1.08rem}.state-panel p{color:var(--text2);line-height:1.7}.error-banner{color:var(--danger);background:#a0433017;border:1px solid #a0433033;padding:14px 16px;font-size:.92rem;line-height:1.6}.tracking-view,.category-view{flex-direction:column;gap:18px;display:flex}.toolbar-row,.view-actions{justify-content:flex-end;display:flex}.primary-btn,.secondary-btn{cursor:pointer;border:none;border-radius:999px;padding:11px 18px;font-weight:700;transition:transform .2s,box-shadow .2s,background .2s,opacity .2s}.primary-btn{background:linear-gradient(135deg, var(--accent), var(--accent-strong));color:#fff;box-shadow:0 12px 24px #0e6b6233}.secondary-btn{color:var(--text2);background:#ffffffc7;border:1px solid #64584529}.primary-btn.small{padding:8px 14px;font-size:.82rem}.primary-btn:hover,.secondary-btn:hover{transform:translateY(-1px)}.primary-btn:disabled,.secondary-btn:disabled{opacity:.6;cursor:not-allowed;box-shadow:none;transform:none}.project-section{margin-bottom:8px}.period-header{justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:12px;padding:0 4px;display:flex}.period-label{letter-spacing:.18em;text-transform:uppercase;color:var(--accent);font-family:Manrope,Noto Sans SC,sans-serif;font-size:.82rem;font-weight:800}.period-subtitle{color:var(--text2);margin-top:6px;font-size:.92rem}.period-count{border:1px solid var(--border);min-width:48px;height:48px;box-shadow:var(--shadow-soft);background:#ffffffbd;border-radius:16px;justify-content:center;align-items:center;font-family:Manrope,Noto Sans SC,sans-serif;font-weight:800;display:flex}.project-card,.cat-section,.sidebar-panel,.detail-panel{border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow-soft);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.project-card{border-radius:24px;margin-bottom:12px;transition:transform .24s,box-shadow .24s,border-color .24s;overflow:hidden}.project-card:hover{border-color:#0e6b6242;transform:translateY(-2px)}.project-card.incomplete{border-color:#ab5e3438}.project-card.expanded{border-color:#0e6b624d;box-shadow:0 22px 44px #3a2e1f1f}.card-summary{cursor:pointer;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:18px;padding:22px;display:grid}.card-summary-static{cursor:default}.create-card{margin-bottom:20px}.seq-badge{width:44px;height:44px;color:var(--accent-strong);background:linear-gradient(160deg,#0e6b6229,#0e6b620a);border-radius:16px;justify-content:center;align-items:center;font-family:Manrope,Noto Sans SC,sans-serif;font-size:1.08rem;font-weight:800;display:flex}.project-card.incomplete .seq-badge{color:var(--accent-copper);background:linear-gradient(160deg,#ab5e342e,#ab5e340f)}.card-main-info{flex-direction:column;gap:6px;min-width:0;display:flex}.card-company{font-size:1.06rem;font-weight:800}.card-product{color:var(--text2);line-height:1.6}.card-footnote{color:var(--text3);flex-wrap:wrap;gap:10px 16px;font-size:.84rem;display:flex}.card-meta{flex-direction:column;align-items:flex-end;gap:10px;display:flex}.meta-row{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.meta-tag,.quality-pill,.mode-badge,.cat-ctrls button,.dl-btn,.del-btn-mini,.btn-del,.add-l1-btn,.add-entry-btn{border-radius:999px}.meta-tag{background:var(--surface-muted);color:var(--text2);border:1px solid #6458451f;padding:6px 10px;font-size:.78rem;font-weight:600}.meta-tag.channel{background:var(--accent-soft);color:var(--accent-strong)}.meta-tag.req{background:var(--accent-copper-soft);color:var(--accent-copper)}.quality-pill{padding:6px 12px;font-size:.78rem;font-weight:700}.quality-pill.good{background:var(--accent-soft);color:var(--accent-strong)}.quality-pill.warning{background:var(--warning-soft);color:var(--warning)}.expand-arrow{color:var(--text3);font-size:.9rem}.card-detail{border-top:1px dashed #64584533;padding:0 22px 22px}.create-detail{padding-top:20px}.detail-layout{grid-template-columns:minmax(0,1.35fr) minmax(300px,.95fr);gap:20px;padding-top:20px;display:grid}.detail-panel-card,.detail-side-card,.detail-summary-card,.competitors-section{border:1px solid var(--border);border-radius:20px}.detail-panel-card,.detail-side-card{background:var(--surface-strong);padding:20px}.detail-side-card{flex-direction:column;gap:16px;display:flex}.detail-summary-card{background:linear-gradient(#0e6b6214,#ffffffdb);padding:18px}.section-title{margin-bottom:12px;font-size:.9rem;font-weight:800}.summary-line{border-bottom:1px solid #6458451a;justify-content:space-between;gap:12px;padding:10px 0;display:flex}.summary-line:last-child{border-bottom:none;padding-bottom:0}.summary-line span{color:var(--text2);font-size:.88rem}.summary-line strong{text-align:right;max-width:58%;font-size:.94rem;line-height:1.5}.detail-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;display:grid}.detail-grid label{color:var(--text2);flex-direction:column;gap:8px;font-size:.82rem;font-weight:700;display:flex}.detail-grid label.span-2{grid-column:span 2}.detail-grid input,.detail-grid select,.detail-grid textarea,.search-input,.add-input{border:1px solid var(--border);background:#ffffffe0;border-radius:16px;width:100%;padding:12px 14px;transition:border-color .2s,box-shadow .2s,background .2s}.detail-grid input:focus,.detail-grid select:focus,.detail-grid textarea:focus,.search-input:focus,.add-input:focus{border-color:#0e6b6266;outline:none;box-shadow:0 0 0 4px #0e6b621f}.detail-grid select,.detail-grid textarea{resize:vertical}.disabled-input{color:var(--text3);background:#f1ece3}.competitors-stack{gap:16px;display:grid}.competitors-section{background:#fffdfa;padding:18px}.section-note{color:var(--text2);margin-bottom:12px;font-size:.84rem;line-height:1.6}.tag-list{flex-wrap:wrap;gap:8px;display:flex}.comp-tag,.empty-tag,.inline-adder{border-radius:999px}.comp-tag{color:var(--accent-strong);background:#0e6b6214;border:1px solid #0e6b621f;align-items:center;gap:8px;padding:8px 12px;font-size:.84rem;font-weight:600;display:inline-flex}.comp-tag.alt{color:var(--accent-copper);background:#ab5e341a;border-color:#ab5e342e}.comp-tag button,.del-mini,.del-user-btn{cursor:pointer;color:inherit;background:0 0;border:none}.comp-tag button{font-size:1rem;line-height:1}.empty-tag{color:var(--text3);border:1px dashed #64584533;padding:8px 12px;font-size:.82rem}.inline-adder{background:#ffffffc7;border:1px dashed #64584538;align-items:center;gap:4px;padding:4px;display:inline-flex}.inline-adder input{background:0 0;border:none;outline:none;width:132px;padding:6px 10px;font-size:.84rem}.inline-adder button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:999px;width:30px;height:30px;font-weight:700}.card-actions{justify-content:flex-end;gap:12px;margin-top:18px;display:flex}.btn-del{background:var(--danger-soft);color:var(--danger);cursor:pointer;border:1px solid #a0433047;padding:10px 16px;font-weight:700}.add-entry-btn{width:100%;color:var(--accent-strong);cursor:pointer;background:#ffffffa3;border:1.5px dashed #0e6b6247;padding:18px;font-size:1rem;font-weight:800}.add-l1-btn{background:var(--accent-strong);color:#fff;cursor:pointer;box-shadow:var(--shadow-soft);border:none;padding:12px 18px;font-weight:700}.cat-section{border-radius:24px;overflow:hidden}.cat-l1,.cat-l2{justify-content:space-between;align-items:center;gap:12px;display:flex}.cat-l1{background:linear-gradient(#0e6b6217,#ffffff6b);padding:16px 20px;font-weight:700}.cat-l2-group{border-top:1px solid #64584514}.cat-l2{color:var(--accent-strong);background:#0e6b620a;padding:12px 20px;font-weight:700}.cat-ctrls{flex-wrap:wrap;gap:8px;display:flex}.cat-ctrls button{cursor:pointer;background:#ffffffe0;border:1px solid #64584529;padding:6px 10px;font-size:.78rem}.cat-ctrls button.del{color:var(--danger);border-color:#a0433033}.cat-item{border-top:1px solid #64584514;grid-template-columns:180px minmax(0,1fr) auto;align-items:center;gap:16px;padding:14px 20px 14px 28px;display:grid}.cat-item-editable{grid-template-columns:minmax(0,1fr) auto;align-items:stretch}.cat-edit-grid{grid-template-columns:minmax(180px,1fr) minmax(220px,1.2fr) 160px;gap:12px;display:grid}.cat-edit-grid input,.cat-edit-grid select{border:1px solid var(--border);background:#ffffffeb;border-radius:14px;width:100%;padding:10px 12px}.cat-edit-grid input:focus,.cat-edit-grid select:focus{border-color:#0e6b6266;outline:none;box-shadow:0 0 0 4px #0e6b621a}.cat-row-actions{align-items:center;gap:10px;display:flex}.cat-l3{font-weight:700}.cat-examples{color:var(--text2);font-size:.92rem}.del-mini{color:var(--text3);font-size:1.1rem}.user-layout{grid-template-columns:minmax(280px,320px) minmax(0,1fr);gap:24px;min-height:calc(100vh - 196px);display:grid}.sidebar-panel,.detail-panel{border-radius:28px}.sidebar-panel{flex-direction:column;display:flex;overflow:hidden}.sidebar-top{border-bottom:1px solid #64584514;justify-content:space-between;align-items:center;gap:16px;padding:20px 20px 12px;display:flex}.sidebar-top h3{font-size:1.04rem}.mode-badge{padding:7px 12px;font-size:.78rem;font-weight:700}.mode-badge.online,.mode-panel.online{color:var(--accent-strong);background:#0e6b6217}.mode-badge.offline,.mode-panel.offline{background:var(--warning-soft);color:var(--warning)}.mode-badge.unknown,.mode-panel.unknown{color:var(--text2);background:#6458451a}.offline-badge{background:var(--warning-soft);color:var(--warning);padding:12px 20px;font-size:.84rem;line-height:1.55}.search-box{padding:16px 20px}.user-list{flex:1;padding:0 10px 10px;overflow:auto}.user-item{cursor:pointer;border-radius:18px;justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;padding:14px;transition:background .2s,transform .2s;display:flex}.user-item:hover{background:#0e6b6214;transform:translate(2px)}.user-item.active{color:var(--accent-strong);background:linear-gradient(135deg,#0e6b6224,#0e6b620d)}.user-name-text{font-weight:700}.user-subline{color:var(--text3);margin-top:4px;font-size:.82rem}.del-user-btn{opacity:0;font-size:1.1rem}.user-item:hover .del-user-btn{opacity:1}.empty-hint{color:var(--text3);text-align:center;padding:16px}.add-form{border-top:1px solid #64584514;padding:14px 20px 20px}.detail-panel{overflow:hidden}.detail-inner{flex-direction:column;gap:22px;height:100%;padding:28px;display:flex;overflow:auto}.detail-header{justify-content:space-between;align-items:flex-start;gap:18px;display:flex}.detail-header-copy h2{letter-spacing:-.04em;font-size:clamp(1.8rem,3vw,2.4rem);line-height:1.1}.sub{color:var(--text2);margin-top:8px;line-height:1.65}.mode-panel{border:1px solid #64584524;border-radius:20px;flex-direction:column;gap:6px;min-width:260px;padding:16px 18px;display:flex}.mode-title{color:var(--text);font-size:.96rem}.user-metrics{margin-top:-6px}.upload-zone{text-align:center;cursor:pointer;background:linear-gradient(#0e6b6214,#ffffff94);border:1.5px dashed #0e6b623d;border-radius:24px;padding:28px;transition:transform .2s,border-color .2s,box-shadow .2s}.upload-zone:hover{box-shadow:var(--shadow-soft);border-color:#0e6b6266;transform:translateY(-2px)}.upload-zone.uploading{cursor:progress}.upload-icon{width:72px;height:72px;color:var(--accent-strong);background:#0e6b621f;border-radius:20px;justify-content:center;align-items:center;margin-bottom:14px;font-family:Manrope,Noto Sans SC,sans-serif;font-size:1.08rem;font-weight:800;display:inline-flex}.upload-title{font-size:1.18rem;font-weight:800}.upload-hint,.upload-spinner{color:var(--text2);margin-top:10px;line-height:1.6}.files-section{flex-direction:column;gap:14px;display:flex}.files-header{justify-content:space-between;align-items:center;display:flex}.files-header h3{font-size:1.06rem}.badge{min-width:36px;height:36px;color:var(--accent-strong);background:#0e6b621f;border-radius:999px;justify-content:center;align-items:center;font-family:Manrope,Noto Sans SC,sans-serif;font-weight:800;display:inline-flex}.file-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;display:grid}.file-card,.empty-file-card{border:1px solid var(--border);background:var(--surface-strong);box-shadow:var(--shadow-soft);border-radius:20px;padding:18px}.file-card{align-items:center;gap:16px;transition:transform .2s,border-color .2s;display:flex}.file-card:hover{border-color:#0e6b623d;transform:translateY(-2px)}.file-icon-box{min-width:56px;height:56px;color:var(--accent-strong);letter-spacing:.04em;background:#0e6b621a;border-radius:18px;justify-content:center;align-items:center;font-family:Manrope,Noto Sans SC,sans-serif;font-weight:800;display:flex}.file-meta{flex:1;min-width:0}.file-title{text-overflow:ellipsis;white-space:nowrap;font-weight:700;overflow:hidden}.file-sub{color:var(--text2);margin-top:6px;font-size:.84rem}.card-side-actions{align-items:center;gap:10px;display:flex}.dl-btn,.del-btn-mini{padding:8px 12px;font-size:.82rem;font-weight:700;text-decoration:none}.dl-btn{color:var(--accent-strong);background:#0e6b621a}.del-btn-mini{color:var(--danger);cursor:pointer;background:#a0433014;border:none}.empty-file-card{color:var(--text2);flex-direction:column;gap:8px;display:flex}.empty-screen{justify-content:center;align-items:center;height:100%;padding:36px;display:flex}.empty-screen-rich{background:radial-gradient(circle at 0 0,#0e6b6214,#0000 30%)}.empty-screen-copy{border:1px solid var(--border);max-width:420px;box-shadow:var(--shadow);background:#fffc;border-radius:28px;padding:30px}.empty-screen-copy h3{margin:8px 0 12px;font-size:1.6rem}.empty-screen-copy p:last-child{color:var(--text2);line-height:1.7}@media (width<=1080px){.view-hero,.view-hero.compact,.detail-layout,.user-layout{grid-template-columns:1fr}.sidebar-panel{min-height:280px}}@media (width<=820px){.app-shell:before{border-radius:24px;inset:16px}.app-header{flex-direction:column;align-items:flex-start;padding:16px 18px}.header-nav{width:100%}.nav-pill{text-align:center;flex:1}.app-body{padding:24px 18px 40px}.card-summary{grid-template-columns:auto minmax(0,1fr) auto}.card-meta{grid-column:1/-1;align-items:flex-start}.meta-row{justify-content:flex-start}.detail-header{flex-direction:column}.mode-panel{min-width:100%}.cat-item,.cat-edit-grid{grid-template-columns:1fr}.cat-row-actions{justify-content:flex-end}}@media (width<=640px){.sub-tabs{width:100%}.sub-pill{flex:1}.card-summary{grid-template-columns:auto minmax(0,1fr)}.expand-arrow{display:none}.detail-grid label.span-2{grid-column:span 1}.detail-inner{padding:20px}.file-grid{grid-template-columns:1fr}.file-card{flex-direction:column;align-items:flex-start}.state-panel,.toolbar-row,.view-actions,.card-actions{flex-direction:column;align-items:stretch}.card-side-actions{justify-content:space-between;width:100%}.period-header{align-items:center}}
