/* ========================================
   钢材重量计算器 v1.1.0 - 样式表
   ======================================== */

:root {
    --primary: #2563eb;
    --primary-hover: #1d4ed8;
    --primary-light: #eff6ff;
    --primary-ring: rgba(37,99,235,.18);
    --bg: #f0f4f8;
    --card-bg: #ffffff;
    --text: #1e293b;
    --text-secondary: #64748b;
    --text-muted: #94a3b8;
    --border: #e2e8f0;
    --border-focus: #93c5fd;
    --shadow-sm: 0 1px 2px rgba(0,0,0,.04);
    --shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
    --shadow-md: 0 4px 12px rgba(0,0,0,.06), 0 2px 6px rgba(0,0,0,.04);
    --shadow-lg: 0 12px 28px rgba(0,0,0,.08), 0 4px 12px rgba(0,0,0,.04);
    --radius: 14px;
    --radius-sm: 10px;
    --radius-xs: 7px;
    --success: #16a34a;
    --danger: #dc2626;
    --danger-bg: #fef2f2;
    --transition: .2s cubic-bezier(.4,0,.2,1);
    --font-mono: 'SF Mono','Consolas','Monaco',monospace;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

body{
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Helvetica Neue",sans-serif;
    background:var(--bg);
    color:var(--text);
    line-height:1.6;
    min-height:100vh;
    -webkit-font-smoothing:antialiased;
    -moz-osx-font-smoothing:grayscale;
}

.app-container{max-width:700px;margin:0 auto;padding:14px 16px 24px;display:flex;flex-direction:column;min-height:100vh}

/* ---- 头部 ---- */
.app-header{
    display:flex;align-items:center;justify-content:space-between;
    padding:18px 0 14px;margin-bottom:2px;
}
.logo{display:flex;align-items:center;gap:10px;color:var(--primary)}
.logo h1{font-size:1.3rem;font-weight:700;color:var(--text);letter-spacing:-.3px}
.version{font-size:.72rem;color:var(--primary);background:var(--primary-light);padding:3px 10px;border-radius:20px;font-weight:600}

/* ---- 卡片 ---- */
.main-content{flex:1;display:flex;flex-direction:column;gap:12px}
.card{
    background:var(--card-bg);border-radius:var(--radius);
    padding:18px 22px;box-shadow:var(--shadow);border:1px solid var(--border);
    transition:box-shadow var(--transition);
}
.card:hover{box-shadow:var(--shadow-md)}
.section-title{
    font-size:.82rem;font-weight:700;color:var(--text-secondary);
    margin-bottom:14px;text-transform:uppercase;letter-spacing:.6px;
    display:flex;align-items:center;gap:8px;
}
.unit-hint{font-weight:500;text-transform:none;font-size:.76rem;color:var(--text-muted)}

/* ---- 形状选择 ---- */
.shape-selector{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.shape-option{
    display:flex;flex-direction:column;align-items:center;gap:8px;
    padding:16px 8px;border:2px solid var(--border);border-radius:var(--radius-sm);
    cursor:pointer;transition:all var(--transition);color:var(--text-secondary);user-select:none;
    background:var(--card-bg);
}
.shape-option:hover{border-color:var(--border-focus);color:var(--primary);background:var(--primary-light);transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.shape-option.active{border-color:var(--primary);color:var(--primary);background:var(--primary-light);font-weight:600;box-shadow:0 0 0 3px var(--primary-ring)}
.shape-option span{font-size:.82rem;font-weight:inherit}

/* ---- 材料选择 ---- */
.material-row{display:flex;gap:10px;align-items:center}
.material-select{
    flex:1;padding:11px 14px;border:2px solid var(--border);border-radius:var(--radius-xs);
    font-size:.92rem;color:var(--text);background:var(--card-bg);cursor:pointer;
    transition:all var(--transition);
    appearance:none;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 14px center;padding-right:38px;
}
.material-select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-ring)}
.density-badge{
    font-size:.78rem;font-weight:600;color:var(--primary);
    background:var(--primary-light);padding:6px 13px;border-radius:20px;
    white-space:nowrap;min-width:90px;text-align:center;
    transition:all var(--transition);
}
.custom-density{margin-top:10px}
.custom-density input{width:100%;padding:11px 14px;border:2px solid var(--border);border-radius:var(--radius-xs);font-size:.92rem;transition:all var(--transition)}
.custom-density input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-ring)}

