{"title":"White-A-Loy Automatic Mainsprings","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"utf-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n\u003ctitle\u003eWhite-A-Loy Mainsprings by Size — Metric \u0026amp; Dennison | Time Connection II\u003c\/title\u003e\n\u003cmeta name=\"description\" content=\"Order Bestfit White-A-Loy watch mainsprings by height, thickness and length. 18 sizes with metric and Dennison cross-reference. Wholesale, ships from Los Angeles.\"\u003e\n\u003clink rel=\"canonical\" href=\"https:\/\/www.timeconnectioninc.com\/collections\/white-a-loy-mainsprings\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Sans:wght@400;500;600;700\u0026amp;family=IBM+Plex+Mono:wght@500;600\u0026amp;display=swap\"\u003e\n\u003cstyle\u003e\n\/* =========================================================\n   White-A-Loy Mainsprings — shop by size\n   Brand: navy #1b2d42 · accent brass #9a6410 · ground #f4f3ef\n   All selectors are prefixed .wa- so they won't collide with\n   your Shopify theme when pasted into a Custom Liquid section.\n   ========================================================= *\/\n\/* Background is transparent so the section sits on whatever your\n   theme's page background is. Set --ground to a color if you want\n   the soft grey panel look from the design. *\/\n.wa-page{--navy:#1b2d42;--accent:#9a6410;--ink:#1b2d42;--muted:#5b6676;--body:#3d4858;--line:#e3e5ea;--ground:transparent;--soft:#f8f8f5;\n  font-family:'IBM Plex Sans',system-ui,sans-serif;color:var(--ink);background:var(--ground);-webkit-font-smoothing:antialiased;line-height:1.4}\n.wa-page *{box-sizing:border-box}\n.wa-page a{color:var(--ink)}.wa-page a:hover{color:var(--accent)}\n.wa-page button,.wa-page input,.wa-page select{font-family:inherit;font-size:inherit}\n.wa-mono{font-family:'IBM Plex Mono',monospace}\n.wa-wrap{max-width:1280px;margin:0 auto;padding:0 24px}\n.wa-btn{cursor:pointer;border:0;border-radius:4px;font-weight:600;transition:filter .12s,transform .06s;display:inline-flex;align-items:center;justify-content:center;gap:10px}\n.wa-btn:hover{filter:brightness(1.12)}.wa-btn:active{transform:translateY(1px)}\n.wa-btn-primary{background:var(--navy);color:#fff;height:44px;padding:0 18px}\n.wa-btn-accent{background:var(--accent);color:#fff;height:48px;padding:0 18px;font-size:16px}\n.wa-btn-ghost{background:#fff;color:var(--ink);border:1px solid #c5c9d1;height:44px;padding:0 18px}\n.wa-btn-soft{background:#eef0f4;color:var(--ink);height:44px;padding:0 16px}\n.wa-page :focus-visible{outline:3px solid var(--accent);outline-offset:2px}\n\n\/* Breadcrumb + hero — the breadcrumb is part of the heading block,\n   not a separate bar, so it reads as one page with the H1 below it. *\/\n.wa-crumb{font-size:13px;color:var(--muted);margin:0 0 6px}\n.wa-crumb ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px 0}\n.wa-crumb li{display:inline-flex;align-items:center}\n.wa-crumb li+li::before{content:\"›\";margin:0 8px;color:#9aa3b0}\n.wa-crumb a{color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}\n.wa-crumb a:hover{color:var(--accent);border-bottom-color:var(--accent)}\n.wa-crumb [aria-current=\"page\"]{color:var(--ink);font-weight:500}\n.wa-hero{padding:28px 0 28px;display:flex;flex-direction:column;gap:14px;max-width:860px}\n.wa-cartbtn{background:var(--accent);color:#fff;height:40px;padding:0 14px;font-size:14px}\n.wa-cartbtn .wa-count{background:#fff;color:var(--navy);border-radius:999px;min-width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;font-size:12px;padding:0 6px}\n.wa-eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}\n.wa-eyebrow::before{content:\"\";width:28px;height:2px;background:var(--accent);display:inline-block}\n.wa-hero h1{margin:0;font-size:44px;line-height:1.08;font-weight:700;letter-spacing:-.01em}\n.wa-hero p{margin:0;font-size:18px;line-height:1.55;color:var(--body)}\n.wa-trust{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}\n.wa-trust li{background:#fff;border:1px solid var(--line);border-radius:6px;padding:14px 16px;display:flex;gap:12px;align-items:flex-start;font-size:14px}\n.wa-trust svg{flex:none}\n\n\/* Finder *\/\n.wa-card{background:#fff;border:1px solid var(--line);border-radius:8px}\n.wa-finder{padding:22px 24px;display:flex;flex-direction:column;gap:16px}\n.wa-finder-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap}\n.wa-finder h2{margin:0;font-size:20px;font-weight:700}\n.wa-finder-right{display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n.wa-finder-count{font-size:14px;color:var(--muted)}\n.wa-filters{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:12px;align-items:end}\n.wa-field{display:flex;flex-direction:column;gap:6px}\n.wa-field label{font-size:13px;font-weight:600;color:var(--body)}\n.wa-in{border:1px solid #c5c9d1;border-radius:4px;background:#fff;height:44px;padding:0 12px;color:var(--ink);width:100%}\n.wa-in:hover{border-color:#8e95a3}\n.wa-tip{margin:0;font-size:13px;color:var(--muted)}\n\n\/* Table *\/\n.wa-tablecard{margin-top:20px;overflow:hidden}\n.wa-scroll{overflow-x:auto}\n.wa-table{width:100%;border-collapse:collapse;min-width:900px}\n.wa-table thead tr{background:var(--soft);border-bottom:2px solid var(--navy)}\n.wa-table th{text-align:left;padding:14px 14px;font-size:13px;letter-spacing:.04em;text-transform:uppercase;font-weight:600}\n.wa-table th:first-child{padding-left:18px}.wa-table th:last-child,.wa-table td:last-child{text-align:right;padding-right:18px}\n.wa-sort{background:none;border:0;cursor:pointer;color:var(--ink);font-weight:600;font-size:13px;letter-spacing:.04em;text-transform:uppercase;padding:0;display:inline-flex;align-items:center;gap:6px}\n.wa-sort:hover{color:var(--accent)}\n.wa-table td{padding:12px 14px;border-bottom:1px solid #eceef1;font-size:15px;vertical-align:middle}\n.wa-table td:first-child{padding-left:18px;white-space:nowrap}\n.wa-table tbody tr:hover td{background:#fbfaf6}\n.wa-part{display:flex;flex-direction:column;gap:3px}\n.wa-part strong{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:15px}\n.wa-part span{font-size:12px;color:var(--muted)}\n.wa-dim{font-family:'IBM Plex Mono',monospace}\n.wa-price{white-space:nowrap}\n.wa-price a{font-size:13px;font-weight:600;color:var(--accent);text-decoration:none}\n.wa-price small{font-size:12px;color:var(--muted)}\n.wa-qty{display:inline-flex;border:1px solid #c5c9d1;border-radius:4px;overflow:hidden;align-items:center}\n.wa-step{width:36px;height:40px;border:0;background:#fff;cursor:pointer;color:var(--ink);font-size:18px;line-height:1}\n.wa-step:hover{background:#eef0f4}\n.wa-qty output{min-width:36px;text-align:center;font-weight:600;font-family:'IBM Plex Mono',monospace}\n.wa-addcell{white-space:nowrap}\n.wa-addwrap{display:inline-flex;flex-direction:column;align-items:flex-end;gap:4px}\n.wa-add{height:40px;padding:0 16px;font-size:14px}\n.wa-incart{font-size:12px;color:var(--accent);font-weight:600;min-height:14px}\n.wa-empty{padding:36px 24px;text-align:center;display:none;flex-direction:column;gap:10px;align-items:center}\n.wa-empty strong{font-size:17px}.wa-empty span{color:var(--muted);font-size:14px;max-width:520px}\n.wa-tablefoot{padding:12px 18px;background:var(--soft);border-top:1px solid #eceef1;font-size:13px;color:var(--muted);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}\n\n\/* How-to, FAQ, related *\/\n.wa-section{margin-top:44px;display:flex;flex-direction:column;gap:18px}\n.wa-section h2{margin:0;font-size:28px;font-weight:700;letter-spacing:-.01em}\n.wa-section\u003ep{margin:0;max-width:760px;font-size:16px;line-height:1.55;color:var(--body)}\n.wa-how{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}\n.wa-how article{background:#fff;border:1px solid var(--line);border-radius:8px;padding:22px;display:flex;flex-direction:column;gap:10px}\n.wa-how .wa-num{font-family:'IBM Plex Mono',monospace;font-size:13px;font-weight:600;color:var(--accent)}\n.wa-how h3{margin:0;font-size:18px}.wa-how p{margin:0;font-size:15px;line-height:1.5;color:var(--body)}\n.wa-dennison{background:var(--navy);color:#fff;border-radius:8px;padding:20px 24px;display:flex;gap:20px;align-items:center;flex-wrap:wrap}\n.wa-dennison .wa-num{font-family:'IBM Plex Mono',monospace;font-size:13px;letter-spacing:.08em;color:#b7c0cc}\n.wa-dennison span:last-child{font-size:15px;line-height:1.5;max-width:820px}\n.wa-faqcard{margin-top:44px;padding:6px 24px 10px}\n.wa-faqcard h2{margin:18px 0 10px;font-size:28px;font-weight:700;letter-spacing:-.01em}\n.wa-faq{width:100%;text-align:left;background:#fff;border:0;border-top:1px solid var(--line);padding:18px 4px;cursor:pointer;font-weight:600;font-size:17px;color:var(--ink);display:flex;justify-content:space-between;align-items:center;gap:16px}\n.wa-faq:hover{color:var(--accent)}\n.wa-faq .wa-icon{font-size:22px;color:var(--accent);font-weight:400}\n.wa-faq+p{margin:0 0 18px;padding:0 4px;font-size:15px;line-height:1.55;color:var(--body);max-width:820px;display:none}\n.wa-faq[aria-expanded=\"true\"]+p{display:block}\n.wa-related{margin-bottom:56px}\n.wa-related h2{font-size:22px}\n.wa-relgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}\n.wa-relgrid a{background:#fff;border:1px solid var(--line);border-radius:8px;padding:20px;display:flex;flex-direction:column;gap:6px;text-decoration:none}\n.wa-relgrid strong{font-size:16px}.wa-relgrid span{font-size:14px;color:var(--muted)}\n\n\/* Cart drawer *\/\n.wa-overlay{position:fixed;inset:0;z-index:9999;display:none;justify-content:flex-end}\n.wa-overlay.is-open{display:flex}\n.wa-scrim{position:absolute;inset:0;border:0;background:rgba(27,45,66,.55);cursor:pointer}\n.wa-drawer{position:relative;width:440px;max-width:100%;height:100%;background:#fff;display:flex;flex-direction:column;box-shadow:-12px 0 40px rgba(0,0,0,.25);font-family:'IBM Plex Sans',system-ui,sans-serif;color:var(--ink)}\n.wa-drawer-head{padding:18px 22px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}\n.wa-drawer-head h2{margin:0;font-size:20px}\n.wa-close{background:#eef0f4;color:var(--ink);width:40px;height:40px;font-size:20px}\n.wa-lines{flex:1 1 auto;overflow-y:auto;padding:8px 22px}\n.wa-line{display:flex;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid #eceef1}\n.wa-line-info{flex:1 1 auto;display:flex;flex-direction:column;gap:3px;min-width:0}\n.wa-line-info strong{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:15px}\n.wa-line-info span{font-size:12px;color:var(--muted)}\n.wa-line .wa-qty output{min-width:32px}\n.wa-line-total{min-width:64px;text-align:right;font-weight:600;font-size:14px}\n.wa-remove{background:none;border:0;cursor:pointer;color:var(--muted);width:36px;height:36px;font-size:18px}\n.wa-drawer-foot{padding:18px 22px;border-top:1px solid var(--line);background:var(--soft);display:flex;flex-direction:column;gap:12px}\n.wa-totals{display:flex;justify-content:space-between;font-size:15px}\n.wa-ship{font-size:13px;color:var(--muted)}\n.wa-cart-empty{padding:48px 22px;text-align:center;color:var(--muted);display:flex;flex-direction:column;gap:10px;align-items:center}\n\n@media (max-width:720px){\n  .wa-filters{grid-template-columns:1fr}\n  .wa-hero h1{font-size:34px}\n  .wa-trust,.wa-how,.wa-relgrid{grid-template-columns:1fr}\n  .wa-drawer{width:100%}\n}\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"wa-page\"\u003e\n\n  \u003cmain\u003e\n    \u003cdiv class=\"wa-wrap\"\u003e\n\n      \u003csection class=\"wa-hero\"\u003e\n        \u003cnav class=\"wa-crumb\" aria-label=\"Breadcrumb\"\u003e\n          \u003col\u003e\n            \u003cli\u003e\u003ca href=\"\/\"\u003eHome\u003c\/a\u003e\u003c\/li\u003e\n            \u003cli\u003e\u003ca href=\"\/collections\/watch-parts\"\u003eWatch Parts\u003c\/a\u003e\u003c\/li\u003e\n            \u003cli\u003e\u003ca href=\"\/search?q=mainspring\"\u003eMainsprings\u003c\/a\u003e\u003c\/li\u003e\n            \u003cli aria-current=\"page\"\u003eWhite-A-Loy by Size\u003c\/li\u003e\n          \u003c\/ol\u003e\n        \u003c\/nav\u003e\n        \u003cspan class=\"wa-eyebrow\"\u003eBestfit MSS-WA Series\u003c\/span\u003e\n        \u003ch1\u003eWhite-A-Loy Mainsprings — Order by Size\u003c\/h1\u003e\n        \u003cp\u003eShop white-alloy watch mainsprings by height, thickness and length. Every size is listed in both metric (mm) and Dennison gauge, so you can match the spring in the barrel or the number on the old packet. Filter to your measurement, set a quantity and add to cart — no scrolling through a flat list.\u003c\/p\u003e\n        \u003cul class=\"wa-trust\"\u003e\n          \u003cli\u003e\n\u003csvg aria-hidden=\"true\" width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#9a6410\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M3 12h4l3-8 4 16 3-8h4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cstrong\u003e18 sizes\u003c\/strong\u003e from 0.80 mm to 1.70 mm height\u003c\/span\u003e\n\u003c\/li\u003e\n          \u003cli\u003e\n\u003csvg aria-hidden=\"true\" width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#9a6410\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpath d=\"M4 7h16M4 12h16M4 17h10\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cstrong\u003eMetric + Dennison\u003c\/strong\u003e cross-reference on every row\u003c\/span\u003e\n\u003c\/li\u003e\n          \u003cli\u003e\n\u003csvg aria-hidden=\"true\" width=\"22\" height=\"22\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"#9a6410\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003crect x=\"1\" y=\"3\" width=\"15\" height=\"13\" rx=\"1\"\u003e\u003c\/rect\u003e\u003cpath d=\"M16 8h4l3 3v5h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\u003cspan\u003e\u003cstrong\u003eFree shipping\u003c\/strong\u003e on orders over $\u003cspan data-wa-freeship\u003e375\u003c\/span\u003e (up to 5 lbs)\u003c\/span\u003e\n\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"wa-card wa-finder\" aria-labelledby=\"wa-finder-h\"\u003e\n        \u003cdiv class=\"wa-finder-head\"\u003e\n          \u003ch2 id=\"wa-finder-h\"\u003eFind your size\u003c\/h2\u003e\n          \u003cdiv class=\"wa-finder-right\"\u003e\n            \u003cspan class=\"wa-finder-count\" aria-live=\"polite\"\u003eShowing \u003cstrong data-wa-shown\u003e18\u003c\/strong\u003e of \u003cspan data-wa-total\u003e18\u003c\/span\u003e mainsprings\u003c\/span\u003e\n            \u003cbutton class=\"wa-btn wa-cartbtn\" type=\"button\" data-wa-open-cart aria-label=\"Open cart\"\u003e\n              \u003csvg aria-hidden=\"true\" width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003ccircle cx=\"9\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"20\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e\u003cpath d=\"M1 1h4l2.7 13.4a2 2 0 0 0 2 1.6h9.7a2 2 0 0 0 2-1.6L23 6H6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n              \u003cspan\u003eCart\u003c\/span\u003e\u003cspan class=\"wa-count\" data-wa-cart-count\u003e0\u003c\/span\u003e\n            \u003c\/button\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cform class=\"wa-filters\" data-wa-filters onsubmit=\"return false\"\u003e\n          \u003cdiv class=\"wa-field\"\u003e\n\u003clabel for=\"wa-q\"\u003eSearch part # or size\u003c\/label\u003e\u003cinput id=\"wa-q\" class=\"wa-in\" type=\"search\" placeholder=\"e.g. WA19, 1.40, 5 x 11\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"wa-field\"\u003e\n\u003clabel for=\"wa-fh\"\u003eHeight (mm)\u003c\/label\u003e\u003cselect id=\"wa-fh\" class=\"wa-in\"\u003e\u003c\/select\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"wa-field\"\u003e\n\u003clabel for=\"wa-ft\"\u003eThickness (mm)\u003c\/label\u003e\u003cselect id=\"wa-ft\" class=\"wa-in\"\u003e\u003c\/select\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"wa-field\"\u003e\n\u003clabel for=\"wa-fl\"\u003eLength (mm)\u003c\/label\u003e\u003cselect id=\"wa-fl\" class=\"wa-in\"\u003e\u003c\/select\u003e\n\u003c\/div\u003e\n          \u003cbutton class=\"wa-btn wa-btn-soft\" type=\"button\" data-wa-reset\u003eClear\u003c\/button\u003e\n        \u003c\/form\u003e\n        \u003cp class=\"wa-tip\"\u003eTip: match \u003cstrong\u003eheight\u003c\/strong\u003e first (it must fit the barrel), then thickness, then the closest length.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"wa-card wa-tablecard\" aria-labelledby=\"wa-table-h\"\u003e\n        \u003ch2 id=\"wa-table-h\" style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)\"\u003eWhite-A-Loy mainspring size chart\u003c\/h2\u003e\n        \u003cdiv class=\"wa-scroll\"\u003e\n          \u003ctable class=\"wa-table\"\u003e\n            \u003cthead\u003e\n              \u003ctr\u003e\n                \u003cth scope=\"col\"\u003e\u003cbutton class=\"wa-sort\" type=\"button\" data-wa-sort=\"num\"\u003ePart No. \u003cspan aria-hidden=\"true\" data-wa-arrow=\"num\"\u003e↑\u003c\/span\u003e\u003c\/button\u003e\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003e\u003cbutton class=\"wa-sort\" type=\"button\" data-wa-sort=\"h\"\u003eHeight \u003cspan aria-hidden=\"true\" data-wa-arrow=\"h\"\u003e↕\u003c\/span\u003e\u003c\/button\u003e\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003e\u003cbutton class=\"wa-sort\" type=\"button\" data-wa-sort=\"t\"\u003eThickness \u003cspan aria-hidden=\"true\" data-wa-arrow=\"t\"\u003e↕\u003c\/span\u003e\u003c\/button\u003e\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003e\u003cbutton class=\"wa-sort\" type=\"button\" data-wa-sort=\"l\"\u003eLength \u003cspan aria-hidden=\"true\" data-wa-arrow=\"l\"\u003e↕\u003c\/span\u003e\u003c\/button\u003e\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003eDennison \u003cspan style=\"font-weight:400;text-transform:none;letter-spacing:0;color:#5b6676\"\u003eH × T × L\u003c\/span\u003e\n\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003ePrice\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003eQty\u003c\/th\u003e\n                \u003cth scope=\"col\"\u003eAdd\u003c\/th\u003e\n              \u003c\/tr\u003e\n            \u003c\/thead\u003e\n            \u003ctbody data-wa-rows\u003e\u003c\/tbody\u003e\n          \u003c\/table\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"wa-empty\" data-wa-empty\u003e\n          \u003cstrong\u003eNo White-A-Loy spring matches that exactly.\u003c\/strong\u003e\n          \u003cspan\u003eTry clearing the length filter — a slightly different length usually works if height and thickness match. Or email \u003ca href=\"mailto:support@timeconnectioninc.com\"\u003esupport@timeconnectioninc.com\u003c\/a\u003e with your measurement.\u003c\/span\u003e\n          \u003cbutton class=\"wa-btn wa-btn-primary\" type=\"button\" data-wa-reset\u003eClear filters\u003c\/button\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"wa-tablefoot\"\u003e\n          \u003cspan\u003eMetric sizes are height × thickness × length in millimetres. Dennison gauge shown for cross-reference.\u003c\/span\u003e\n          \u003cspan\u003eSold [per piece \/ pack of N] · Wholesale accounts only\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"wa-section\" aria-labelledby=\"wa-how-h\"\u003e\n        \u003ch2 id=\"wa-how-h\"\u003eHow to read a mainspring size\u003c\/h2\u003e\n        \u003cp\u003eA mainspring is specified by three measurements. Here is what each one means so you order the right spring the first time.\u003c\/p\u003e\n        \u003cdiv class=\"wa-how\"\u003e\n          \u003carticle\u003e\u003cspan class=\"wa-num\"\u003e01 · HEIGHT\u003c\/span\u003e\u003ch3\u003eThe width of the strip\u003c\/h3\u003e\n\u003cp\u003eMeasured across the flat face of the spring, in mm (0.80–1.70 in this series). It must fit the inside height of the barrel — this is the one measurement that has to match.\u003c\/p\u003e\u003c\/article\u003e\n          \u003carticle\u003e\u003cspan class=\"wa-num\"\u003e02 · THICKNESS\u003c\/span\u003e\u003ch3\u003eThe strength of the spring\u003c\/h3\u003e\n\u003cp\u003eThe gauge of the steel, in mm (0.055–0.115 here). Thicker means more torque; too thick and the movement over-banks, too thin and it loses amplitude. Stay as close to original as you can.\u003c\/p\u003e\u003c\/article\u003e\n          \u003carticle\u003e\u003cspan class=\"wa-num\"\u003e03 · LENGTH\u003c\/span\u003e\u003ch3\u003ePower reserve\u003c\/h3\u003e\n\u003cp\u003eTotal uncoiled length in mm (200–380 in this series). Length sets how many turns the barrel holds; a small difference is usually acceptable when height and thickness match.\u003c\/p\u003e\u003c\/article\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"wa-dennison\"\u003e\n\u003cspan class=\"wa-num\"\u003eDENNISON GAUGE\u003c\/span\u003e\u003cspan\u003eOlder American and British material houses sized springs with the Dennison gauge instead of millimetres. The Dennison column of the chart gives the equivalent (height × thickness × length) so you can order from the number printed on an old packet or in a parts book.\u003c\/span\u003e\n\u003c\/div\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"wa-card wa-faqcard\" aria-labelledby=\"wa-faq-h\"\u003e\n        \u003ch2 id=\"wa-faq-h\"\u003eOrdering questions\u003c\/h2\u003e\n        \u003cdiv\u003e\n          \u003cbutton class=\"wa-faq\" type=\"button\" aria-expanded=\"true\"\u003e\u003cspan\u003eWhat do the three numbers in a mainspring size mean?\u003c\/span\u003e\u003cspan class=\"wa-icon\" aria-hidden=\"true\"\u003e−\u003c\/span\u003e\u003c\/button\u003e\n          \u003cp\u003eHeight × thickness × length. Height is the width of the strip and must match the inside of the barrel. Thickness sets the torque, and length sets how many turns the barrel stores. The chart gives each in millimetres with the Dennison gauge equivalent beside it.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv\u003e\n          \u003cbutton class=\"wa-faq\" type=\"button\" aria-expanded=\"false\"\u003e\u003cspan\u003eMy exact length is not listed. Which one should I order?\u003c\/span\u003e\u003cspan class=\"wa-icon\" aria-hidden=\"true\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cp\u003eMatch height first, then thickness, then pick the nearest length — a small difference in length is usually acceptable. If height or thickness differ from the original, email support@timeconnectioninc.com with the caliber and we will check the fit before you order.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv\u003e\n          \u003cbutton class=\"wa-faq\" type=\"button\" aria-expanded=\"false\"\u003e\u003cspan\u003eHow are White-A-Loy mainsprings packed?\u003c\/span\u003e\u003cspan class=\"wa-icon\" aria-hidden=\"true\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cp\u003e[Enter your packing: e.g. one spring per sealed packet with the MSS-WA number printed on it, and any case-quantity discount you offer.]\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv\u003e\n          \u003cbutton class=\"wa-faq\" type=\"button\" aria-expanded=\"false\"\u003e\u003cspan\u003eDo I need an account to see prices and order?\u003c\/span\u003e\u003cspan class=\"wa-icon\" aria-hidden=\"true\"\u003e+\u003c\/span\u003e\u003c\/button\u003e\n          \u003cp\u003eTime Connection II is a wholesale supplier, so prices show after you log in to a registered wholesale account. Registration is free for trade customers. Retail buyers can order the same parts at WatchPartsDepot.com.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"wa-section wa-related\" aria-labelledby=\"wa-rel-h\"\u003e\n        \u003ch2 id=\"wa-rel-h\"\u003eYou may also need\u003c\/h2\u003e\n        \u003cdiv class=\"wa-relgrid\"\u003e\n          \u003ca href=\"\/collections\/mainspring-winders\"\u003e\u003cstrong\u003eMainspring winders\u003c\/strong\u003e\u003cspan\u003eBergeon and Horotec winders and arbors for installing new springs cleanly.\u003c\/span\u003e\u003c\/a\u003e\n          \u003ca href=\"\/collections\/internal-replacement-parts-mainsprings-for-rolex-at-time-connection-ii-inc\"\u003e\u003cstrong\u003eMainsprings for Rolex calibers\u003c\/strong\u003e\u003cspan\u003eCaliber-specific replacement springs for 15, 30 and 31 series movements.\u003c\/span\u003e\u003c\/a\u003e\n          \u003ca href=\"\/pages\/contact\"\u003e\u003cstrong\u003eCan't find a size?\u003c\/strong\u003e\u003cspan\u003eSend us the measurement or caliber and we'll match it from our full mainspring stock.\u003c\/span\u003e\u003c\/a\u003e\n        \u003c\/div\u003e\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n  \u003c\/main\u003e\n\n  \u003c!-- Cart drawer --\u003e\n  \u003cdiv class=\"wa-overlay\" data-wa-overlay\u003e\n    \u003cbutton class=\"wa-scrim\" type=\"button\" data-wa-close-cart aria-label=\"Close cart\"\u003e\u003c\/button\u003e\n    \u003caside class=\"wa-drawer\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Your cart\"\u003e\n      \u003cdiv class=\"wa-drawer-head\"\u003e\n\u003ch2 data-wa-drawer-title\u003eYour cart\u003c\/h2\u003e\n\u003cbutton class=\"wa-btn wa-close\" type=\"button\" data-wa-close-cart aria-label=\"Close\"\u003e×\u003c\/button\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"wa-cart-empty\" data-wa-cart-empty\u003e\n        \u003cspan style=\"font-size:16px\"\u003eYour cart is empty.\u003c\/span\u003e\n        \u003cspan style=\"font-size:14px\"\u003ePick a size from the chart and press Add to cart.\u003c\/span\u003e\n        \u003cbutton class=\"wa-btn wa-btn-primary\" type=\"button\" data-wa-close-cart style=\"margin-top:8px\"\u003eBack to sizes\u003c\/button\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"wa-lines\" data-wa-lines hidden\u003e\u003c\/div\u003e\n      \u003cdiv class=\"wa-drawer-foot\" data-wa-foot hidden\u003e\n        \u003cdiv class=\"wa-totals\"\u003e\n\u003cspan data-wa-summary\u003e0 pieces · 0 sizes\u003c\/span\u003e\u003cstrong data-wa-subtotal\u003ePriced at checkout\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cspan class=\"wa-ship\" data-wa-ship\u003e\u003c\/span\u003e\n        \u003ca class=\"wa-btn wa-btn-accent\" data-wa-checkout href=\"\/cart\"\u003eProceed to checkout\u003c\/a\u003e\n        \u003cbutton class=\"wa-btn wa-btn-ghost\" type=\"button\" data-wa-close-cart\u003eContinue shopping\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/aside\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript type=\"application\/ld+json\"\u003e\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n {\"@type\":\"Question\",\"name\":\"What do the three numbers in a mainspring size mean?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Height × thickness × length. Height is the width of the strip and must match the inside of the barrel. Thickness sets the torque, and length sets how many turns the barrel stores. Each is given in millimetres with the Dennison gauge equivalent.\"}},\n {\"@type\":\"Question\",\"name\":\"My exact length is not listed. Which one should I order?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Match height first, then thickness, then pick the nearest length. A small difference in length is usually acceptable. If height or thickness differ from the original, email support@timeconnectioninc.com with the caliber before ordering.\"}},\n {\"@type\":\"Question\",\"name\":\"Do I need an account to see prices and order?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Time Connection II is a wholesale supplier, so prices show after you log in to a registered wholesale account. Retail buyers can order the same parts at WatchPartsDepot.com.\"}}\n]}\n\u003c\/script\u003e\n\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  \/* =========================================================\n     CONFIG — the only block you need to edit\n     ---------------------------------------------------------\n     unitPrice : 0 shows \"Login to see price\" on every row (your\n                 wholesale gate). Set a number, or give each item its\n                 own `price`, to show priced rows and cart totals.\n     freeShip  : free-shipping threshold in dollars.\n     variantId : Shopify variant ID for each SKU. When set and the\n                 page is on your Shopify store, Add to cart posts to\n                 \/cart\/add.js and the real Shopify cart is used.\n                 Find IDs in Admin → Products → (product) → Variants,\n                 or at \/products\/\u003chandle\u003e.js.\n     breadcrumb: the \"Mainsprings\" crumb points to a site search until\n                 you create a parent Mainsprings collection; then change\n                 the href in the \u003cnav class=\"wa-crumb\"\u003e to that URL.\n     ========================================================= *\/\n  var CONFIG = {\n    unitPrice: 0,\n    freeShip: 375,\n    checkoutUrl: '\/cart',\n    loginUrl: '\/account\/login'\n  };\n\n  var ITEMS = [\n    { id: 'MSS-WA1',  h: '1.40', t: '0.11',  l: '360', dh: '4½', dt: '9½',  dl: '14½', variantId: null, price: null },\n    { id: 'MSS-WA2',  h: '0.80', t: '0.07',  l: '200', dh: '00', dt: '14',  dl: '8',   variantId: null, price: null },\n    { id: 'MSS-WA10', h: '1.60', t: '0.075', l: '240', dh: '7',  dt: '13½', dl: '9',   variantId: null, price: null },\n    { id: 'MSS-WA11', h: '1.00', t: '0.095', l: '340', dh: '1',  dt: '12',  dl: '13',  variantId: null, price: null },\n    { id: 'MSS-WA17', h: '1.50', t: '0.06',  l: '240', dh: '6',  dt: '14½', dl: '8½',  variantId: null, price: null },\n    { id: 'MSS-WA19', h: '1.45', t: '0.10',  l: '360', dh: '5',  dt: '11',  dl: '13½', variantId: null, price: null },\n    { id: 'MSS-WA20', h: '1.70', t: '0.095', l: '300', dh: '7½', dt: '11',  dl: '11½', variantId: null, price: null },\n    { id: 'MSS-WA21', h: '1.40', t: '0.09',  l: '300', dh: '5',  dt: '11½', dl: '12',  variantId: null, price: null },\n    { id: 'MSS-WA26', h: '1.40', t: '0.07',  l: '200', dh: '5',  dt: '14',  dl: '7½',  variantId: null, price: null },\n    { id: 'MSS-WA27', h: '1.20', t: '0.055', l: '220', dh: '3',  dt: '16',  dl: '8¾',  variantId: null, price: null },\n    { id: 'MSS-WA30', h: '1.30', t: '0.075', l: '240', dh: '4',  dt: '13',  dl: '9',   variantId: null, price: null },\n    { id: 'MSS-WA46', h: '1.30', t: '0.08',  l: '280', dh: '4',  dt: '13',  dl: '10',  variantId: null, price: null },\n    { id: 'MSS-WA49', h: '1.45', t: '0.11',  l: '380', dh: '5½', dt: '10',  dl: '14¾', variantId: null, price: null },\n    { id: 'MSS-WA58', h: '1.40', t: '0.10',  l: '340', dh: '5',  dt: '11',  dl: '13¾', variantId: null, price: null },\n    { id: 'MSS-WA66', h: '1.20', t: '0.09',  l: '330', dh: '3',  dt: '12',  dl: '13',  variantId: null, price: null },\n    { id: 'MSS-WA85', h: '1.25', t: '0.10',  l: '340', dh: '2½', dt: '12',  dl: '13¼', variantId: null, price: null },\n    { id: 'MSS-WA90', h: '1.30', t: '0.07',  l: '280', dh: '4',  dt: '14',  dl: '11',  variantId: null, price: null },\n    { id: 'MSS-WA96', h: '1.45', t: '0.115', l: '360', dh: '5½', dt: '11',  dl: '13½', variantId: null, price: null }\n  ];\n\n  \/* ---------- state ---------- *\/\n  var state = { q: '', fh: 'all', ft: 'all', fl: 'all', sortKey: 'num', sortDir: 1, qty: {}, cart: {} };\n  var byId = {};\n  ITEMS.forEach(function (d) {\n    d.num = parseInt(d.id.replace('MSS-WA', ''), 10);\n    d.hn = parseFloat(d.h); d.tn = parseFloat(d.t); d.ln = parseFloat(d.l);\n    d.metric = d.h + ' x ' + d.t + ' x ' + d.l;\n    d.dennison = d.dh + ' × ' + d.dt + ' × ' + d.dl;\n    d.hay = [d.id, d.id.replace('MSS-', ''), String(d.num), d.metric, d.metric.replace(\/ x \/g, 'x'), d.dennison, d.dennison.replace(\/ × \/g, 'x'), d.dennison.replace(\/ × \/g, ' x ')].join(' ').toLowerCase();\n    byId[d.id] = d;\n  });\n\n  var $ = function (sel, root) { return (root || document).querySelector(sel); };\n  var $$ = function (sel, root) { return Array.prototype.slice.call((root || document).querySelectorAll(sel)); };\n  var esc = function (s) { return String(s).replace(\/[\u0026\u003c\u003e\"]\/g, function (c) { return { '\u0026': '\u0026amp;', '\u003c': '\u0026lt;', '\u003e': '\u0026gt;', '\"': '\u0026quot;' }[c]; }); };\n  var money = function (n) { return '$' + n.toFixed(2); };\n  var priceOf = function (d) { var p = d.price != null ? Number(d.price) : Number(CONFIG.unitPrice); return p \u003e 0 ? p : 0; };\n\n  \/* ---------- filters ---------- *\/\n  function fillSelect(sel, key, label) {\n    var seen = {}; var vals = [];\n    ITEMS.forEach(function (d) { if (!seen[d[key]]) { seen[d[key]] = true; vals.push(d[key]); } });\n    vals.sort(function (a, b) { return parseFloat(a) - parseFloat(b); });\n    sel.innerHTML = '\u003coption value=\"all\"\u003eAny ' + label + '\u003c\/option\u003e' + vals.map(function (v) { return '\u003coption value=\"' + v + '\"\u003e' + v + ' mm\u003c\/option\u003e'; }).join('');\n  }\n  fillSelect($('#wa-fh'), 'h', 'height');\n  fillSelect($('#wa-ft'), 't', 'thickness');\n  fillSelect($('#wa-fl'), 'l', 'length');\n\n  $('#wa-q').addEventListener('input', function (e) { state.q = e.target.value; renderRows(); });\n  $('#wa-fh').addEventListener('change', function (e) { state.fh = e.target.value; renderRows(); });\n  $('#wa-ft').addEventListener('change', function (e) { state.ft = e.target.value; renderRows(); });\n  $('#wa-fl').addEventListener('change', function (e) { state.fl = e.target.value; renderRows(); });\n  $$('[data-wa-reset]').forEach(function (b) {\n    b.addEventListener('click', function () {\n      state.q = ''; state.fh = state.ft = state.fl = 'all';\n      $('#wa-q').value = ''; $('#wa-fh').value = $('#wa-ft').value = $('#wa-fl').value = 'all';\n      renderRows();\n    });\n  });\n  $$('[data-wa-sort]').forEach(function (b) {\n    b.addEventListener('click', function () {\n      var key = b.getAttribute('data-wa-sort');\n      state.sortDir = state.sortKey === key ? -state.sortDir : 1;\n      state.sortKey = key;\n      renderRows();\n    });\n  });\n\n  \/* ---------- table ---------- *\/\n  function visibleRows() {\n    var q = state.q.trim().toLowerCase().replace(\/\\s+\/g, ' ');\n    var keyMap = { num: 'num', h: 'hn', t: 'tn', l: 'ln' };\n    var sk = keyMap[state.sortKey];\n    return ITEMS.filter(function (r) {\n      if (q \u0026\u0026 r.hay.indexOf(q) === -1) return false;\n      if (state.fh !== 'all' \u0026\u0026 r.h !== state.fh) return false;\n      if (state.ft !== 'all' \u0026\u0026 r.t !== state.ft) return false;\n      if (state.fl !== 'all' \u0026\u0026 r.l !== state.fl) return false;\n      return true;\n    }).sort(function (a, b) { return (a[sk] - b[sk]) * state.sortDir || (a.num - b.num); });\n  }\n\n  function renderRows() {\n    var rows = visibleRows();\n    $('[data-wa-rows]').innerHTML = rows.map(function (r) {\n      var qty = state.qty[r.id] || 1;\n      var inCart = state.cart[r.id] || 0;\n      var p = priceOf(r);\n      var priceCell = p \u003e 0\n        ? '\u003cstrong\u003e' + money(p) + '\u003c\/strong\u003e \u003csmall\u003eea\u003c\/small\u003e'\n        : '\u003ca href=\"' + CONFIG.loginUrl + '\"\u003eLogin to see price\u003c\/a\u003e';\n      return '\u003ctr data-wa-row=\"' + esc(r.id) + '\"\u003e' +\n        '\u003ctd\u003e\u003cdiv class=\"wa-part\"\u003e\u003cstrong\u003e' + esc(r.id) + '\u003c\/strong\u003e\u003cspan\u003eWhite-A-Loy · ' + esc(r.metric) + ' mm\u003c\/span\u003e\u003c\/div\u003e\u003c\/td\u003e' +\n        '\u003ctd class=\"wa-dim\"\u003e' + r.h + '\u003c\/td\u003e\u003ctd class=\"wa-dim\"\u003e' + r.t + '\u003c\/td\u003e\u003ctd class=\"wa-dim\"\u003e' + r.l + '\u003c\/td\u003e' +\n        '\u003ctd class=\"wa-dim\" style=\"white-space:nowrap\"\u003e' + esc(r.dennison) + '\u003c\/td\u003e' +\n        '\u003ctd class=\"wa-price\"\u003e' + priceCell + '\u003c\/td\u003e' +\n        '\u003ctd\u003e\u003cdiv class=\"wa-qty\"\u003e\u003cbutton class=\"wa-step\" type=\"button\" data-wa-dec aria-label=\"Decrease quantity\"\u003e−\u003c\/button\u003e\u003coutput aria-live=\"polite\"\u003e' + qty + '\u003c\/output\u003e\u003cbutton class=\"wa-step\" type=\"button\" data-wa-inc aria-label=\"Increase quantity\"\u003e+\u003c\/button\u003e\u003c\/div\u003e\u003c\/td\u003e' +\n        '\u003ctd class=\"wa-addcell\"\u003e\u003cdiv class=\"wa-addwrap\"\u003e\u003cbutton class=\"wa-btn wa-btn-primary wa-add\" type=\"button\" data-wa-add\u003eAdd to cart\u003c\/button\u003e\u003cspan class=\"wa-incart\"\u003e' + (inCart ? inCart + ' in cart' : '') + '\u003c\/span\u003e\u003c\/div\u003e\u003c\/td\u003e' +\n      '\u003c\/tr\u003e';\n    }).join('');\n    $('[data-wa-shown]').textContent = rows.length;\n    $('[data-wa-total]').textContent = ITEMS.length;\n    $('[data-wa-empty]').style.display = rows.length ? 'none' : 'flex';\n    $$('[data-wa-arrow]').forEach(function (a) {\n      var k = a.getAttribute('data-wa-arrow');\n      a.textContent = state.sortKey !== k ? '↕' : (state.sortDir === 1 ? '↑' : '↓');\n    });\n  }\n\n  $('[data-wa-rows]').addEventListener('click', function (e) {\n    var tr = e.target.closest('[data-wa-row]'); if (!tr) return;\n    var id = tr.getAttribute('data-wa-row');\n    var qty = state.qty[id] || 1;\n    if (e.target.closest('[data-wa-inc]')) { state.qty[id] = Math.min(99, qty + 1); renderRows(); }\n    else if (e.target.closest('[data-wa-dec]')) { state.qty[id] = Math.max(1, qty - 1); renderRows(); }\n    else if (e.target.closest('[data-wa-add]')) { addToCart(id, qty); }\n  });\n\n  \/* ---------- cart ---------- *\/\n  function onShopify() { return typeof window.Shopify !== 'undefined' \u0026\u0026 \/myshopify\\.com|timeconnectioninc\\.com\/.test(location.hostname); }\n\n  function addToCart(id, qty) {\n    var item = byId[id];\n    state.cart[id] = Math.min(999, (state.cart[id] || 0) + qty);\n    renderRows(); renderCart(); openCart();\n    \/\/ Real Shopify cart: post the line and let the theme's cart take over.\n    if (onShopify() \u0026\u0026 item.variantId) {\n      fetch('\/cart\/add.js', { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ items: [{ id: item.variantId, quantity: qty }] }) })\n        .then(function (r) { return r.json(); })\n        .then(function () { document.dispatchEvent(new CustomEvent('cart:refresh')); })\n        .catch(function () { \/* keep the local drawer as the fallback *\/ });\n    }\n  }\n  function setCart(id, n) {\n    if (n \u003c= 0) delete state.cart[id]; else state.cart[id] = Math.min(999, n);\n    renderRows(); renderCart();\n    if (onShopify() \u0026\u0026 byId[id].variantId) {\n      fetch('\/cart\/change.js', { method: 'POST', headers: { 'Content-Type': 'application\/json' }, body: JSON.stringify({ id: byId[id].variantId, quantity: Math.max(0, n) }) }).catch(function () {});\n    }\n  }\n\n  function renderCart() {\n    var ids = Object.keys(state.cart).sort(function (a, b) { return byId[a].num - byId[b].num; });\n    var count = 0, subtotal = 0, anyUnpriced = false;\n    ids.forEach(function (id) { var n = state.cart[id]; count += n; var p = priceOf(byId[id]); if (p \u003e 0) subtotal += p * n; else anyUnpriced = true; });\n    $('[data-wa-cart-count]').textContent = count;\n    var empty = ids.length === 0;\n    $('[data-wa-cart-empty]').hidden = !empty;\n    $('[data-wa-lines]').hidden = empty;\n    $('[data-wa-foot]').hidden = empty;\n    if (empty) return;\n    $('[data-wa-lines]').innerHTML = ids.map(function (id) {\n      var d = byId[id], n = state.cart[id], p = priceOf(d);\n      return '\u003cdiv class=\"wa-line\" data-wa-line=\"' + esc(id) + '\"\u003e' +\n        '\u003cdiv class=\"wa-line-info\"\u003e\u003cstrong\u003e' + esc(id) + '\u003c\/strong\u003e\u003cspan\u003e' + esc(d.metric) + ' mm · Dennison ' + esc(d.dennison) + '\u003c\/span\u003e\u003c\/div\u003e' +\n        '\u003cdiv class=\"wa-qty\"\u003e\u003cbutton class=\"wa-step\" type=\"button\" data-wa-ldec aria-label=\"Decrease\"\u003e−\u003c\/button\u003e\u003coutput\u003e' + n + '\u003c\/output\u003e\u003cbutton class=\"wa-step\" type=\"button\" data-wa-linc aria-label=\"Increase\"\u003e+\u003c\/button\u003e\u003c\/div\u003e' +\n        '\u003cspan class=\"wa-line-total\"\u003e' + (p \u003e 0 ? money(p * n) : '—') + '\u003c\/span\u003e' +\n        '\u003cbutton class=\"wa-remove\" type=\"button\" data-wa-lremove aria-label=\"Remove\"\u003e×\u003c\/button\u003e\u003c\/div\u003e';\n    }).join('');\n    $('[data-wa-summary]').textContent = count + ' pieces · ' + ids.length + ' sizes';\n    $('[data-wa-subtotal]').textContent = anyUnpriced ? 'Priced at checkout' : money(subtotal);\n    var ship;\n    if (anyUnpriced) ship = 'Wholesale pricing is applied at checkout. Free shipping on orders over $' + CONFIG.freeShip + ' (up to 5 lbs).';\n    else if (subtotal \u003e= CONFIG.freeShip) ship = 'You qualify for free shipping (up to 5 lbs).';\n    else ship = 'Add ' + money(CONFIG.freeShip - subtotal) + ' more for free shipping (up to 5 lbs).';\n    $('[data-wa-ship]').textContent = ship;\n    $('[data-wa-checkout]').href = CONFIG.checkoutUrl;\n  }\n\n  $('[data-wa-lines]').addEventListener('click', function (e) {\n    var line = e.target.closest('[data-wa-line]'); if (!line) return;\n    var id = line.getAttribute('data-wa-line'), n = state.cart[id] || 0;\n    if (e.target.closest('[data-wa-linc]')) setCart(id, n + 1);\n    else if (e.target.closest('[data-wa-ldec]')) setCart(id, n - 1);\n    else if (e.target.closest('[data-wa-lremove]')) setCart(id, 0);\n  });\n\n  function openCart() { $('[data-wa-overlay]').classList.add('is-open'); $('.wa-close').focus(); }\n  function closeCart() { $('[data-wa-overlay]').classList.remove('is-open'); }\n  $$('[data-wa-open-cart]').forEach(function (b) { b.addEventListener('click', function () { renderCart(); openCart(); }); });\n  $$('[data-wa-close-cart]').forEach(function (b) { b.addEventListener('click', closeCart); });\n  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closeCart(); });\n\n  \/* ---------- FAQ ---------- *\/\n  $$('.wa-faq').forEach(function (b) {\n    b.addEventListener('click', function () {\n      var open = b.getAttribute('aria-expanded') === 'true';\n      $$('.wa-faq').forEach(function (o) { o.setAttribute('aria-expanded', 'false'); $('.wa-icon', o).textContent = '+'; });\n      if (!open) { b.setAttribute('aria-expanded', 'true'); $('.wa-icon', b).textContent = '−'; }\n    });\n  });\n\n  \/* ---------- init ---------- *\/\n  $('[data-wa-freeship]').textContent = CONFIG.freeShip;\n  renderRows();\n  renderCart();\n})();\n\u003c\/script\u003e\n\n\u003c\/body\u003e","products":[],"url":"https:\/\/www.timeconnectioninc.com\/collections\/white-a-loy-automatic-mainsprings.oembed","provider":"Time Connection II, Inc","version":"1.0","type":"link"}