{
  "ticker": "UFPT",
  "name": "UFP TECHNOLOGIES INC",
  "cik": "0000914156",
  "sic": "3841",
  "sic_description": "Surgical & Medical Instruments & Apparatus",
  "source": "SEC XBRL companyfacts",
  "source_url": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000914156.json",
  "as_of": "2026-02-27",
  "note": "Verified SEC companyfacts-derived facts; derived metrics (margins, ratios, free cash flow) are computed from those facts. Descriptive data, not investment advice.",
  "annual": [
    {
      "metric_id": "revenue",
      "label": "Revenue",
      "concept": "RevenueFromContractWithCustomerExcludingAssessedTax",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax"
      ],
      "points": [
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 400072000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 504421000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 602797000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "net_income",
      "label": "Net income",
      "concept": "NetIncomeLoss",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:NetIncomeLoss"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 7970000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 9210000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 14311000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 19750000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 13369000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 15886000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 41789000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 44924000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 58981000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 68313000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "operating_income",
      "label": "Operating income",
      "concept": "OperatingIncomeLoss",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:OperatingIncomeLoss"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 12237000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 11693000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 19612000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 24708000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 16732000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 21218000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 55400000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 57664000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 80897000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 92338000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "gross_profit",
      "label": "Gross profit",
      "concept": "GrossProfit",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:GrossProfit"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 34650000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 35487000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 48308000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 53959000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 44684000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 51114000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 90260000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 112225000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 146693000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 170410000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "eps_diluted",
      "label": "Diluted EPS",
      "concept": "EarningsPerShareDiluted",
      "unit": "USD/shares",
      "derived": false,
      "source_concepts": [
        "us-gaap:EarningsPerShareDiluted"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 1.1,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 1.26,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 1.93,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 2.63,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 1.77,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 2.09,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 5.45,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 5.83,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 7.58,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 8.75,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "operating_cash_flow",
      "label": "Operating cash flow",
      "concept": "NetCashProvidedByUsedInOperatingActivities",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:NetCashProvidedByUsedInOperatingActivities"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 9306000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 17469000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 21320000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 31229000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 25037000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 14293000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 17744000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 41334000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 66593000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 91905000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "capex",
      "label": "Capital expenditures",
      "concept": "PaymentsToAcquirePropertyPlantAndEquipment",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment"
      ],
      "points": [
        {
          "fiscal_year": 2015,
          "period_end": "2015-12-31",
          "value": 15742000.0,
          "filed": "2018-03-16",
          "accession": "0001171843-18-002024"
        },
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 7206000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 10382000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 5428000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 5778000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 4368000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 5395000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 13780000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 10490000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 9656000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        }
      ]
    },
    {
      "metric_id": "assets",
      "label": "Assets",
      "concept": "Assets",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:Assets"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 127934000.0,
          "filed": "2018-03-16",
          "accession": "0001171843-18-002024"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 138207000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 189598000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 188758000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 203204000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 334132000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 378192000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 404136000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 628995000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 655077000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "liabilities",
      "label": "Liabilities",
      "concept": "Liabilities",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:Liabilities"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 14881000.0,
          "filed": "2018-03-16",
          "accession": "0001171843-18-002024"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 14495000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 49141000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 26767000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 26311000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 139686000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 140647000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 118045000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 286235000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 231200000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "equity",
      "label": "Stockholders' equity",
      "concept": "StockholdersEquity",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:StockholdersEquity"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 113053000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 123712000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 140457000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 161991000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 176893000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 194446000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 237545000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 286091000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 342760000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 423877000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "cash",
      "label": "Cash and cash equivalents",
      "concept": "CashAndCashEquivalentsAtCarryingValue",
      "unit": "USD",
      "derived": false,
      "source_concepts": [
        "us-gaap:CashAndCashEquivalentsAtCarryingValue"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 31359000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 37978000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 3238000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 3743000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 24234000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 11117000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 4451000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 5263000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 13450000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 20301000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "free_cash_flow",
      "label": "Free cash flow",
      "concept": "NetCashProvidedByUsedInOperatingActivities - PaymentsToAcquirePropertyPlantAndEquipment",
      "unit": "USD",
      "derived": true,
      "source_concepts": [
        "us-gaap:NetCashProvidedByUsedInOperatingActivities",
        "us-gaap:PaymentsToAcquirePropertyPlantAndEquipment"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 2100000.0,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 7087000.0,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 15892000.0,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 25451000.0,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 20669000.0,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 8898000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 3964000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 30844000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 56937000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "net_margin",
      "label": "Net margin",
      "concept": "NetIncomeLoss / RevenueFromContractWithCustomerExcludingAssessedTax",
      "unit": "Percent",
      "derived": true,
      "source_concepts": [
        "us-gaap:NetIncomeLoss",
        "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax"
      ],
      "points": [
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 11.228978783818913,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 11.692812154926143,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 11.332670865979757,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "operating_margin",
      "label": "Operating margin",
      "concept": "OperatingIncomeLoss / RevenueFromContractWithCustomerExcludingAssessedTax",
      "unit": "Percent",
      "derived": true,
      "source_concepts": [
        "us-gaap:OperatingIncomeLoss",
        "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax"
      ],
      "points": [
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 14.41340558699434,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 16.037595579882677,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 15.318258053706305,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "roe",
      "label": "Return on equity",
      "concept": "NetIncomeLoss / StockholdersEquity",
      "unit": "Percent",
      "derived": true,
      "source_concepts": [
        "us-gaap:NetIncomeLoss",
        "us-gaap:StockholdersEquity"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 7.049790806082103,
          "filed": "2020-03-13",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 7.444710294878427,
          "filed": "2021-03-12",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 10.1888834305161,
          "filed": "2022-03-14",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 12.192035359989136,
          "filed": "2023-03-16",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 7.557676109286405,
          "filed": "2024-02-29",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 8.169877498122872,
          "filed": "2025-03-03",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 17.59203519333179,
          "filed": "2026-02-27",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 15.702695995330156,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 17.207667172365504,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 16.116231831403923,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "roa",
      "label": "Return on assets",
      "concept": "NetIncomeLoss / Assets",
      "unit": "Percent",
      "derived": true,
      "source_concepts": [
        "us-gaap:NetIncomeLoss",
        "us-gaap:Assets"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 6.229774727593916,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 6.663917167726671,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 7.548075401639258,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 10.463132688415854,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 6.57910277356745,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 4.754408437384027,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 11.049678470195033,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 11.116059940218143,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 9.377022074897257,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 10.428239733649631,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "liabilities_to_equity",
      "label": "Liabilities / equity",
      "concept": "Liabilities / StockholdersEquity",
      "unit": "Ratio",
      "derived": true,
      "source_concepts": [
        "us-gaap:Liabilities",
        "us-gaap:StockholdersEquity"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 0.13162852821243134,
          "filed": "2020-03-13",
          "accession": "0001171843-18-002024"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 0.11716729177444386,
          "filed": "2021-03-12",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 0.3498650832639171,
          "filed": "2022-03-14",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 0.1652375749270021,
          "filed": "2023-03-16",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 0.1487396335637928,
          "filed": "2024-02-29",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 0.7183793958219763,
          "filed": "2025-03-03",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 0.5920857100759856,
          "filed": "2026-02-27",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 0.41261346914093766,
          "filed": "2026-02-27",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 0.8350886917960089,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 0.5454412482866492,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    },
    {
      "metric_id": "current_ratio",
      "label": "Current ratio",
      "concept": "AssetsCurrent / LiabilitiesCurrent",
      "unit": "Ratio",
      "derived": true,
      "source_concepts": [
        "us-gaap:AssetsCurrent",
        "us-gaap:LiabilitiesCurrent"
      ],
      "points": [
        {
          "fiscal_year": 2016,
          "period_end": "2016-12-31",
          "value": 7.309229803264964,
          "filed": "2018-03-16",
          "accession": "0001171843-18-002024"
        },
        {
          "fiscal_year": 2017,
          "period_end": "2017-12-31",
          "value": 7.5504374937141705,
          "filed": "2019-03-15",
          "accession": "0001171843-19-001752"
        },
        {
          "fiscal_year": 2018,
          "period_end": "2018-12-31",
          "value": 2.6927098460644787,
          "filed": "2020-03-13",
          "accession": "0001171843-20-001695"
        },
        {
          "fiscal_year": 2019,
          "period_end": "2019-12-31",
          "value": 3.172664442326025,
          "filed": "2021-03-12",
          "accession": "0001171843-21-001724"
        },
        {
          "fiscal_year": 2020,
          "period_end": "2020-12-31",
          "value": 4.747572174142829,
          "filed": "2022-03-14",
          "accession": "0001171843-22-001850"
        },
        {
          "fiscal_year": 2021,
          "period_end": "2021-12-31",
          "value": 2.251501946729237,
          "filed": "2023-03-16",
          "accession": "0001171843-23-001734"
        },
        {
          "fiscal_year": 2022,
          "period_end": "2022-12-31",
          "value": 2.0790550561998535,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078"
        },
        {
          "fiscal_year": 2023,
          "period_end": "2023-12-31",
          "value": 2.484718857908571,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192"
        },
        {
          "fiscal_year": 2024,
          "period_end": "2024-12-31",
          "value": 2.5551477816370665,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        },
        {
          "fiscal_year": 2025,
          "period_end": "2025-12-31",
          "value": 2.6849536480457377,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816"
        }
      ]
    }
  ],
  "quarterly": [
    {
      "metric_id": "revenue",
      "label": "Revenue",
      "concept": "RevenueFromContractWithCustomerExcludingAssessedTax",
      "unit": "USD",
      "source_concepts": [
        "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax"
      ],
      "points": [
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 3,
          "period_label": "2025-Q3",
          "period_end": "2025-09-30",
          "value": 154558000.0,
          "filed": "2025-11-07",
          "accession": "0001628280-25-050425",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 4,
          "period_label": "2025-Q4",
          "period_end": "2025-12-31",
          "value": 148915000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816",
          "derived": true
        },
        {
          "fiscal_year": 2026,
          "fiscal_quarter": 1,
          "period_label": "2026-Q1",
          "period_end": "2026-03-31",
          "value": 154202000.0,
          "filed": "2026-05-08",
          "accession": "0001628280-26-032825",
          "derived": false
        }
      ]
    },
    {
      "metric_id": "net_income",
      "label": "Net income",
      "concept": "NetIncomeLoss",
      "unit": "USD",
      "source_concepts": [
        "us-gaap:NetIncomeLoss"
      ],
      "points": [
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 2,
          "period_label": "2023-Q2",
          "period_end": "2023-03-31",
          "value": 9739000.0,
          "filed": "2023-08-09",
          "accession": "0001171843-23-005131",
          "derived": false
        },
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 3,
          "period_label": "2023-Q3",
          "period_end": "2023-06-30",
          "value": 11883000.0,
          "filed": "2023-11-09",
          "accession": "0001171843-23-006924",
          "derived": false
        },
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 4,
          "period_label": "2023-Q4",
          "period_end": "2023-12-31",
          "value": 11608000.0,
          "filed": "2024-02-29",
          "accession": "0001171843-24-001078",
          "derived": true
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 1,
          "period_label": "2024-Q1",
          "period_end": "2024-03-31",
          "value": 12693000.0,
          "filed": "2024-05-10",
          "accession": "0001171843-24-002737",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 2,
          "period_label": "2024-Q2",
          "period_end": "2024-03-31",
          "value": 12693000.0,
          "filed": "2024-08-09",
          "accession": "0001171843-24-004633",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 3,
          "period_label": "2024-Q3",
          "period_end": "2024-09-30",
          "value": 16361000.0,
          "filed": "2024-11-12",
          "accession": "0001171843-24-006257",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 4,
          "period_label": "2024-Q4",
          "period_end": "2024-12-31",
          "value": 16375000.0,
          "filed": "2025-03-03",
          "accession": "0001171843-25-001192",
          "derived": true
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 1,
          "period_label": "2025-Q1",
          "period_end": "2025-03-31",
          "value": 17184000.0,
          "filed": "2025-05-12",
          "accession": "0001171843-25-003049",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 2,
          "period_label": "2025-Q2",
          "period_end": "2025-03-31",
          "value": 17184000.0,
          "filed": "2025-08-11",
          "accession": "0001171843-25-005268",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 3,
          "period_label": "2025-Q3",
          "period_end": "2025-06-30",
          "value": 17180000.0,
          "filed": "2025-11-07",
          "accession": "0001628280-25-050425",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 4,
          "period_label": "2025-Q4",
          "period_end": "2025-12-31",
          "value": 17566000.0,
          "filed": "2026-02-27",
          "accession": "0001628280-26-012816",
          "derived": true
        },
        {
          "fiscal_year": 2026,
          "fiscal_quarter": 1,
          "period_label": "2026-Q1",
          "period_end": "2026-03-31",
          "value": 17495000.0,
          "filed": "2026-05-08",
          "accession": "0001628280-26-032825",
          "derived": false
        }
      ]
    },
    {
      "metric_id": "eps_diluted",
      "label": "Diluted EPS",
      "concept": "EarningsPerShareDiluted",
      "unit": "USD/shares",
      "source_concepts": [
        "us-gaap:EarningsPerShareDiluted"
      ],
      "points": [
        {
          "fiscal_year": 2022,
          "fiscal_quarter": 2,
          "period_label": "2022-Q2",
          "period_end": "2022-06-30",
          "value": 1.17,
          "filed": "2022-08-09",
          "accession": "0001171843-22-005524",
          "derived": false
        },
        {
          "fiscal_year": 2022,
          "fiscal_quarter": 3,
          "period_label": "2022-Q3",
          "period_end": "2022-09-30",
          "value": 2.56,
          "filed": "2022-11-14",
          "accession": "0001171843-22-007435",
          "derived": false
        },
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 1,
          "period_label": "2023-Q1",
          "period_end": "2023-03-31",
          "value": 1.27,
          "filed": "2023-05-10",
          "accession": "0001171843-23-003130",
          "derived": false
        },
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 2,
          "period_label": "2023-Q2",
          "period_end": "2023-06-30",
          "value": 1.55,
          "filed": "2023-08-09",
          "accession": "0001171843-23-005131",
          "derived": false
        },
        {
          "fiscal_year": 2023,
          "fiscal_quarter": 3,
          "period_label": "2023-Q3",
          "period_end": "2023-09-30",
          "value": 1.52,
          "filed": "2023-11-09",
          "accession": "0001171843-23-006924",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 1,
          "period_label": "2024-Q1",
          "period_end": "2024-03-31",
          "value": 1.64,
          "filed": "2024-05-10",
          "accession": "0001171843-24-002737",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 2,
          "period_label": "2024-Q2",
          "period_end": "2024-06-30",
          "value": 1.75,
          "filed": "2024-08-09",
          "accession": "0001171843-24-004633",
          "derived": false
        },
        {
          "fiscal_year": 2024,
          "fiscal_quarter": 3,
          "period_label": "2024-Q3",
          "period_end": "2024-09-30",
          "value": 2.11,
          "filed": "2024-11-12",
          "accession": "0001171843-24-006257",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 1,
          "period_label": "2025-Q1",
          "period_end": "2025-03-31",
          "value": 2.21,
          "filed": "2025-05-12",
          "accession": "0001171843-25-003049",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 2,
          "period_label": "2025-Q2",
          "period_end": "2025-06-30",
          "value": 2.21,
          "filed": "2025-08-11",
          "accession": "0001171843-25-005268",
          "derived": false
        },
        {
          "fiscal_year": 2025,
          "fiscal_quarter": 3,
          "period_label": "2025-Q3",
          "period_end": "2025-09-30",
          "value": 2.11,
          "filed": "2025-11-07",
          "accession": "0001628280-25-050425",
          "derived": false
        },
        {
          "fiscal_year": 2026,
          "fiscal_quarter": 1,
          "period_label": "2026-Q1",
          "period_end": "2026-03-31",
          "value": 2.24,
          "filed": "2026-05-08",
          "accession": "0001628280-26-032825",
          "derived": false
        }
      ]
    }
  ]
}