/* ---- 尺寸输入 ---- */
.dimension-grid{display:flex;flex-direction:column;gap:12px}
.input-group{display:flex;flex-direction:column;gap:5px}
.input-group label{font-size:.78rem;font-weight:600;color:var(--text-secondary)}
/* 通用 input 样式（单价/数量等） */
.input-group > input{
    padding:11px 14px;border:2px solid var(--border);border-radius:var(--radius-xs);
    font-size:.92rem;transition:all var(--transition);width:100%;background:var(--card-bg);
    color:var(--text);
}
.input-group > input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-ring)}
.input-group > input::placeholder{color:var(--text-muted)}
/* 带清除按钮的 input 包裹 */
.input-wrapper{position:relative}
.input-wrapper input{
    padding:11px 40px 11px 14px;border:2px solid var(--border);border-radius:var(--radius-xs);
    font-size:.92rem;transition:all var(--transition);width:100%;background:var(--card-bg);
    color:var(--text);
}
.input-wrapper input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-ring)}
.input-wrapper input::placeholder{color:var(--text-muted)}
.input-clear{
    position:absolute;right:4px;top:50%;transform:translateY(-50%);
    background:none;border:none;cursor:pointer;color:var(--text-muted);
    font-size:1.15rem;line-height:1;padding:5px 8px;border-radius:5px;
    transition:all var(--transition);display:flex;align-items:center;justify-content:center;
}
.input-clear:hover{color:var(--danger);background:var(--danger-bg)}
.price-grid{display:flex;flex-direction:column;gap:12px}

/* ---- 输入错误 ---- */
.input-error{border-color:var(--danger)!important;background:var(--danger-bg)!important}
.error-tip{font-size:.7rem;color:var(--danger);margin-top:3px;font-weight:500}

/* ---- 结果面板 ---- */
.result-panel{border-left:4px solid var(--primary);animation:slideIn .35s ease}
.result-panel .section-title{color:var(--primary)}
.live-dot{
    display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--success);
    animation:pulse 2s infinite;margin-left:2px;
}
.result-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.result-item{
    display:flex;flex-direction:column;gap:3px;
    padding:14px 16px;background:var(--bg);border-radius:var(--radius-xs);
    transition:background var(--transition);
}
.result-item.price-row{grid-column:1/-1}
.result-label{font-size:.74rem;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.4px}
.result-value{font-size:1.1rem;font-weight:700;color:var(--text);font-family:var(--font-mono);transition:all .15s}
.result-value.highlight{color:var(--primary);font-size:1.25rem}
.result-value.price{color:var(--danger);font-size:1.35rem}

/* ---- 底部 ---- */
.app-footer{padding:20px 0 8px;text-align:center}
.footer-info{font-size:.75rem;color:var(--text-muted);display:flex;align-items:center;justify-content:center;gap:8px}
.divider{color:var(--border)}
.icp-record{font-size:.7rem;color:var(--text-muted);margin-top:8px}
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:.75rem;text-decoration:underline;padding:0;font-weight:500}
.btn-link:hover{color:var(--primary-hover)}
.update-status{margin-top:8px;font-size:.73rem;padding:8px 14px;border-radius:var(--radius-xs);font-weight:500}
.update-status.success{background:#dcfce7;color:#166534}
.update-status.info{background:var(--primary-light);color:var(--primary)}
.update-status.error{background:var(--danger-bg);color:#991b1b}

/* ---- 模态框 ---- */
.modal-overlay{
    position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(2px);
    display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;
    animation:fadeIn .2s ease;
}
.modal-card{background:var(--card-bg);border-radius:var(--radius);padding:26px;max-width:420px;width:100%;box-shadow:var(--shadow-lg)}
.modal-card h3{font-size:1.05rem;margin-bottom:14px}
.modal-actions{display:flex;gap:10px;margin-top:20px;justify-content:flex-end}
.btn-primary,.btn-secondary{padding:9px 22px;border-radius:var(--radius-xs);font-size:.88rem;font-weight:600;cursor:pointer;border:none;transition:all var(--transition)}
.btn-primary{background:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-hover);box-shadow:0 4px 12px rgba(37,99,235,.3)}
.btn-secondary{background:var(--bg);color:var(--text)}
.btn-secondary:hover{background:var(--border)}

/* ---- 通用 ---- */
.hidden{display:none!important}

@keyframes slideIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

/* ---- 响应式 ---- */
@media(max-width:520px){
    .app-container{padding:10px 12px 18px}
    .card{padding:14px 16px}
    .shape-selector{gap:7px}
    .shape-option{padding:14px 4px}
    .shape-option span{font-size:.75rem}
    .result-grid{grid-template-columns:1fr}
    .result-item.price-row{grid-column:1}
    .material-row{flex-direction:column;align-items:stretch}
    .density-badge{align-self:flex-start}
    .logo h1{font-size:1.1rem}
}

@media(min-width:521px) and (max-width:768px){
}

@media print{
    .app-header,.app-footer,.shape-section,.material-section,.price-section,.dimension-section{display:none}
    .result-panel{box-shadow:none;border:1px solid #ccc;border-left:4px solid var(--primary)}
}
