@import "tailwindcss"; :root { --ink: #17211d; --muted: #66736c; --line: #dfe6e1; --green: #007f5f; --green-dark: #005f48; --mint: #dff5ed; --paper: #f8faf8; --cream: #f2f4ee; } * { box-sizing: border-box; } html { background: #dfe8e2; } body { margin: 0; color: var(--ink); font-family: Arial, "PingFang SC", "Microsoft YaHei", sans-serif; } button, input { font: inherit; } button { cursor: pointer; } button:disabled { cursor: not-allowed; opacity: .55; } .app-shell { min-height: 100vh; padding: 28px; display: grid; place-items: center; position: relative; overflow: hidden; background: radial-gradient(circle at 75% 15%, rgba(234, 184, 90, .18), transparent 25%), linear-gradient(145deg, #e9efeb, #cad9d0); } .ambient { position: absolute; border-radius: 50%; filter: blur(2px); opacity: .65; } .ambient-one { width: 460px; height: 460px; background: rgba(0, 127, 95, .08); left: -180px; bottom: -180px; } .ambient-two { width: 260px; height: 260px; border: 50px solid rgba(255,255,255,.3); right: -70px; top: 40px; } .device-frame { width: min(1080px, 100%); min-height: min(760px, calc(100vh - 56px)); position: relative; z-index: 1; display: flex; flex-direction: column; background: rgba(249, 251, 248, .96); border: 1px solid rgba(255,255,255,.85); border-radius: 28px; box-shadow: 0 35px 90px rgba(28, 54, 42, .21), inset 0 1px #fff; overflow: hidden; } .app-header { height: 74px; display: flex; align-items: center; justify-content: space-between; padding: 0 38px; border-bottom: 1px solid var(--line); background: rgba(255,255,255,.72); } .brand { display: flex; align-items: center; gap: 12px; border: 0; background: none; color: var(--ink); padding: 0; text-align: left; } .brand-mark { width: 40px; height: 40px; display: grid; place-items: center; background: var(--green); color: white; border-radius: 11px; font-size: 24px; font-weight: 900; transform: skew(-5deg); } .brand strong, .brand small { display: block; } .brand strong { font-size: 16px; letter-spacing: .04em; } .brand small { color: #88938d; font-size: 9px; margin-top: 3px; letter-spacing: .12em; } .status-pill { display: flex; gap: 8px; align-items: center; padding: 8px 13px; border-radius: 99px; background: #edf7f2; color: #236451; font-size: 12px; font-weight: 700; } .status-dot { width: 7px; height: 7px; background: #22a06b; border-radius: 50%; box-shadow: 0 0 0 4px rgba(34,160,107,.12); } .progress-strip { display: flex; gap: 36px; justify-content: center; padding: 17px 28px; border-bottom: 1px solid var(--line); color: #9aa39e; font-size: 12px; font-weight: 700; } .progress-item { display: flex; align-items: center; gap: 8px; } .progress-item span { width: 21px; height: 21px; display: grid; place-items: center; border: 1px solid #ccd4cf; border-radius: 50%; font-size: 10px; } .progress-item.active { color: var(--green); } .progress-item.active span { color: white; background: var(--green); border-color: var(--green); } .content { flex: 1; display: grid; } footer { min-height: 44px; display: flex; align-items: center; justify-content: space-between; padding: 0 38px; border-top: 1px solid var(--line); color: #94a098; font-size: 10px; letter-spacing: .04em; } .home-view { padding: 64px clamp(44px, 9vw, 110px) 44px; position: relative; background-image: linear-gradient(90deg, transparent 0 63%, rgba(0,127,95,.035) 63%); } .home-view::after { content: ""; position: absolute; right: 9%; top: 17%; width: 250px; height: 250px; border: 1px solid rgba(0,127,95,.13); border-radius: 50%; box-shadow: 0 0 0 35px rgba(0,127,95,.025), 0 0 0 72px rgba(0,127,95,.018); } .home-view::before { content: "kg"; position: absolute; right: calc(9% + 80px); top: calc(17% + 76px); z-index: 1; color: rgba(0,127,95,.7); font-size: 70px; font-weight: 200; letter-spacing: -.08em; } .eyebrow, .step-kicker { color: var(--green); font-size: 11px; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; } .eyebrow { display: flex; align-items: center; gap: 8px; } .eyebrow span { width: 20px; height: 2px; background: #e5a63c; } h1 { font-size: clamp(48px, 6vw, 70px); line-height: 1.03; letter-spacing: -.06em; margin: 19px 0 24px; max-width: 590px; } h1 em { font-style: normal; color: var(--green); } .home-view > p { color: var(--muted); line-height: 1.85; font-size: 14px; } .primary-cta { margin-top: 30px; min-width: 360px; display: flex; align-items: center; gap: 15px; border: 0; border-radius: 14px; padding: 14px 18px; background: var(--green); color: white; box-shadow: 0 15px 32px rgba(0,127,95,.24); text-align: left; transition: .2s ease; } .primary-cta:hover { transform: translateY(-2px); background: var(--green-dark); } .primary-cta .cta-icon { width: 42px; height: 42px; display: grid; place-items: center; border-radius: 10px; background: rgba(255,255,255,.13); font-size: 21px; } .primary-cta strong, .primary-cta small { display: block; } .primary-cta strong { font-size: 16px; margin-bottom: 4px; } .primary-cta small { font-size: 10px; opacity: .68; } .primary-cta b { margin-left: auto; font-size: 21px; } .admin-link { margin-top: 15px; margin-left: 8px; border: 0; background: none; color: #68746e; font-size: 12px; } .admin-link:hover { color: var(--green); } .home-stats { margin-top: 46px; display: flex; gap: 42px; color: #849088; font-size: 10px; } .home-stats span { padding-left: 12px; border-left: 2px solid #e0e6e1; } .home-stats b { display: block; color: var(--ink); font-size: 13px; margin-bottom: 4px; } .panel-view { width: min(760px, calc(100% - 48px)); margin: 0 auto; padding: 35px 0; } .section-heading { display: flex; justify-content: space-between; gap: 24px; align-items: flex-start; margin-bottom: 24px; } .section-heading h2, .result-view h2 { margin: 7px 0 7px; font-size: 29px; letter-spacing: -.035em; } .section-heading p, .result-view > p { margin: 0; color: var(--muted); font-size: 12px; } .refresh-button { border: 1px solid var(--line); border-radius: 10px; background: white; color: #53615a; font-size: 11px; padding: 10px 14px; } .identity-card { display: flex; align-items: center; gap: 16px; background: #fff; border: 1px solid var(--line); border-radius: 15px; padding: 16px; box-shadow: 0 8px 24px rgba(35,58,46,.05); } .avatar { width: 54px; height: 54px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 14px; background: var(--green); color: white; font-size: 21px; font-weight: 800; } .identity-card small { color: #8c9791; font-size: 10px; } .identity-card h3 { margin: 4px 0; font-size: 19px; } .identity-card p { margin: 0; color: #66736c; font-size: 11px; } .verified { margin-left: auto; background: var(--mint); color: var(--green); padding: 8px 11px; border-radius: 99px; font-size: 10px; font-weight: 700; } .verified.missing { color: #9b6b14; background: #fbf0d7; } .field-label { display: block; margin: 22px 0 8px; font-size: 11px; font-weight: 800; } .machine-picker { height: 52px; display: flex; align-items: center; gap: 10px; border: 1px solid #cfd8d2; border-radius: 12px; background: white; padding: 0 15px; } .machine-picker:focus-within { border-color: var(--green); box-shadow: 0 0 0 3px rgba(0,127,95,.08); } .machine-picker input { flex: 1; border: 0; outline: 0; background: transparent; font-size: 13px; } .machine-picker b { color: var(--green); } .suggestions { margin-top: 6px; border: 1px solid var(--line); border-radius: 12px; background: white; padding: 5px; box-shadow: 0 15px 40px rgba(32,55,44,.1); } .suggestions button { width: 100%; display: flex; align-items: center; gap: 10px; border: 0; border-radius: 8px; background: transparent; padding: 10px; text-align: left; font-size: 12px; } .suggestions button:hover { background: #eef7f2; color: var(--green); } .suggestions button small { margin-left: auto; color: #95a099; } .suggestions p { text-align: center; color: #7f8b84; font-size: 11px; } .full-primary { width: 100%; margin-top: 22px; border: 0; border-radius: 12px; background: var(--green); color: white; padding: 15px 18px; font-size: 13px; font-weight: 800; box-shadow: 0 10px 25px rgba(0,127,95,.18); } .full-primary span { float: right; } .notice { margin-top: 12px; padding: 10px 12px; border-radius: 8px; background: #f7edd8; color: #8b671e; font-size: 10px; } .notice.compact { margin: 10px 0 -10px; } .weigh-view { padding: 22px 32px 28px; } .weigh-meta { display: flex; gap: 0; border: 1px solid var(--line); background: white; border-radius: 11px; padding: 10px 14px; margin-bottom: 14px; } .weigh-meta > span { min-width: 210px; padding-right: 20px; margin-right: 20px; border-right: 1px solid var(--line); } .weigh-meta small, .weigh-meta b { display: block; } .weigh-meta small { color: #8a958f; font-size: 9px; margin-bottom: 4px; } .weigh-meta b { font-size: 11px; } .weigh-meta button { margin-left: auto; border: 0; background: none; color: var(--green); font-size: 10px; font-weight: 800; } .scale-display { border-radius: 18px; background: #112b23; color: white; padding: 17px 24px 15px; box-shadow: inset 0 1px rgba(255,255,255,.08), 0 16px 30px rgba(16,42,33,.17); } .display-top { display: flex; justify-content: space-between; align-items: center; } .stable-badge { color: #e2c680; font-size: 10px; font-weight: 700; } .stable-badge i { display: inline-block; width: 7px; height: 7px; margin-right: 6px; border-radius: 50%; background: #e4b64e; box-shadow: 0 0 0 4px rgba(228,182,78,.13); } .stable-badge.ready { color: #83dfb8; } .stable-badge.ready i { background: #48c78e; box-shadow: 0 0 0 4px rgba(72,199,142,.13); } .unit-switch { display: flex; background: rgba(255,255,255,.07); border-radius: 8px; padding: 3px; } .unit-switch button { border: 0; border-radius: 6px; background: transparent; color: #849b91; font-size: 9px; padding: 5px 9px; } .unit-switch button.active { background: #e8f0ea; color: #15352a; font-weight: 800; } .weight-number { display: flex; justify-content: center; align-items: baseline; gap: 13px; margin: 2px 0; } .weight-number span { font-family: "Courier New", monospace; font-size: clamp(58px, 8vw, 82px); letter-spacing: -.08em; font-weight: 700; } .weight-number b { color: #8da298; font-size: 14px; } .stability-track { height: 3px; background: rgba(255,255,255,.08); border-radius: 4px; overflow: hidden; } .stability-track span { display: block; height: 100%; background: #4bd19a; transition: width .25s; } .display-details { display: flex; justify-content: center; gap: 42px; margin-top: 12px; color: #789187; font-size: 9px; } .display-details b { color: #dbe8e1; margin-left: 5px; } .scale-tools { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 11px 0 16px; } .scale-tools button { display: flex; align-items: center; gap: 10px; border: 1px solid var(--line); border-radius: 10px; background: white; padding: 10px 13px; color: var(--green); text-align: left; font-size: 18px; } .scale-tools button:hover { border-color: #a8cabb; } .scale-tools span, .scale-tools b, .scale-tools small { display: block; } .scale-tools b { color: var(--ink); font-size: 11px; } .scale-tools small { color: #909a94; font-size: 8px; margin-top: 3px; } .material-heading { display: flex; align-items: center; justify-content: space-between; margin-bottom: 9px; } .material-heading span, .material-heading b, .material-heading small { display: block; } .material-heading b { font-size: 12px; } .material-heading small { color: #8b9690; font-size: 9px; margin-top: 3px; } .material-heading em { color: #a16e15; background: #f8eed7; font-style: normal; font-size: 8px; padding: 4px 7px; border-radius: 99px; } .material-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 9px; } .material-card { min-width: 0; display: flex; align-items: center; gap: 10px; position: relative; border: 1px solid var(--line); border-radius: 11px; background: white; padding: 12px 10px; text-align: left; } .material-card:hover { transform: translateY(-1px); } .material-card.selected { border: 2px solid var(--green); background: #f3faf7; padding: 11px 9px; } .material-icon { width: 33px; height: 33px; display: grid; place-items: center; flex: 0 0 auto; border-radius: 9px; font-size: 12px; font-weight: 900; background: #edf1ed; color: #536259; } .material-card.copper .material-icon { background: #f3e2d6; color: #a65e2e; } .material-card.wire .material-icon { background: #f3ead2; color: #b27714; } .material-card.aluminum .material-icon { background: #e5ecee; color: #60747c; } .material-card.tin .material-icon { background: #e5e6ed; color: #62687c; } .material-card b, .material-card small { display: block; white-space: nowrap; } .material-card b { font-size: 11px; } .material-card small { margin-top: 4px; color: #9aa39e; font-size: 6px; } .material-card i { margin-left: auto; font-size: 10px; color: var(--green); font-style: normal; } .full-primary.upload { margin-top: 18px; } .result-view { width: min(520px, calc(100% - 48px)); margin: auto; padding: 28px 0; text-align: center; } .success-ring { width: 66px; height: 66px; display: grid; place-items: center; margin: 0 auto 13px; border-radius: 50%; background: var(--mint); box-shadow: 0 0 0 8px rgba(223,245,237,.55); } .success-ring span { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; background: var(--green); color: white; font-size: 19px; } .receipt { margin-top: 20px; border: 1px solid var(--line); border-radius: 15px; background: white; box-shadow: 0 15px 40px rgba(26,50,38,.08); overflow: hidden; text-align: left; } .receipt-head { display: flex; justify-content: space-between; padding: 12px 18px; border-bottom: 1px dashed #d9e0db; font-size: 10px; font-weight: 800; } .receipt-head small { color: #8c9691; font-weight: 400; } .receipt-weight { display: flex; align-items: center; justify-content: space-between; padding: 15px 20px; background: #f2f8f5; } .receipt-weight small, .receipt-weight b { display: block; } .receipt-weight small { color: var(--green); font-size: 10px; font-weight: 800; } .receipt-weight b { font-family: "Courier New", monospace; font-size: 28px; margin-top: 4px; } .receipt-weight em { font-family: Arial, sans-serif; font-size: 10px; font-style: normal; color: #7d8a83; } .receipt-weight > i { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 11px; background: white; color: var(--green); font-style: normal; font-weight: 900; box-shadow: 0 4px 15px rgba(0,0,0,.05); } .receipt dl { padding: 5px 20px 10px; margin: 0; } .receipt dl div { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #edf0ee; font-size: 10px; } .receipt dl div:last-child { border: 0; } .receipt dt { color: #859189; } .receipt dd { margin: 0; font-weight: 800; } .upload-ok { color: var(--green); } .result-view .full-primary { margin-top: 15px; } .countdown { position: relative; margin-top: 10px; color: #8b9690; font-size: 9px; overflow: hidden; } .countdown span { position: absolute; left: 0; bottom: -4px; height: 2px; background: var(--green); transition: width 1s linear; } .settings-card { background: white; border: 1px solid var(--line); border-radius: 15px; padding: 8px 18px; } .settings-card label { display: grid; grid-template-columns: 160px 1fr; align-items: center; gap: 18px; padding: 13px 0; border-bottom: 1px solid var(--line); } .settings-card label:last-child { border: 0; } .settings-card label > span { font-size: 11px; font-weight: 800; } .settings-card label small { display: block; color: #ac8154; font-size: 8px; margin-top: 4px; font-weight: 400; } .settings-card input { width: 100%; border: 1px solid #d8dfda; border-radius: 8px; background: #fafbf9; padding: 10px 12px; outline: 0; font-size: 10px; } .settings-card input:focus { border-color: var(--green); } .setting-hint { margin-top: 12px; background: #edf5f1; border-radius: 9px; padding: 10px 12px; color: #5f7369; font-size: 9px; } .modal-backdrop { position: fixed; inset: 0; z-index: 10; display: grid; place-items: center; background: rgba(13,31,24,.58); backdrop-filter: blur(5px); padding: 20px; } .modal { width: min(390px, 100%); position: relative; background: #fff; border-radius: 20px; padding: 30px; text-align: center; box-shadow: 0 30px 80px rgba(0,0,0,.28); } .modal-close { position: absolute; right: 14px; top: 11px; border: 0; background: none; color: #89938e; font-size: 24px; } .modal-icon { width: 48px; height: 48px; display: grid; place-items: center; margin: 0 auto 12px; border-radius: 13px; background: var(--mint); color: var(--green); font-size: 22px; } .modal h2 { margin: 0 0 6px; font-size: 23px; } .modal p { color: #87928c; font-size: 11px; } .modal > input { width: 100%; margin-top: 12px; border: 1px solid #cfd8d2; border-radius: 11px; padding: 13px; text-align: center; font-size: 22px; letter-spacing: .45em; outline: 0; } .modal > input:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(0,127,95,.08); } .password-error { display: block; color: #b44b3e; margin-top: 8px; font-size: 9px; } @media (max-width: 760px) { .app-shell { padding: 0; display: block; } .device-frame { min-height: 100vh; border-radius: 0; } .app-header { padding: 0 18px; } .status-pill { font-size: 0; padding: 9px; } .progress-strip { gap: 12px; padding-inline: 12px; } .progress-item { font-size: 9px; gap: 4px; } .home-view { padding: 52px 24px 34px; background-image: none; } .home-view::after, .home-view::before { display: none; } h1 { font-size: 48px; } .primary-cta { min-width: 0; width: 100%; } .home-stats { gap: 15px; justify-content: space-between; } .panel-view { width: calc(100% - 32px); padding: 27px 0; } .section-heading { display: block; } .refresh-button { margin-top: 15px; } .weigh-view { padding: 16px; } .weigh-meta > span { min-width: 0; flex: 1; } .weight-number span { font-size: 54px; } .display-details { gap: 15px; } .scale-tools button { justify-content: center; padding: 10px 5px; } .scale-tools button > span { display: none; } .material-grid { grid-template-columns: repeat(2, 1fr); } .settings-card label { grid-template-columns: 1fr; gap: 7px; } footer { padding: 0 16px; } }