  :root{
    --brand:#059669;
    --brand-strong:#047857;
    --brand-deep:#065f46;
    --brand-soft:#d1fae5;
    --brand-soft-2:#ecfdf5;
    --ink:#171717;
    --ink-2:#525252;
    --muted:#737373;
    --faint:#a3a3a3;
    --bg:#fafafa;
    --card:#ffffff;
    --line:#e5e5e5;
    --line-strong:#d4d4d4;
    --accent-ring:rgba(5,150,105,.18);
    --shadow-xs:0 1px 2px rgba(10,10,10,.04);
    --shadow-sm:0 1px 2px rgba(10,10,10,.05),0 2px 4px -1px rgba(10,10,10,.06);
    --shadow-md:0 4px 8px -2px rgba(10,10,10,.08),0 2px 4px -2px rgba(10,10,10,.06);
    --shadow-lg:0 20px 40px -16px rgba(10,10,10,.2);
    --r-sm:12px; --r-md:16px; --r-lg:20px;
  }
  *{box-sizing:border-box}
  html,body{height:100%}
  body{
    margin:0;background:var(--bg);color:var(--ink);
    font-family:"Inter","Segoe UI",system-ui,-apple-system,Arial,sans-serif;
    font-weight:400;font-size:14px;line-height:1.5;
    display:flex;flex-direction:column;min-height:100vh;
    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  }
  button,input,select,textarea{font:inherit;color:inherit}

  /* ---------- toolbar ---------- */
  .toolbar{
    display:flex;flex-wrap:wrap;gap:10px;align-items:center;
    padding:12px 20px;
    background:rgba(255,255,255,.85);
    backdrop-filter:blur(10px);
    -webkit-backdrop-filter:blur(10px);
    border-bottom:1px solid var(--line);
    position:sticky;top:0;z-index:50;
  }
  .brand{
    display:inline-flex;align-items:center;gap:10px;
    font-weight:700;letter-spacing:-.02em;color:var(--ink);margin-right:8px;font-size:15px;
  }
  .brand::before{
    content:"";width:12px;height:12px;border-radius:4px;
    background:linear-gradient(135deg,var(--brand),#34d399);
    box-shadow:0 0 0 4px var(--brand-soft-2);
  }
  .btn{
    display:inline-flex;align-items:center;gap:8px;justify-content:center;
    height:38px;padding:0 18px;border-radius:999px;border:1px solid transparent;
    background:var(--brand);color:#fff;font-weight:600;font-size:13.5px;letter-spacing:.01em;
    cursor:pointer;white-space:nowrap;box-shadow:var(--shadow-xs);
    transition:background .15s ease,box-shadow .15s ease,transform .05s ease;
  }
  .btn:hover{background:var(--brand-strong);box-shadow:var(--shadow-sm)}
  .btn:active{transform:translateY(.5px)}
  .btn:disabled{opacity:.5;cursor:default;pointer-events:none}
  .btn.ghost{background:var(--card);color:var(--ink-2);border-color:var(--line-strong);box-shadow:none}
  .btn.ghost:hover{background:var(--bg);border-color:#bababa;color:var(--ink)}
  .btn.small{height:30px;padding:0 12px;font-size:12.5px;border-radius:9px}
  .hint{margin-left:auto;color:var(--faint);font-size:12.5px}
  .err{color:#dc2626;font-size:13px;font-weight:600}
  .help-btn{
    display:inline-flex;align-items:center;justify-content:center;
    width:32px;height:32px;border-radius:50%;border:1px solid #0284c7;
    background:#0ea5e9;color:#fff;font-size:15px;font-weight:800;
    cursor:pointer;flex:0 0 auto;line-height:1;
    transition:background .12s ease,border-color .12s ease,transform .12s ease;
  }
  .help-btn:hover{background:#0284c7;border-color:#0369a1}
  .help-btn:active{transform:scale(.94)}
  .help-q{display:inline-block;transform-style:preserve-3d;animation:help-flip 2.4s linear infinite;transform-origin:center}
  @keyframes help-flip{
    0%{transform:rotateY(0deg)}
    100%{transform:rotateY(360deg)}
  }

  /* ---------- help modal ---------- */
  .modal-overlay{
    position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
    background:rgba(23,23,23,.4);backdrop-filter:blur(2px);
    -webkit-backdrop-filter:blur(2px);
    padding:20px;
  }
  .modal-overlay[hidden]{display:none}
  .modal{
    width:min(100%,560px);max-height:min(90vh,720px);overflow:auto;
    background:var(--card);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);
    padding:24px 26px;
  }
  .modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}
  .modal-title{margin:0;font-size:18px;font-weight:800;letter-spacing:-.02em;color:var(--ink)}
  .modal-close{
    display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
    width:32px;height:32px;border-radius:50%;border:1px solid var(--line);
    background:var(--card);color:var(--faint);font-size:15px;cursor:pointer;line-height:1;
  }
  .modal-close:hover{border-color:#d0d0d0;color:var(--ink);background:var(--bg)}
  .modal-body{color:var(--ink-2);font-size:14px;line-height:1.6}
  .modal-body h3{margin:16px 0 6px;font-size:14px;font-weight:700;color:var(--ink)}
  .modal-body ol,.modal-body ul{margin:4px 0 0;padding-left:20px}
  .modal-body li{margin:3px 0}
  .modal-body code{
    background:var(--bg);border:1px solid var(--line);border-radius:6px;
    padding:1px 6px;font-size:12.5px;color:var(--brand-deep);
  }
  .modal-body .hint-line{color:var(--faint);font-size:12.5px}

  /* ---------- layout ---------- */
  .main{flex:1;display:grid;grid-template-columns:320px minmax(0,1fr);min-height:0}
  .side{
    background:rgba(255,255,255,.7);
    border-right:1px solid var(--line);overflow-y:auto;padding:16px 14px;
  }
  .side h3{
    margin:0 0 12px 6px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;
    color:var(--faint);font-weight:600;
  }
  .side .search{
    width:100%;height:36px;padding:0 12px;margin:0 0 10px;
    border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--card);
    font-weight:500;font-size:13px;color:var(--ink);box-shadow:var(--shadow-xs);
    transition:border-color .12s ease,box-shadow .12s ease;
  }
  .side .search::placeholder{color:var(--faint);font-weight:400}
  .side .search:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--accent-ring)}

  /* file list */
  .file{
    display:flex;align-items:stretch;width:100%;margin:0 0 8px;
    border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);
    box-shadow:var(--shadow-xs);overflow:hidden;
    transition:border-color .12s ease,box-shadow .12s ease;
  }
  .file:hover{border-color:#d0d0d0;box-shadow:var(--shadow-md)}
  .file.active{border-color:var(--brand);background:var(--brand-soft-2);box-shadow:0 0 0 3px var(--accent-ring),var(--shadow-md)}
  .file-body{
    flex:1 1 auto;min-width:0;display:block;text-align:left;cursor:pointer;border:0;
    background:transparent;padding:12px 14px;font-weight:500;font-size:13.5px;line-height:1.4;color:inherit;
  }
  .file .name{display:block;color:var(--ink);font-weight:600;overflow-wrap:anywhere;word-break:break-word}
  .file .sub{display:block;color:var(--faint);font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .file .meta-row{display:flex;align-items:center;gap:6px;margin-top:8px}
  .file-del{
    flex:0 0 auto;align-self:center;width:30px;height:30px;margin:0 10px 0 0;
    border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--faint);
    font-size:13px;cursor:pointer;line-height:1;
    transition:all .12s ease;
  }
  .file-del:hover{border-color:#a7f3d0;color:var(--brand);background:var(--brand-soft)}
  .file .sub + .meta-row{margin-top:8px}
  .badge{
    display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;
    background:var(--brand-soft);color:var(--brand-deep);font-size:11px;font-weight:700;
  }
  .badge.err{background:#fee2e2;color:#b91c1c}

  .work{display:flex;flex-direction:column;min-width:0;min-height:0}
  .work-top{
    display:flex;flex-wrap:wrap;gap:10px;align-items:center;
    padding:12px 20px;background:rgba(255,255,255,.6);
    border-bottom:1px solid var(--line);
  }
  .skill{
    flex:1;min-width:220px;height:38px;padding:0 14px;
    border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--card);
    font-weight:500;font-size:13.5px;color:var(--ink);box-shadow:var(--shadow-xs);
    transition:border-color .12s ease,box-shadow .12s ease;
  }
  .skill::placeholder{color:var(--faint);font-weight:400}
  .skill:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--accent-ring)}
  .tabs{
    display:inline-flex;padding:3px;gap:2px;border-radius:999px;
    background:var(--bg);border:1px solid var(--line);
  }
  .tab{
    border:0;padding:5px 16px;border-radius:999px;background:transparent;
    font-weight:600;font-size:12.5px;color:var(--muted);cursor:pointer;
    transition:color .12s ease,background .12s ease,box-shadow .12s ease;
  }
  .tab:hover{color:var(--ink)}
  .tab.on{background:var(--card);color:var(--brand);box-shadow:var(--shadow-xs)}

  .pane{display:none;flex:1;min-height:0;overflow:auto;padding:18px 20px}
  .pane.on{display:block}

  /* ---------- editor table ---------- */
  .editor-actions{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
  table.items{
    width:100%;border-collapse:separate;border-spacing:0;
    background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
    overflow:hidden;box-shadow:var(--shadow-xs);font-size:13.5px;
  }
  table.items th{
    text-align:left;padding:12px 16px;font-size:11px;letter-spacing:.07em;text-transform:uppercase;
    color:var(--faint);font-weight:600;border-bottom:1px solid var(--line);
    background:#fdfdfd;position:sticky;top:0;z-index:1;
  }
  table.items td{padding:8px 16px;vertical-align:top;border-bottom:1px solid var(--line);background:#fff}
  table.items tbody tr:last-child td{border-bottom:0}
  table.items tr:hover td{background:var(--brand-soft-2)}
  table.items tr.sel td{background:var(--brand-soft)}
  table.items textarea{
    width:100%;min-height:44px;padding:9px 12px;
    border:1px solid var(--line);border-radius:var(--r-sm);font-size:13.5px;
    resize:vertical;background:#fff;line-height:1.4;
    transition:border-color .12s ease,box-shadow .12s ease;
  }
  table.items textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--accent-ring)}
  table.items select{
    width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);
    font-size:13px;background:#fff;
  }
  table.items select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--accent-ring)}
  td.num{
    width:70px;font-weight:600;color:var(--faint);font-size:12.5px;
    display:flex;align-items:center;gap:8px;justify-content:center;white-space:nowrap;
  }
  td.num .grip{
    cursor:grab;color:var(--line-strong);font-size:13px;line-height:1;
    border-radius:6px;padding:2px 5px;user-select:none;transition:color .12s ease,background .12s ease;
  }
  td.num .grip:hover{color:var(--brand);background:var(--brand-soft)}
  td.num .grip:active{cursor:grabbing}
  td.num .num-i{min-width:14px;text-align:center}
  td.form-c{width:148px}
  td.rep{width:30%}
  td.del{width:48px;text-align:center}
  .rowbtn{
    width:28px;height:28px;border:1px solid var(--line);border-radius:8px;
    background:#fff;color:var(--faint);cursor:pointer;font-size:13px;line-height:1;
    transition:all .12s ease;
  }
  .rowbtn:hover{border-color:#a7f3d0;color:var(--brand);background:var(--brand-soft)}
  .empty{
    padding:36px 20px;text-align:center;color:var(--faint);font-weight:500;
    border:1.5px dashed var(--line-strong);border-radius:var(--r-lg);background:rgba(255,255,255,.7);
  }

  /* ---------- preview ---------- */
  .preview-wrap{height:100%;display:flex;flex-direction:column}
  .preview-frame{
    flex:1;min-height:0;border:1px solid var(--line);border-radius:var(--r-lg);
    background:var(--card);overflow:hidden;box-shadow:var(--shadow-xs);
  }
  .status{font-size:12px;color:var(--faint);font-weight:500;padding:8px 4px 0}

  /* ---------- preloader ---------- */
  .preloader[hidden]{display:none}
  .preloader{
    position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;
    background:rgba(250,250,250,.82);backdrop-filter:blur(4px);
    -webkit-backdrop-filter:blur(4px);
  }
  .preloader-card{
    width:min(92%,360px);padding:28px 24px;border-radius:var(--r-lg);
    background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-lg);
    text-align:center;
  }
  .spinner{
    width:38px;height:38px;margin:0 auto 16px;border-radius:50%;
    border:3px solid var(--brand-soft);border-top-color:var(--brand);
    animation:spin .8s linear infinite;
  }
  @keyframes spin{to{transform:rotate(360deg)}}
  .preloader-title{margin:0 0 4px;font-size:15px;font-weight:700;color:var(--ink)}
  .preloader-sub{margin:0 0 14px;font-size:13px;color:var(--muted)}
  .preloader-bar{height:8px;border-radius:999px;background:var(--bg);overflow:hidden}
  .preloader-bar-fill{height:100%;width:0;border-radius:999px;background:var(--brand);transition:width .15s ease}
  .preloader-timer{margin:12px 0 0;font-size:12.5px;color:var(--faint)}

  ::-webkit-scrollbar{width:9px;height:9px}
  ::-webkit-scrollbar-thumb{background:#d6d6d6;border-radius:999px;border:2px solid transparent;background-clip:content-box}
  ::-webkit-scrollbar-thumb:hover{background:#c0c0c0;border:2px solid transparent;background-clip:content-box}
  ::-webkit-scrollbar-track{background:transparent}

  @media (max-width:900px){
    .main{grid-template-columns:1fr;grid-template-rows:auto 1fr}
    .side{border-right:0;border-bottom:1px solid var(--line)}
    .hint{display:none}
  }

  /* ---------- drag & drop rows ---------- */
  table.items tbody tr{cursor:grab}
  table.items tbody tr textarea{cursor:text}
  table.items tbody tr.dragging td{opacity:.35}
  table.items tbody tr.dragging,table.items tbody tr.dragging *{cursor:grabbing}
  table.items tbody tr.drop-before td{background:var(--brand-soft);box-shadow:inset 0 2px 0 0 var(--brand)}
  table.items tbody tr.drop-after td{background:var(--brand-soft);box-shadow:inset 0 -2px 0 0 var(--brand)}
