---
en:
  gg_cabinet_tools:
    toolbar_scale_tooltip: Scale selected groups/components by width/height/depth
    toolbar_scale_status: Run Dumb Scale on current selection
    toolbar_color_tooltip: Pick a component to select all with the same material
    toolbar_color_status: Select by material color
    toolbar_remove_color_tooltip: Remove material from the current selection
    toolbar_remove_color_status: Clear materials on selected objects
    menu_remove_color: Remove Color
    toolbar_warehouse_tooltip: 'Warehouse: browse local SketchUp models'
    toolbar_warehouse_status: Open GG Cabinet Tools warehouse
    toolbar_settings_tooltip: Plugin Settings & Version Manager
    toolbar_settings_status: Upgrade or downgrade plugin version
    toolbar_gcode_tooltip: G-code Manager — define toolpaths and generate G-code
    toolbar_gcode_status: Open G-code Manager
    toolbar_update_tooltip: Check for plugin updates or revert to a prior version
    toolbar_update_status: Open Update / Revert
    menu_dumb_scale: Dumb Scale
    menu_hover_dimensions: Hover dimensions
    toolbar_hover_dimensions_tooltip: Show width, depth, and height on hovered groups/components
    toolbar_hover_dimensions_status: Hover a group or component — Esc to exit
    toolbar_instance_rename_tooltip: Rename instances — fuzzy name library, prefix/suffix, Clear ID
    toolbar_instance_rename_status: Click objects (Shift adds), type to search names, Tab applies — Esc to exit
    rename_status: Type to search saved names · ↑/↓ pick · Tab apply · Enter use typed text · Esc exit
    rename_op_apply: Rename instances
    rename_op_clear_id: Clear leading IDs
    rename_find_in_model_title: Select list picks in the model
    rename_isolate_title: Isolate list picks (hide everything else)
    rename_list_search_placeholder: Filter list…
    rename_hud_results: "%d matches"
    rename_hud_selected: "%d object(s) selected"
    rename_hud_clear_id: Clear ID
    rename_mode_rename: Rename
    rename_mode_prefix: Prefix
    rename_mode_suffix: Suffix
    menu_color: Color
    menu_plugin_title: GG Cabinet Tools
    menu_settings: Settings
    menu_warehouse: Warehouse
    menu_gcode: Generate G-code
    menu_update: Update
    menu_sign_out: Sign Out
    menu_hot_reload: Hot Reload
    ctx_remove_material: Remove material
    ctx_remove_material_op: GG Cabinet Tools — Remove material
    auth_dialog_title: Sign In — GG Cabinet Tools
    auth_signin_tab: Sign In
    auth_signup_tab: Sign Up
    auth_subtitle: Sign in or create an account to use the plugin.
    auth_email_label: Email
    auth_password_label: Password
    auth_password_confirm_label: Confirm Password
    auth_email_placeholder: you@example.com
    auth_password_placeholder: "••••••••"
    auth_signin_btn: Sign In
    auth_signup_btn: Sign Up
    auth_signing_in: Signing in...
    auth_creating_account: Creating account...
    auth_create_account_link: Create an account
    auth_already_have_account: Already have an account?
    auth_account_created_title: Account created!
    auth_account_created_body: Please check your email and verify your account before
      signing in.
    auth_redirect_countdown: Redirecting to sign in
    auth_verify_banner: Account created! Please verify your email before signing in.
    auth_online_required: "No network connection. Please connect to the internet and try again."
    auth_forgot_password_link: Forgot password?
    auth_forgot_password_title: Reset Password
    auth_forgot_password_subtitle: Enter your email and we'll send you reset instructions.
    auth_forgot_password_btn: Send Reset Link
    auth_forgot_password_sending: Sending...
    auth_forgot_password_success_title: Check your email
    auth_forgot_password_success_body: Password reset instructions have been sent. Open the link in your browser to set a new password.
    auth_forgot_password_error: "Failed to send reset email. Please try again."
    auth_back_to_signin: Back to sign in
    session_superseded_msg: |-
      Your session was ended because the account was signed in on another machine.

      Please sign in again.
    settings_dialog_title: GG Cabinet Tools — Settings
    settings_title: Settings
    settings_subtitle: GG Cabinet Tools — versions
    settings_sign_out: Sign Out
    settings_current_version: Current version
    settings_promo_placeholder: Promo code
    settings_promo_redeem: Redeem
    settings_promo_enter_code: Enter a code first.
    settings_promo_applying: Applying…
    settings_downloading: Downloading...
    settings_switched_note: "✓ Switched. Restart SketchUp to load."
    settings_col_version: Version
    settings_col_changelog: Changelog
    settings_col_created_at: Created at
    settings_current_badge: Current
    settings_switch_btn: Switch
    settings_go_pro: Go Pro
    settings_pro_days_left: "%d Pro days left"
    settings_pro_lifetime: Lifetime Pro
    settings_language: Language
    settings_loading: Loading versions...
    version_updated: |-
      Updated to v%s!

      Restart SketchUp to use the new version.
    version_update_failed: Failed to download or extract version %s.
    version_switched: |-
      Switched to v%s.

      Restart SketchUp to apply.
    version_switch_failed: Failed to download or extract version %s.
    version_no_version: No version specified.
    versions_none_available: |-
      No versions available from server.
      Check your connection to %s
    versions_load_failed: |-
      Failed to load versions from server (status %s).
      Check your connection to %s
    update_dialog_title: GG Cabinet Tools — Update Available
    update_title: Update Available
    update_subtitle: A new version of GG Cabinet Tools is available
    update_current_label: Current
    update_latest_label: Latest
    update_whats_new: 'What''s new:'
    update_later: Later
    update_now: Update Now
    update_downloading: Downloading update...
    update_confirm_now: 'Update to version %s? It downloads in the background — applied on your next SketchUp restart, or you can restart once it finishes. Continue?'
    update_restart_prompt: 'Updated to v%s! Restart SketchUp now to use the new version?'
    update_restart_reminder: Please close and reopen SketchUp to finish updating.
    update_launcher_menu: 'GG Cabinet Tools: Update / Revert'
    update_launcher_title: GG Cabinet Tools — Update
    update_launcher_current: 'Current version:'
    update_launcher_latest: 'Latest:'
    update_launcher_revert_to: 'Revert to:'
    update_launcher_download_latest: Download update
    update_launcher_download_revert: Download revert
    update_launcher_apply_now: Update now
    update_launcher_confirm_switch: 'Switch to version %s? It will be downloaded and installed — you must RESTART SketchUp afterward to apply it.'
    update_launcher_downloading: Downloading %s… please wait.
    update_launcher_ready: '%s downloaded. Update now?'
    update_launcher_failed: Download failed — try again.
    update_launcher_no_version: No suitable version available.
    update_launcher_ready_box: '%s downloaded. Open the menu to update.'
    update_launcher_download_failed: Failed to download the update.
    update_launcher_nothing: Nothing has been downloaded yet.
    update_launcher_applied: Installed %s. Please RESTART SketchUp to apply.
    update_launcher_apply_failed: Failed to apply the update.
    update_launcher_locked_retry: Some files were in use, so the update is incomplete. Please RESTART SketchUp, then run the update again.
    update_launcher_version_mismatch: The downloaded package did not match the selected version. Nothing was changed — please try again.
    update_launcher_open_failed: 'Could not open the update window: %s'
    update_launcher_col_version: Version
    update_launcher_col_changelog: Changelog
    update_launcher_col_created_at: Created at
    update_launcher_current_badge: Current
    update_launcher_download_btn: Download
    update_launcher_switch_btn: Switch to
    upgrade_dialog_title: Upgrade to Pro — GG Cabinet Tools
    upgrade_title: Upgrade to Pro
    upgrade_subtitle: 6 months Pro access
    upgrade_bank_tab: Bank Transfer
    upgrade_stripe_tab: Stripe / Card
    upgrade_bank_hint: Scan QR — plan upgraded automatically after payment confirmed
    upgrade_transfer_no_qr: Transfer without QR
    upgrade_transfer_step: 'Transfer %s VND to:'
    upgrade_bank_label: 'Bank:'
    upgrade_account_label: 'Account:'
    upgrade_account_name_label: 'Account name:'
    upgrade_branch_label: 'Branch:'
    upgrade_transfer_msg: 'Transfer message — enter <strong>only this code</strong>:'
    upgrade_stripe_hint: Pay by card via <span class="stripe-logo">Stripe</span> —
      scan QR to open secure checkout
    upgrade_gen_qr_btn: Generate Payment QR
    upgrade_stripe_step1: Click “Generate Payment QR” above
    upgrade_stripe_step2: Scan the QR code with your phone
    upgrade_stripe_step3: Complete card payment on the Stripe checkout page
    upgrade_stripe_step4: Your plan is upgraded automatically for 6 months
    upgrade_failed: 'Upgrade to Pro failed: %s'
    upgrade_stripe_failed: Failed to create Stripe session.
    upgrade_qr_valid: Scan to open Stripe checkout — link valid for 24 hours
    upgrade_qr_click_hint: Click the button below to generate a QR code
    upgrade_generating: Generating…
    promo_activated_until: Pro activated until %s!
    promo_lifetime: Lifetime Pro activated!
    promo_failed: Failed to redeem code.
    promo_dialog_title: June 2026 promotion
    promo_amount_label: Lifetime Pro price
    promo_bank_hint: Scan the QR to pay via bank transfer (SePay). Use the activation code in the transfer description.
    promo_bank_step2: After payment is confirmed, your account is upgraded to lifetime Pro automatically.
    promo_gumroad_hint: Or buy lifetime Pro via Gumroad — scan the QR or open the store link.
    promo_gumroad_step1: Scan the QR code or click “Open Gumroad Store”
    promo_gumroad_step2: Complete purchase on Gumroad to receive your lifetime Pro access
    promo_close: Close
    trial_notice_title: You're on a Pro trial
    trial_notice_body: Enjoy full Pro features during your free trial.
    trial_days_left: "%d days of Pro trial left"
    promo_sepay_qr_alt: Payment QR — Military Bank 0777444222
    scale_select_objects: Please select one or more objects.
    scale_select_groups: Please select one or more groups or component instances.
    scale_error: |-
      GG Cabinet Tools Dumb Scale error:
      %s
    color_selected: Selected %d object(s) with same material.
    color_applied: Applied material to %d object(s).
    color_remove_failed: 'Remove color failed: %s'
    color_apply_failed: 'Apply material failed: %s'
    color_remove_failed2: 'Remove material failed: %s'
    remove_color_empty_selection: Select at least one object to remove material.
    remove_color_op: GG Cabinet Tools — Remove color
    remove_color_done: Removed material from %d object(s).
    nesting_find_no_board: Select a source board (with a board-index) before finding its parts.
    nesting_find_no_root: No nesting (__ABF_Nesting) found in the model.
    nesting_find_none: No nesting parts found for the selected board(s).
    nesting_find_done: Selected %d nesting part(s) (top + bottom).
    menu_component_stats: Component Inventory
    component_stats_saved: Saved the inventory to the model.
    component_stats_export: Export inventory to Excel — choose where to save
    component_stats_exported: 'Exported Excel: %s'
    component_stats_select_object: Select an object in the model before creating a statistics object.
    component_stats_regen: Regenerate the statistics from the current nesting? (Choose No to keep the saved one)
    component_stats_save_on_close: Do you want to save the statistics to the model before closing?
    component_stats_refresh_title: Re-tally the statistics from the current nesting
    component_stats_lock_title: Lock the statistics
    component_stats_unlock_title: Unlock (enter password)
    component_stats_unlock_prompt: Enter your account password to unlock
    component_stats_locked_badge: Locked
    component_stats_locked_msg: The statistics are locked. Unlock before saving/refreshing.
    component_stats_lock_needs_save: Save the statistics to the model before locking.
    component_stats_unlock_bad_pw: Wrong account password.
    component_stats_create_op: Create statistics object
    component_stats_create_error: 'Create statistics object error: %s'
    component_stats_export_error: 'Excel export error: %s'
    component_stats_default_filename: inventory
    component_stats_missing_html: Missing component_stats/index.html
    component_stats_tab_accessories: Accessories
    component_stats_tab_parts: Parts
    component_stats_create_stat: Create statistics object
    component_stats_save_model: Save to model
    component_stats_export_btn: Export to Excel
    component_stats_stat_name_label: Object name
    component_stats_stat_name_placeholder: Object name
    component_stats_stat_mode_label: Statistics type
    component_stats_mode_count: By quantity
    component_stats_mode_length: By length
    component_stats_stat_unit_label: Unit
    component_stats_unit_placeholder: pcs / m
    component_stats_stat_price_label: Unit price
    component_stats_stat_coef_label: Coefficient
    component_stats_col_stt: No.
    component_stats_col_type: Type
    component_stats_col_desc: Description
    component_stats_col_qty: Qty
    component_stats_col_unit: Unit
    component_stats_col_price: Unit price
    component_stats_col_coef: Coef.
    component_stats_col_amount: Amount
    component_stats_col_total: Total
    component_stats_remove_row: Remove row
    component_stats_add_row: Add row
    component_stats_grand_total: GRAND TOTAL
    component_stats_group_accessories: Connectors & hardware
    component_stats_group_stats: Statistics objects
    component_stats_group_edge_band: Edge banding
    component_stats_group_boards: Boards
    component_stats_group_other: Other costs
    component_stats_by_length: By length
    component_stats_by_count: By quantity
    component_stats_unit_piece: pcs
    component_stats_unit_sheet: Sheet
    component_stats_unit_meter: m
    warehouse_search_placeholder: Search warehouse models…
    warehouse_search_title: Search
    warehouse_refresh_title: Refresh index
    warehouse_change_dir_title: Change models folder
    warehouse_loading: Loading…
    warehouse_no_models: No models found.
    warehouse_folder_label: 'Folder:'
    warehouse_remove: Remove
    warehouse_dialog_title: GG Cabinet Tools — Warehouse
    warehouse_select_dir_title: Select warehouse models folder
    gcode_manager_dialog_title: GG Cabinet Tools — G-code Manager
    gcode_select_output_folder: Select G-code output folder
    upgrade_gumroad_tab: Promo Code
    upgrade_gumroad_hint: Buy a 6-month promo code from our Gumroad store — scan the
      QR or click the button below.
    upgrade_gumroad_scan: Scan to open Gumroad store
    upgrade_gumroad_step1: Scan the QR code or click “Open Gumroad Store”
    upgrade_gumroad_step2: Purchase a promo code (valid for 6 months)
    upgrade_gumroad_step3: Go to Settings → enter the code in “Promo Code” → click
      Redeem
    upgrade_gumroad_open_btn: Open Gumroad Store
    menu_bend: Bend
    toolbar_bend_tooltip: Bend a board group into a curved arc shape
    toolbar_bend_status: Hover over a flat face; type radius,segments in VCB; click
      to apply
    bend_instruction: Hover over a flat face to preview bend — type radius,segments
      — hold Shift to flip convex/concave — click to bend
      (e.g. 200,24) — click to apply
    bend_vcb_label: R(mm), Segs
    bend_error: |-
      GG Cabinet Tools Bend error:
      %s
    menu_unfold: Unfold
    toolbar_unfold_tooltip: Flatten a curved surface (adjacent faces) into a 2D sheet
      for CNC kerf cutting
    toolbar_unfold_status: Hover a face; click to flatten its strip and generate kerf
      + hold sub-groups
    unfold_instruction: Hover over a face — adjacent faces within the angle threshold
      will be flattened on click
    unfold_hud_pocket: POCKET
    unfold_hud_zigzag: ZIGZAG
    unfold_hud_outer: Outer
    unfold_hud_inner: Inner
    unfold_hud_mid: Mid
    unfold_hud_union: Union
    unfold_hud_ang: Ang
    unfold_hud_tool: Tool Dia
    unfold_hud_meat: Meat
    unfold_hud_kerf: ZigZag Line Offset
    unfold_hud_hold: Safeguard Lines Offset
    unfold_hud_thick: Board Thickness
    unfold_hud_bonew: Bone Width
    unfold_hud_midoff: Mid-Bone Offset
    unfold_hud_midtrim: Mid-Bone Trim Off
    unfold_hud_outeroff: Outer-Bone Offset (±)
    unfold_hud_inneroff: Inner-Bone Offset (±)
    unfold_hud_curvt: Filler Thickness
    unfold_hud_fillertrim: Filler Trim Off
    unfold_hud_pathtag: ZigZag Tag
    unfold_hud_holdtag: Safeguard Lines Tag
    unfold_hud_fleshtag: Pocket Area Tag
    unfold_operation: GG Cabinet Tools — Unfold strip
    unfold_error: |-
      GG Cabinet Tools Unfold error:
      %s
    unfold_settings_title: Unfold / Flatten
    unfold_settings_subtitle: Parameters for the fabrication unfold tool
    unfold_settings_gear_tooltip: Unfold settings
    unfold_settings_mode_section: Mode
    unfold_settings_bones_section: Bones
    unfold_settings_params_section: Parameters
    unfold_settings_tags_section: Group tags
    unfold_strip_angle_label: Strip angle threshold (°)
    unfold_hold_offset_label: Hold line offset (mm)
    unfold_tool_diameter_label: Tool diameter (mm)
    unfold_meat_clearance_label: Meat clearance (mm)
    unfold_kerf_extend_label: Kerf extension (mm)
    unfold_board_thickness_label: Board thickness (mm)
    unfold_boustrophedon_path_group_name_label: Boustrophedon path group / tag (ABF_BOUSTROPHEDON_PATH)
    unfold_hold_group_name_label: Hold group name
    unfold_fleshing_settings_title: Fleshing (flat strip)
    unfold_fleshing_settings_subtitle: Main unfold is normal with ABF_POCKET inside it (curved span only); ABF_CURVED objects are separate with kerf/hold.
    unfold_fleshing_enabled_label: Fleshing on curved segments only (no kerf/hold on main unfold)
    unfold_fleshing_group_name_label: Pocket area group / tag (ABF_POCKET)
    unfold_curved_segment_enabled_label: Create separate curved segment groups (ABF_CURVED_1, …) with kerf/hold
    unfold_curved_segment_thickness_label: Curved segment thickness (mm)
    unfold_backbone_enabled_label: Backbone (front/back groups)
    unfold_backbone_width_label: Backbone depth (mm)
    unfold_bone_outer_enabled_label: Outer rib
    unfold_bone_middle_enabled_label: Middle ribs (curved sections)
    unfold_bone_inner_enabled_label: Inner rib
    unfold_bone_union_enabled_label: Auto-union inner + middle
    unfold_bone_middle_offset_label: Middle rib inset (mm)
    unfold_bone_middle_trim_label: Middle rib trim both ends (mm)
    unfold_saved: Saved
    unfold_save_failed: Save failed
    unfold_settings_reset: Reset to default
    unfold_settings_save: Save settings
    settings_tab_user_info: Account
    settings_tab_versions: Versions
    settings_tab_unfold: Unfold
    settings_tab_khau: Cross halving join
    settings_tab_nesting: Nesting
    settings_tab_toolbar: Toolbar
    toolbar_settings_title: Toolbar icons
    toolbar_settings_subtitle: Drag to reorder. Untick to hide an icon. Changes apply
      after you restart SketchUp.
    toolbar_visible_label: Show
    toolbar_save_btn: Save
    toolbar_reset_btn: Reset to default
    toolbar_saved: Saved — restart SketchUp to apply.
    toolbar_reset_done: Reset to default — restart SketchUp to apply.
    toolbar_copy_name: Copy name (to assign a hotkey in SketchUp's Shortcuts)
    toolbar_copy_help: "Copied \"%{name}\".\n\nTo assign a hotkey: open Window › Preferences\
      \ › Shortcuts, paste it (Ctrl+V) into the Filter box, select the tool, then press\
      \ the key you want."
    toolbar_shortcut_set: Set shortcut
    toolbar_shortcut_press: Press keys…
    toolbar_shortcut_menu_root: Extensions › GG Cabinet Tools
    toolbar_shortcut_howto: Open Window › Preferences › Shortcuts in SketchUp, find
      the menu item below and assign your keys. Then press the combo here to show it
      on the button.
    nesting_settings_title: Nesting (ABF Extra Nesting)
    nesting_settings_subtitle: Default margins used when packing boards onto sheets.
    nesting_parts_margin_label: Margin between parts (mm)
    nesting_parts_margin_hint: Gap kept between any two placed parts during BLF
      packing. Use a decimal point (e.g. 7.5).
    nesting_sheet_border_margin_label: Margin to sheet border (mm)
    nesting_sheet_border_margin_hint: Gap kept between each part and the sheet
      edge. Use a decimal point (e.g. 4.0).
    nesting_refine_step_label: Refine step (mm)
    nesting_refine_step_hint: Snap tolerance for tight packing — smaller packs
      tighter but slower (default 3).
    nesting_sheet_size_label: Default sheet size (mm)
    nesting_sheet_size_hint: Size of a sheet created from scratch (default 1220 × 2440).
    nesting_sheet_w_label: Width
    nesting_sheet_h_label: Height
    nesting_in_holes_label: Nest parts into holes
    nesting_in_holes_hint: When a small part fits inside a hole of a larger part,
      pack it into that hole (uses the parts margin as the gap).
    nesting_allow_rotate_label: Allow 90° rotation to fit
    nesting_allow_rotate_hint: When a part does not fit at its current angle, try
      turning it 90° during packing. Original orientation is kept when it already fits.
    nesting_origin_label: Nesting direction
    nesting_origin_hint: Where packing starts on each sheet — at the x0,y0 corner
      (default) or at the xmax,ymax corner.
    nesting_auto_cut_label: Auto-set cut layers after nesting
    nesting_auto_cut_hint: After a nesting run, tag every part with its cut-order
      layer (T/B/L/R bands).
    # ABF Extra Label — why a selected solid could not be labelled (shown when
    # nothing is board-like after explode).
    abf_label_none_labelable: "No object could be labelled — reason per object:"
    abf_label_reject_too_few_faces: has fewer than 2 flat faces — not a solid.
    abf_label_reject_not_slab_pair: its two largest faces are not an equal-area
      parallel pair (not a flat board).
    abf_label_reject_not_congruent: its two largest faces have different outlines
      (a taper/wedge) — top and bottom must be the same shape.
    abf_label_reject_no_side_faces: it has no side face joined to the top/bottom face.
    abf_label_reject_non_rect_sides: "has %s side face(s) that are not rectangles
      (usually a curved edge/hole whose walls merged); every side face of a board
      must be a single rectangle."
    abf_label_reject_non_rect_sides_loc: "e.g. near (%s, %s) mm."
    nesting_save_btn: Save
    nesting_saved: Saved
    nesting_save_error_empty: Both fields are required.
    nesting_save_error_not_a_number: Use a number (decimal separator is ".").
    nesting_save_error_negative: Margins must be ≥ 0.
    khau_settings_title: Cross halving join (ABF_CrossHalvingJoin)
    khau_settings_subtitle: CNC tag ABF_CrossHalvingJoin, offset, and end stretch for cross halving
      join regions.
    khau_group_name_label: Group / tag name
    khau_offset_label: Offset (mm)
    khau_end_stretch_label: End stretch (mm)
    khau_hud_tag: Tag
    khau_hud_offset: Offset
    khau_hud_stretch: Stretch
    khau_saved: Saved
    khau_save_failed: Save failed
    menu_khau: Cross halving join
    menu_cross_cut: Cross Cut
    toolbar_cross_cut_tooltip: Split an object into two along a cut perpendicular to the selected edge
    toolbar_cross_cut_status: Hover a face edge — type cut width, click to split
    menu_isolate: Isolate selection
    toolbar_isolate_tooltip: Hide everything except the current selection
    toolbar_isolate_status: Hidden unselected objects — use Undo to restore
    isolate_error_empty: Select at least one object to isolate.
    isolate_operation: GG Cabinet Tools — Isolate selection
    isolate_restore_operation: GG Cabinet Tools — Restore isolated view
    isolate_failed: "Isolate failed: %s"
    menu_entity_dump: Dump selection to console
    toolbar_entity_dump_tooltip: Print selection details to the Ruby Console
    toolbar_entity_dump_status: Select entities, then run to dump class, bounds, and attributes
    menu_entity_dump_txt: Export selection to TXT
    toolbar_entity_dump_txt_tooltip: Export selection dump to a text file
    toolbar_entity_dump_txt_status: Choose folder and filename for a TXT export
    menu_entity_dump_json: Export selection to JSON
    toolbar_entity_dump_json_tooltip: Recursively export selection to JSON
    toolbar_entity_dump_json_status: Choose folder and filename for a JSON export
    menu_cnc_relief: CNC relief circles
    toolbar_cnc_relief_tooltip: Place relief circles at concave corners on selected boards
    toolbar_cnc_relief_status: Select groups/components — click corner; Shift for coplanar batch
    menu_cnc_relief_settings: Relief circles settings
    toolbar_cnc_relief_settings_tooltip: Preview/final diameter, tag template, loop mode
    menu_tenon_helper: Tenon helper
    toolbar_tenon_helper_tooltip: Create mortise patches on side faces with arrow picks
    toolbar_tenon_helper_status: Select boards — click arrows; Shift opposite, Ctrl all slots
    menu_cam_lock: Cam Lock
    toolbar_cam_lock_tooltip: Mark cam-lock joints (D15 lock + D10 pin) on contacting boards
    toolbar_cam_lock_status: Select cam-lock board — click anchors; Shift opposite, Ctrl all slots
    menu_unsolid_trim: Unsolid Trim
    toolbar_unsolid_trim_tooltip: 'Trim a target by a cutter (Eneroth-style): pick 1 = Cutter, 2 = Target'
    toolbar_unsolid_trim_status: Pick CUTTER first, then TARGET — keeps the cutter selected
    menu_unsolid_outer_shell: Unsolid Outer Shell
    toolbar_unsolid_outer_shell_tooltip: 'Outer shell a target with a cutter: pick 1 = Cutter, 2 = Target'
    toolbar_unsolid_outer_shell_status: Pick CUTTER first, then TARGET — outer shell on target, cutter removed
    menu_intersect_mark: Intersection Mark
    toolbar_intersect_mark_tooltip: Mark the intersection section where a board's edge contacts a target board
    toolbar_intersect_mark_status: Select a source board — hover a contact, click to stamp the marker
    intersect_await_pick: Double-click a board whose edge touches a target
    intersect_skipped_complex: Skipped boards with too-complex profile
    intersect_hud_width_offset: Width+
    intersect_hud_extend: Extend
    intersect_hud_mark_all: Mark all
    intersect_settings_title: Intersection settings
    intersect_section_presets: Presets
    intersect_width_offset: Width offset (mm)
    intersect_extend: Extend (mm)
    intersect_tag: Tag / Layer
    intersect_preset_name: Preset name
    intersect_preset_save: Save preset
    intersect_preset_delete: Delete
    intersect_preset_add: Add preset
    intersect_preset_cancel: Cancel
    intersect_form_new: New preset
    intersect_form_edit: Edit preset
    intersect_reset: Reset defaults
    intersect_saved: Saved
    cam_settings_title: Cam Lock settings
    cam_settings_subtitle: Liên kết ngang — diameters, dowels, screw, layers
    cam_tab_cam: Cam lock
    cam_tab_screw: Screw
    cam_tab_screw_cap: Screw + cap
    cam_hud_name: HUD name
    cam_hud_visible: Show on HUD
    cam_screw_face: Screw face
    cam_face_front: Front
    cam_face_back: Back
    cam_section_layout: Slot layout
    cam_slots: Slots
    cam_edge_offset: Slot inset from edge (mm)
    cam_section_cam: Cam joint
    cam_section_dowel: Wood dowel
    cam_section_screw: Screw mark
    cam_lock_d: Lock Ø (mm)
    cam_pin_d: Pin Ø (mm)
    cam_lock_edge: Lock inset from edge (mm)
    cam_lock_layer: Lock layer
    cam_pin_layer: Pin layer
    cam_dowel_enabled: Add wood dowels
    cam_dowel_d: Dowel Ø (mm)
    cam_dowel_spacing: Spacing from pin (mm)
    cam_dowel_layer: Dowel layer
    cam_screw_d: Screw Ø (mm)
    cam_cap_d: Cap Ø (mm)
    cam_screw_length: Screw shank length (mm)
    cam_screw_offset: Screw inset from edge (mm)
    cam_screw_layer: Screw layer
    cam_cap_layer: Cap layer
    cam_save: Save
    cam_reset: Reset defaults
    cam_lock_hud_edit: Edit
    cam_lock_hud_sel_all: Select all
    cam_lock_hud_del: Delete
    cam_lock_hud_del_all: Delete all
    cam_lock_hud_flip_leg_all: Flip all legs
    cam_lock_hud_eraser: Eraser
    cam_lock_hud_settings: Settings
    cam_lock_hud_slots: Slot
    cam_lock_hud_offset: Offset
    cam_lock_hud_flip_pin: Flip leg
    cam_lock_hud_edit_on: "ON"
    cam_lock_hud_edit_off: "off"
    cam_lock_hud_pin_back: Back
    cam_lock_hud_pin_front: Front
    cam_saved: Saved
    hud_on: "ON"
    hud_off: "OFF"
    tenon_hud_slots: Tenon count(A)
    tenon_hud_length: Tenon length(B)
    tenon_hud_depth: Tenon depth(C)
    tenon_hud_offset: Offset(D)
    tenon_hud_tag: Tag
    tenon_hud_extend: Extend both ends(E)
    tenon_hud_width_plus: Width +(F)
    tenon_hud_bit_dia: Cutter ⌀(G)
    tenon_hud_moc_cau: Hook
    tenon_hud_moc_cau_head_len: Hook head length(G)
    tenon_hud_moc_cau_tail_len: Hook tail length(H)
    tenon_hud_moc_cau_head_shift: Hook head shift(I)
    tenon_hud_moc_cau_tail_shift: Hook tail shift(J)
    tenon_hud_moc_cau_offset: Hook off
    tenon_hud_moc_cau_tag: Hook tag
    tenon_hud_ngam_protrude: Ngàm line offset(G)
    tenon_hud_ngam_tag: Ngàm tag
    tenon_hud_ngam_pocket: Pocket tag
    tenon_hud_ngam_hook: Hook name
    tenon_hud_ngam_stretch: Pocket stretch(H)
    tenon_hud_ngam_throat: Throat pinch(I)
    tenon_hud_ngam_hook_inset: Ngàm hook offset(J)
    tenon_hud_ngam_hook_tail_inset: Ngàm hook tail inset(K)
    tenon_hud_ngam_recess: Throat recess(L)
    tenon_hud_ngam_head_recess: Ngàm line head recess(M)
    tenon_hud_ngam_tail_recess: Ngàm line tail recess(N)
    tenon_settings_title: Tenon–Mortise settings
    tenon_settings_params: Parameters
    tenon_unit_mm: mm
    tenon_settings_guide: Illustration
    tenon_guide_slots: How many tenons sit along one joined edge.
    tenon_guide_length: Length of a single tenon, measured along the joined edge.
    tenon_guide_depth: How deep the tenon reaches into the mating board.
    tenon_guide_offset: Distance from the board edge to the first tenon.
    tenon_guide_extend: Extra slot length at both ends so the joint goes together easily.
    tenon_guide_width_plus: Extra slot width beyond the board thickness.
    tenon_guide_mortise: On cuts the slot in the mating board; off makes the tongue only.
    tenon_guide_tag: Layer/tag name given to the geometry that gets created.
    tenon_guide_bit_dia: Cutter diameter. Its radius drives the corner relief arcs so a round bit reaches the true corner.
    tenon_guide_moc_cau_head_len: Length of the hook's head segment, from the tongue edge.
    tenon_guide_moc_cau_tail_len: Length of the hook's tail segment, continuing the head.
    tenon_guide_moc_cau_head_shift: Lateral shift of the head segment — this is what forms the barb.
    tenon_guide_moc_cau_tail_shift: Lateral shift of the tail segment.
    tenon_guide_ngam_protrude: How far the ngàm tongue stands proud of the board face.
    tenon_guide_ngam_stretch: Lengthens the pocket mouth at both ends so the tongue can slide in.
    tenon_guide_ngam_throat: How much shorter the throat is than the mouth — this is what holds the tongue.
    tenon_guide_ngam_hook_inset: How far the hook sits inside the pocket outline at the mouth and both sides.
    tenon_guide_ngam_hook_tail_inset: How far the hook sits inside at the tail (far from the mouth).
    tenon_guide_ngam_recess: Length of the mouth section before it steps down to the throat.
    tenon_guide_ngam_head_recess: ABF_NGAM line pulled back at the head; negative pushes it out.
    tenon_guide_ngam_tail_recess: ABF_NGAM line pulled back at the tail; negative pushes it out.
    tenon_guide_ngam_pocket: Layer name for the ngàm pocket cut.
    tenon_guide_ngam_hook: Name given to the ngàm hook contour.
    tenon_settings_save: Save
    tenon_settings_reset: Reset
    tenon_settings_saved: Saved
    tenon_hud_joint_square: Square joint
    tenon_hud_joint_dogbone: Dogbone joint
    tenon_hud_joint_moccau: Hook joint
    tenon_hud_joint_ngam: Ngàm joint
    tenon_hud_mortise: Mortise
    tenon_hud_awaiting_pick: Double-click a board to select
    tenon_hud_prompt_title: Tenon Helper
    board_trim_hud_offset: Offset
    board_trim_hud_settings: Presets
    board_trim_hud_prompt_mm: Offset (mm)
    board_trim_hud_prompt_title: Trim s-face — Offset
    board_trim_status: "Right-click / click to trim · toggle 1 face / all faces · type a number = offset · gear = presets"
    board_trim_mode_all: All faces
    board_trim_mode_single: 1 face
    board_trim_mode_single_short: "1"
    board_trim_mode_all_short: "all"
    board_trim_settings_title: Trim presets
    board_trim_settings_heading: Trim s-face presets
    board_trim_settings_save: Save
    board_trim_settings_reset: Defaults
    board_trim_settings_add: Add preset
    board_trim_settings_col_name: Name
    board_trim_settings_col_offset: Offset (mm)
    board_trim_settings_col_mode: Faces
    intersect_hud_mode: Mode
    intersect_hud_line: Line
    intersect_hud_area: Area
    cnc_relief_hud_outer: OUTER
    cnc_relief_hud_inner: INNER
    cnc_relief_hud_preview: Preview
    cnc_relief_hud_circle: Circle
    cnc_relief_hud_tag: Tag
    cnc_relief_hud_notice_on: Notice On
    cnc_relief_hud_notice_off: Notice Off
    cross_cut_hud_width: Width
    cross_cut_hud_anchor_near: Near (mm)
    cross_cut_hud_anchor_far: Far (mm)
    cross_cut_hud_anchor_center: Center (mm)
    cross_cut_hud_prompt_title: Cross Cut
    dumb_scale_hud_width: Width
    dumb_scale_hud_depth: Depth
    dumb_scale_hud_height: Height
    marking_hud_line: Line
    marking_hud_area: Area
    marking_hud_dim: Dim
    marking_hud_save_profile_hint: "Save the selected edges/face as a custom profile preset."
    marking_hud_settings_hint: "Open Marking settings (offsets, layers, presets)."
    marking_hud_dim_hint: "Toggle dimension labels on the marking preview."
    marking_hud_anchor_hint: "Set how many anchor points (/N) are placed along the edge."
    cam_lock_hud_mode_cam: Cam
    cam_lock_hud_mode_screw: Screw
    cam_lock_hud_mode_screw_cap: Screw+cap
    cam_lock_hud_edit_toggle_hint: "Toggle edit mode for cam-lock connections."
    cam_lock_hud_settings_hint: "Open Cam Lock settings (names, visibility, defaults)."
    cam_lock_hud_slots_hint: "Number of cam-lock slots along the selected edge."
    cam_lock_hud_offset_hint: "Edge offset for cam-lock placement (mm)."
    cam_lock_hud_flip_pin_hint: "Flip screw pin direction (front/back)."
    cam_lock_hud_del_all_hint: "Delete every cam-lock connection in the model."
    cam_lock_hud_flip_leg_hint: "Flip the leg side on every connection."
    cam_lock_hud_eraser_hint: "Eraser mode: click a connection to delete it."
    cam_lock_hud_mode_hint: "Placement mode: %s"
    cam_lock_hud_awaiting_pick: Double-click a cam-lock board to start
    tenon_hud_slots_hint: "Number of tenon slots along the edge."
    tenon_hud_length_hint: "Tenon length along the edge (mm). 0 = auto."
    tenon_hud_depth_hint: "Tenon push depth (mm)."
    tenon_hud_offset_hint: "Edge offset for the tenon patch (mm)."
    tenon_hud_tag_hint: "Layer/tag name applied to the mortise."
    tenon_hud_extend_hint: "Extra mortise length beyond the tenon (mm)."
    tenon_hud_width_plus_hint: "Extra mortise width clearance (mm)."
    tenon_hud_bit_dia_hint: "Cutter diameter (mm): the dogbone relief radius is half of it."
    tenon_hud_moc_cau_hint: "Hook length (mm): the mortise recedes by this along the hook direction."
    tenon_hud_moc_cau_offset_hint: "Shift the hook marker along the tongue protrusion (mm)."
    tenon_hud_moc_cau_tag_hint: "Group name of the hook marker (default ABF_mocCau)."
    tenon_hud_ngam_protrude_hint: "Shift the ABF_NGAM line outward along the tongue protrusion (mm, default 3)."
    tenon_hud_ngam_tag_hint: "Tag/layer of the ABF_NGAM line on the tenon board + the marker edges (default ABF_NGAM)."
    tenon_hud_ngam_pocket_hint: "Group name/tag of the ngàm pocket on the mortise plate (default ABF_KHOET_LO)."
    tenon_hud_ngam_hook_hint: "Group name of the ngàm hook on the mortise plate (default ABF_MOC_NGAM)."
    tenon_hud_joint_square_hint: "Square joint: the slot is stretched to swallow the bit radius."
    tenon_hud_joint_dogbone_hint: "Dogbone joint: the slot corners are relieved instead of stretched."
    tenon_hud_joint_moccau_hint: "Hook joint (móc câu): stamps an ABF_mocCau marker toward the cursor and recedes the mortise by the hook length. All hooks in one batch point the same way."
    tenon_hud_joint_ngam_hint: "Ngàm joint: builds a square tongue, then stamps the ABF_NGAM line on the board and the pocket (2×tongue) + hook on the mate plate, đầu toward the camera. Cuts no mortise."
    tenon_hud_mortise_hint: "Toggle automatic mortise creation."
    cnc_relief_hud_loop_hint: "Relief loop mode: %s"
    cnc_relief_hud_notice_hint: "Toggle the on-screen notice when placing relief circles."
    cnc_relief_hud_preview_hint: "Preview circle diameter (mm)."
    cnc_relief_hud_circle_hint: "Final relief circle diameter (mm)."
    cnc_relief_hud_tag_hint: "Layer/tag name for relief circles."
    edge_band_hud_gear_hint: "Open edge-band preset settings."
    edge_band_hud_noncontact_hint: "Mark all open (non-contact) edges on the selected boards."
    edge_band_hud_clear_hint: "Clear edge-band marks on the selected boards."
    edge_band_hud_all_hint: "Mark every side edge on the selected boards."
    board_trim_hud_settings_hint: "Open Trim presets / settings."
    board_trim_hud_offset_hint: "Trim offset distance from the s-face (mm)."
    board_trim_hud_mode_hint: "Toggle single-face vs all-faces trim."
    board_trim_hud_trim_btn_hint: "Trim the current selection with the active offset."
    cross_cut_hud_width_hint: "Cut kerf / width (mm)."
    khau_hud_tag_hint: "Group name for the cross-halving join result."
    khau_hud_offset_hint: "Slot offset from the edge (mm)."
    khau_hud_stretch_hint: "Extra stretch at slot ends (mm)."
    intersect_hud_settings_hint: "Open Intersect Mark settings."
    intersect_hud_width_offset_hint: "Extra mark width clearance (mm)."
    intersect_hud_extend_hint: "Extend the mark beyond the intersection (mm)."
    intersect_hud_mark_all_hint: "Mark every intersection in the current selection."
    deep_push_hud_xray_hint: "Toggle automatic X-ray while Deep Push is active."
    unfold_hud_mode_hint: "Unfold mode: %s"
    unfold_hud_settings_hint: "Open Unfold settings (offsets, tags, bone sizes)."
    unfold_hud_outer_hint: "Toggle outer bone lines."
    unfold_hud_inner_hint: "Toggle inner bone lines."
    unfold_hud_mid_hint: "Toggle mid bone lines."
    unfold_hud_union_hint: "Toggle union of bone regions."
    dumb_scale_hud_width_hint: "Set common width (world mm) for the selection."
    dumb_scale_hud_depth_hint: "Set common depth (world mm) for the selection."
    dumb_scale_hud_height_hint: "Set common height (world mm) for the selection."
    edge_band_hud_no_boards: No boards found in the model
    edge_band_dialog_title: Edge band presets
    edge_band_dialog_heading: Edge band presets
    edge_band_btn_save: Save
    edge_band_btn_defaults: Defaults
    edge_band_btn_add: "+ Add preset"
    edge_band_col_name: Name
    edge_band_col_thickness: Thickness (mm)
    edge_band_col_coef: Coefficient
    edge_band_col_coef_title: Multiplier for metres in edge-band statistics
    edge_band_col_color: Color
    edge_band_preset_default_name: Band
    edge_band_op_unmark: "Edge band: unmark"
    edge_band_op_mark: "Edge band: mark"
    edge_band_op_bulk: "Edge band: %s"
    edge_band_op_noncontact: open edges
    edge_band_op_clear: clear
    edge_band_op_all: all edges
    deep_push_hud_xray_on: X-ray
    deep_push_hud_xray_off: X-ray Off
    toolbar_explode_to_groups_tooltip: Explode dynamic components and convert every component in the selection to a group
    toolbar_explode_to_groups_status: "Confirm the options, then explode/convert — abf_autocombine outer-shells child groups, abf_layer tags them"
    toolbar_nesting_editor_tooltip: Nesting Editor
    toolbar_nesting_editor_status: Move nested boards on the top sheet; the bottom
      board follows mirrored.
    toolbar_rotate_label_tooltip: Rotate Label
    toolbar_rotate_label_status: Rotate the label 90° on the selected board(s) and
      redraw it.
    toolbar_flip_label_tooltip: Flip Label f/b face
    toolbar_flip_label_status: Move the label to the opposite face of the selected
      board(s) and redraw it.
    toolbar_abf_extra_label_tooltip: ABF Extra Label
    toolbar_abf_extra_label_status: Stamp machining-direction arrow + index on
      selected boards' f_face.
    toolbar_abf_extra_nesting_tooltip: ABF Extra Nesting
    toolbar_abf_extra_nesting_status: Add selected boards into __ABF_Nesting
      (auto-pack + overflow sheets).
    toolbar_nesting_dxf_tooltip: Export Nesting DXF
    toolbar_nesting_dxf_status: Export each nesting sheet (top and bottom) to its
      own DXF file.
    toolbar_label_print_tooltip: Label Print
    toolbar_label_print_status: Print labels for boards in __ABF_Nesting.
    explode_confirm_title: Explode → Groups
    explode_confirm_hidden: Delete hidden objects
    explode_confirm_attrs: Delete dynamic attributes
    explode_confirm_clear_id: Clear name ID prefix
    explode_confirm_ok: OK
    explode_confirm_cancel: Cancel
    explode_yes: "Yes"
    explode_no: "No"
    explode_op: Explode → Groups
    explode_select_first: Select one or more groups/components first.
    clone_board_hud_thickness: thickness
    bend_hud_radius: "R=%smm"
    nesting_editor_hud_block: Block
    nesting_editor_hud_pack_hint: "Marquee-select boards, then press Pack — selected boards are nested onto the sheet first."
    nesting_editor_hud_infill_hint: "Drop the selected parts into the empty slots of the same-material sheets (sheet 1 → last); a new sheet is added only when nothing fits."
    nesting_editor_infill_select_first: "Select parts first to insert them into empty slots."
    nesting_editor_hud_cutsettings_hint: "Open Nesting Editor / cut-order settings."
    nesting_editor_hud_cutmode_hint: "Toggle cut-order layer mode (assign machining order on parts)."
    nesting_editor_hud_outline_hint: "Toggle outer cut-line mode (offset outlines along part edges)."
    nesting_editor_hud_block_hint: "Toggle overlap blocking while dragging parts on the sheet."
    nesting_editor_hud_gap_hint: "Edit the collision gap kept between parts (mm)."
    nesting_editor_hud_border_hint: "Edit the gap kept between parts and the sheet border (mm)."
    nesting_editor_hud_sheet_back_hint: "Move the active sheet earlier in the sheet order."
    nesting_editor_hud_sheet_fwd_hint: "Move the active sheet later in the sheet order."
    nesting_editor_hud_flip_hint: "Flip the label to the other face on the selected parts."
    nesting_editor_hud_find_hint: "Find and select the source 3D boards for the selected parts."
    nesting_editor_hud_rotate_label_hint: "Rotate the label 90° on the selected parts."
    nesting_editor_hud_draw_line_hint: "Draw an extra line shape on the sheet."
    nesting_editor_hud_draw_rect_hint: "Draw an extra rectangle on the sheet."
    nesting_editor_hud_draw_circle_hint: "Draw an extra circle on the sheet."
    nesting_editor_hud_draw_erase_hint: "Erase extra shapes drawn on the sheet."
    nesting_editor_hud_edit_hint: "Edit cutting edges — select edges, then drag or type a distance."
    nesting_editor_hud_intem_hint: "Print labels (In tem) for the selected parts."
    nesting_editor_hud_cut_zigzag_hint: "Zigzag across parts to assign cut-order layers."
    nesting_editor_hud_cut_auto_hint: "Auto-assign cut-order layers to parts on the sheet."
    nesting_editor_hud_cut_reset_all_hint: "Reset all cut-order tags on every sheet."
    nesting_editor_hud_outline_pick_hint: "Pick edges to build outer cut lines."
    nesting_editor_hud_outline_zigzag_hint: "Zigzag to number outer cut lines (R_On)."
    nesting_editor_hud_outline_create_hint: "Create outer cut lines from the current edge selection."
    nesting_editor_hud_outline_reset_all_hint: "Reset all outer cut-line tags."
    nesting_editor_hud_outline_erase_hint: "Erase outer cut lines (eraser)."
    nesting_editor_hud_outline_delete_all_hint: "Delete all outer cut lines on every sheet."
    nesting_editor_hud_outline_offset_hint: "Edit outline offset from the edge centre (mm)."
    nesting_editor_hud_outline_extend_hint: "Edit how far each outline end extends (mm)."
    nesting_editor_intem_select_first: "Select parts first to print their labels."
    nesting_editor_edit_prompt: "Edit edges: marquee or shift-click cut edges, then drag or type a distance (mm) to move along X/Y"
    nesting_editor_hud_gap_mm: "Gap: %smm"
    nesting_editor_hud_border_mm: "Border: %smm"
    nesting_editor_hud_outline_offset_mm: "Offset: %smm"
    nesting_editor_hud_outline_extend_mm: "Extend: %smm"
    nesting_editor_hud_opacity: "Opacity: %s%%"
    nesting_editor_hud_two_sided_color: 2-sided color  (click)
    menu_tenon_settings: Tenon helper settings
    toolbar_tenon_settings_tooltip: Patch width, depth, slot count, edge offset
    menu_layer_manager: Layer manager
    toolbar_layer_manager_tooltip: Focus, highlight, color, and delete by layer/tag
    toolbar_layer_manager_status: Open layer manager for current selection or model
    layer_assign_op: Assign Tag
    layer_assign_delete_op: Delete Tag
    menu_marking: CNC marking
    toolbar_marking_tooltip: Mark a cut line (ABF_LINE_CUT) or pocket area
      (ABF_POCKET) on a panel face for CNC machining
    toolbar_marking_status: Hover an edge — press Ctrl to toggle line/area, click
      to place the marking sub-group
    menu_edge_band: Edge banding
    toolbar_edge_band_tooltip: Mark edge-banded edges (dán cạnh) on a board's
      side faces
    toolbar_edge_band_status: Click a side edge to band it, or use the top
      buttons; gear = presets
    menu_clone_board: Clone board
    toolbar_clone_board_tooltip: Clone a board along the face normal — VCB accepts
      'N' (distance) or 'N/M' (divide evenly)
    toolbar_clone_board_status: Hover a face — click to lock, drag to set distance,
      click again to commit
    menu_deep_push: Deep Push
    toolbar_deep_push_tooltip: Move a face along its normal inside a group or component
      — Tab flips direction, VCB accepts distance in mm
    toolbar_deep_push_status: Hover a face — click to lock, drag or type mm, click to commit
    board_trim_label: "Trim s-face:"
    board_trim_apply: Trim selection
    board_trim_some_failed: "%d selected object(s) could not be trimmed (not a board) — highlighted."
    toolbar_board_trim_tooltip: Trim a board's side faces inward by N mm (default 1 mm,
      HUD ± / VCB to change) — click a board, Shift+click one s-face, or Trim selection
    toolbar_board_trim_status: Click a board to trim all its s-faces · Shift+click one
      s-face · the Trim button trims every selected board · VCB/± changes the mm
    menu_move_vertices: Move vertices
    menu_align: Align
    menu_mirror: Mirror
    menu_rotate: Rotate
    menu_board_trim: Trim Side Faces
    menu_nesting_editor: Nesting Editor
    menu_find_nest_parts: Find Nesting Parts
    toolbar_find_nest_parts_tooltip: Select nesting parts in the model that match the current sheet
    toolbar_find_nest_parts_status: Find and select parts belonging to the active nesting sheet
    toolbar_component_stats_tooltip: Open the component inventory / statistics dialog
    toolbar_component_stats_status: Tally parts and accessories from the current nesting
    menu_explode_to_groups: Explode → Groups
    menu_rotate_label: Rotate Label
    menu_flip_label: Flip Label
    menu_abf_extra_label: ABF Extra Label
    menu_abf_extra_nesting: ABF Extra Nesting
    menu_nesting_dxf: Export Nesting DXF
    menu_label_print: Label Print
    menu_instance_rename: Instance Rename
    menu_ctx_remove_material: Remove Material
    toolbar_move_vertices_tooltip: Box-select vertices and move them along a world
      axis (Tab cycles Z/X/Y, Ctrl frees the lock); snap, VCB or a 2nd point set
      the distance
    toolbar_move_vertices_status: Box-select vertices, click the arrow start, move
      (Tab/Ctrl), VCB or 2nd point, Enter to commit
    toolbar_align_tooltip: Align an object by snapping its nearest vertex to a target
      face / edge / midpoint — Tab rotates the preview 90° (Z/X/Y), Ctrl places a copy
    toolbar_align_status: Pick an object, hover a face/edge/midpoint to snap (cyan
      preview), Tab to rotate, click to commit (hold Ctrl to copy)
    align_snap_origin: World origin (0,0,0)
    align_snap_axis: On %s axis
    toolbar_mirror_tooltip: Mirror the selected object across a face plane or through
      a point (vertex / edge midpoint) — Ctrl toggles keeping a mirrored copy
    toolbar_mirror_status: Hover a face (mirror across its plane) or a point/midpoint
      (central reflection); dashed bbox shows the result, square marks the mirror
      spot. Ctrl toggles copy, click to mirror.
    toolbar_rotate_tooltip: Rotate the selected object 90° — shows a preview ghost for
      each axis (red X, green Y, blue Z); click one to rotate, or use the arrow keys
    toolbar_rotate_status: Click a coloured ghost to rotate the object 90° about that
      axis (red=X, green=Y, blue=Z); arrows ↑/↓ rotate about Z, ← about Y, → about X.
    menu_precise_scale: Precise scale
    toolbar_precise_scale_tooltip: Slide vertices of a group or component along a bounding-box
      axis — pick an edge or face to orient, drag a handle or a mid face, snaps to geometry
    toolbar_precise_scale_status: Hover a handle, mid face, or edge/face to orient — click to grab,
      drag or type mm, Ctrl slides both sides, click to commit
    precise_scale_operation: Precise Scale
    precise_scale_select_objects: Select at least one group or component first.
    precise_scale_select_groups: Select a group or component to slide its vertices.
    precise_scale_ready_status: Hover a handle or mid face, or pick an edge/face to orient —
      click to grab
    precise_scale_drag_status: Drag or type mm — Tab cycles measure, Ctrl slides both sides,
      snaps to point/midpoint/edge/guide/world axis — click to commit
    marking_hud_offset: End trim (mm)
    marking_hud_width: Width
    marking_hud_layer: Layer
    marking_hud_anchor_count: Anchors
    marking_hud_anchor_dialog_title: Number of anchors
    marking_settings_title: Marking settings
    marking_settings_subtitle: Edit parameters and save named presets for the HUD.
    marking_settings_mode_section: Mode
    marking_settings_params_section: Parameters
    marking_settings_limits_section: Preview limits
    marking_settings_limits_hint: Skip preview/marking on over-complex boundaries to avoid crashing SketchUp.
    marking_settings_max_segments: Max segments
    marking_settings_max_sharp_corners: Max sharp corners
    marking_settings_profile_preview: Marker shape
    marking_settings_profile_preview_hint: Use Save shape in the marking tool HUD to capture a 2D boundary from the model.
    marking_settings_profile_width: Width (mm)
    marking_settings_profile_height: Height (mm)
    marking_settings_presets_section: Presets
    marking_settings_presets_hint: Click a preset to load it, edit values, then Save preset. HUD chips update the selected preset.
    marking_offset_from_line: Offset from line (mm)
    marking_profile_offset_locked_line: Inset from ends (mm)
    marking_preset_ring: Ring (closed loop on lock; uses offset from line)
    marking_hud_save_profile: Save shape
    marking_profile_preset_auto_name_prefix: Shape
    marking_hud_save_profile_prompt: Preset name
    marking_hud_save_profile_failed: Select edges or a face in the model, then try again.
    marking_preset_name: Preset name
    marking_save_preset: Save preset
    marking_new_preset: New preset
    marking_add_offset: Add offset
    marking_saved: Saved
    marking_save_failed: Save failed
    marking_preset_saved: Preset saved
    marking_rotate_ccw: Rotate marker left (90°)
    marking_rotate_cw: Rotate marker right (90°)
    marking_delete_preset: Delete
    marking_delete_preset_confirm: Delete this custom preset?
    marking_reset_offline_warning: Could not fetch the latest presets from the server — restored from the local cache. Check your connection / sign-in and try again.
    marking_illustration: Illustration
    marking_mark_back_face: Mark on back face
    marking_swap_axes: Swap width / height (rotate 90°)
    marking_reset_presets: Reset to defaults
    marking_reset_presets_confirm: Reset admin presets to defaults? Your custom presets will be kept.
    toolbar_khau_tooltip: Create cross halving join regions (tag ABF_CrossHalvingJoin) between
      selected boards for CNC
    toolbar_khau_status: Select two or more boards; hover a face to preview, click
      to place the cross halving join region
    khau_instruction: Hover a board face to preview the shift vector — click to place
      the cross halving join region (ABF_CrossHalvingJoin)
    khau_operation: GG Cabinet Tools — Cross halving join (ABF_CrossHalvingJoin)
    khau_error: |-
      GG Cabinet Tools cross halving join (ABF_CrossHalvingJoin) error:
      %s
    khau_error_need_two: Select at least two board groups or components before running
      cross halving join (ABF_CrossHalvingJoin).
    khau_error_not_board: Entity "%s" is not board-like (missing a pair of equal-area
      parallel faces).
    khau_error_not_axis: Board "%s" is not axis-aligned — its f_face normal must be
      parallel or perpendicular to world Z.
    khau_error_normals: Selected boards must have f_face normals that are pairwise
      parallel or perpendicular.
    khau_overlap_warning: 'Warning: cross halving join region (ABF_CrossHalvingJoin) overlaps
      existing group(s): %s'
    gcm_tab_toolpaths: Toolpaths
    gcm_tab_layers: Layers
    gcm_tab_tools: Tools
    gcm_header_toolpaths: Toolpaths
    gcm_tp_save_title: Save toolpath list
    gcm_aria_save_tp: Save toolpath list changes
    gcm_tp_save_editor_title: Save toolpath settings in editor
    gcm_aria_save_tp_editor: Save toolpath settings in editor
    gcm_tp_close_editor_title: Close toolpath editor without saving
    gcm_aria_close_tp_editor: Close toolpath editor without saving
    gcm_aria_add_tp_group: Add toolpath type
    gcm_tp_profile_title: Profile
    gcm_aria_add_profile: Add profile toolpath
    gcm_tp_pocket_title: Pocket
    gcm_aria_add_pocket: Add pocket toolpath
    gcm_tp_drill_title: Drill
    gcm_aria_add_drill: Add drill toolpath
    gcm_tp_fluting_title: Fluting
    gcm_aria_add_fluting: Add fluting toolpath
    gcm_import_tp_title: Import JSON toolpaths
    gcm_aria_import_tp: Import JSON toolpaths
    gcm_import_aspire_tp_title: Import Aspire template
    gcm_aria_import_aspire_tp: Import Aspire toolpath template
    gcm_export_tp_title: Export toolpaths
    gcm_aria_export_tp: Export toolpaths
    gcm_sample_tp_title: Append sample toolpaths
    gcm_aria_sample_tp: Append sample toolpaths
    gcm_dup_tp_title: Duplicate selected toolpath
    gcm_aria_dup_tp: Duplicate selected toolpath
    gcm_clear_tp_title: Clear all toolpaths
    gcm_aria_clear_tp: Clear all toolpaths
    gcm_aria_reorder_tp: Reorder selected toolpath
    gcm_move_up_title: Move up
    gcm_move_down_title: Move down
    gcm_tp_drag_reorder_title: Drag to reorder
    gcm_header_layers_pane: Layers
    gcm_reset_layers: Reset
    gcm_header_tool_library: Tool Library
    gcm_tool_save_title: Save tool library
    gcm_aria_save_tool: Save tool library changes
    gcm_add_tool_btn: "+ Add"
    gcm_output_folder_label: POST processor
    gcm_output_folder_ph: Click ··· to browse
    gcm_generate_btn: "▶ Generate G-code"
    gcm_right_tab_all: All Sheets
    gcm_right_tab_selected: Selected Sheet
    gcm_material_setup_btn: Material setup…
    gcm_import_post_btn: Import POST…
    gcm_load_nesting_btn: "⬇ Load Nesting from Model"
    gcm_load_nesting_title: Read __ABF_Nesting from the open model
    gcm_preview3d_btn: "3D"
    gcm_preview3d_title: Preview the selected sheet's toolpaths in 3D (exact G-code to be exported)
    gcm_preview3d_no_sheet: Load nesting and select a sheet first
    gcm_preview3d_carve_btn: Carved stock
    gcm_preview3d_res: Detail
    gcm_preview3d_res_hint: 3D carve resolution — drag right for finer cut detail
      (uses more memory, slower carve)
    gcm_preview2d_btn: "2D"
    gcm_preview2d_title: Simulate the selected sheet's toolpaths top-down in 2D (exact G-code to be exported)
    gcm_preview_hint_none: No nesting loaded — click <strong>⬇ Load Nesting from Model</strong>
    gcm_selected_hint_none: No sheet selected
    gcm_preview_tool_warn: Preview cannot be displayed until you select a tool.
    gcm_editor_toggle_title: Show / hide toolpath settings
    gcm_save_btn: Save
    gcm_label_name: Name
    gcm_name_ph: Pocket_6mm_EndMill_Z10mm
    gcm_label_start_depth: Start Depth (D)
    gcm_label_cut_depth: Cut Depth (C)
    gcm_label_passes: Passes
    gcm_edit_passes_btn: Edit…
    gcm_passes_title: Specify Pass Depths
    gcm_passes_add: Add pass
    gcm_passes_apply: Apply
    gcm_passes_pass: Pass
    gcm_ph_mm_zero: 0.0 mm
    gcm_label_tool: Tool
    gcm_label_actions: Actions
    gcm_no_tool_selected: No tool selected
    gcm_select_tool_btn: Select…
    gcm_remove_tool_title: Remove
    gcm_label_machine_vectors: Machine Vectors
    gcm_comp_outside: Outside
    gcm_comp_inside: Inside
    gcm_comp_on: 'On'
    gcm_label_direction: Direction
    gcm_dir_climb: Climb
    gcm_dir_conventional: Conventional
    gcm_label_sharpen_corners: Sharpen corners (V-Bit)
    gcm_label_starting_point: Starting Point
    gcm_label_clear_pocket: Clear Pocket
    gcm_pocket_offset: Offset
    gcm_pocket_raster: Raster
    gcm_label_raster_angle: Raster Angle
    gcm_label_degrees: degrees
    gcm_label_profile_pass: Profile Pass
    gcm_profile_pass_none: None
    gcm_profile_pass_first: First
    gcm_profile_pass_last: Last
    gcm_label_flute_type: Flute Type
    gcm_flute_full: Ramp over complete length
    gcm_flute_start: Ramp at Start
    gcm_flute_start_end: Ramp at Start and End
    gcm_label_ramp_length: Ramp Length
    gcm_label_ramp_percent: Ramp %
    gcm_label_ramp_type: Ramp Type
    gcm_ramp_linear: Linear
    gcm_ramp_smooth: Smooth
    gcm_label_tags: Tags
    gcm_select_tags_btn: Select…
    gcm_clear_tags_title: Remove all layers
    gcm_tag_dialog_title: Assign Tags
    gcm_tag_picker_title: Assign Tags to Toolpath
    gcm_tag_picker_empty: No tags found — load nesting from the model first.
    gcm_material_setup_title: Material Setup
    gcm_ms_thickness: Thickness (mm)
    gcm_ms_xy_datum: XY Datum
    gcm_ms_use_offset: Use offset
    gcm_ms_x_mm: X (mm)
    gcm_ms_y_mm: Y (mm)
    gcm_ms_summary_chk: Show detailed summary on toolpath tab
    gcm_ms_z_zero: Z-Zero
    gcm_ms_z_mat: Material surface
    gcm_ms_z_bed: Machine bed
    gcm_ms_model_pos: Model position in material
    gcm_ms_gap_above: Gap above model (mm)
    gcm_ms_gap_below: Gap below model (mm)
    gcm_ms_model_thick: Model thickness (mm)
    gcm_ms_model_plane_z: Modeling plane Z (mm)
    gcm_ms_set_stub: Set…
    gcm_ms_rapid_z: Rapid Z gaps above material
    gcm_ms_clearance_z: Clearance (Z1) (mm)
    gcm_ms_plunge_z: Plunge (Z2) (mm)
    gcm_ms_home_start: Home / start position
    gcm_ms_home_z_gap: Z gap above material (mm)
    gcm_ms_gcode_out: G-code output
    gcm_ms_fanuc_o: Fanuc-style program number (O0001)
    gcm_ms_tool_len: Tool length compensation (G43 H01)
    gcm_warn_title: Warning
    gcm_error_title: Error
    gcm_warn_orphan_p1: There are some operation layers that do not belong to any
      toolpath. Do you still want to generate G-code?
    gcm_warn_invisible_p1: Some layers are hidden and will not get toolpaths in
      this G-code. Do you still want to continue?
    gcm_warn_bounds_p1: Review these G-code limits before continuing. Please check
      machine settings and toolpaths.
    gcm_warn_pocket_open_p1: Pocket toolpaths include open vectors. Pocket needs
      closed loops — please check and continue only if you intend to proceed.
    gcm_warn_pocket_open_item: Toolpath "%s" · sheet "%s" · tag %s
    gcm_warn_safe_z_low: Clearance (Z1) is %s mm (minimum recommended %s mm).
    gcm_warn_home_z_low: Home Z (%s mm) is at or below material thickness (%s mm).
    gcm_warn_xy_out: Sheet "%s" %s=%s mm is outside allowed range [%s … %s] mm.
    gcm_warn_z_below_bed: Sheet "%s" Z=%s mm is below the bed limit (%s mm).
    gcm_warn_z_above_bed: Sheet "%s" Z=%s mm is above the bed retract limit (%s mm).
    gcm_result_title: G-code generated
    gcm_result_files: Files
    gcm_result_open_folder: Show in Folder
    gcm_tp_tool_picker_title: Select Tool
    gcm_tp_tool_picker_new: New tool
    gcm_unsaved_title: Unsaved changes
    gcm_unsaved_body: Save your G-code settings (toolpaths, tools, machine, layers)
      before continuing?
    gcm_unsaved_dont_save: Don't save
    gcm_invalid_value_title: Invalid value
    gcm_invalid_modal_ok: OK
    gcm_clear_all_tp_title: Clear all toolpaths
    gcm_clear_all_tp_body: Remove every toolpath from the list? This cannot be undone.
    gcm_clear_all_confirm: Clear all
    gcm_aria_close: Close
    gcm_common_cancel: Cancel
    gcm_common_apply: Apply
    gcm_common_continue: Continue
    gcm_type_profile_name: Profile
    gcm_type_pocket_name: Pocket
    gcm_type_drill_name: Drill
    gcm_type_fluting_name: Fluting
    gcm_toolpath_copy_suffix: _copy
    gcm_toolpath_fallback_name: Toolpath
    gcm_sample_end_mill_6: End Mill Ø6 mm
    gcm_sample_drill_2: Drill Ø2 mm
    gcm_start_pt_nw: Top-left
    gcm_start_pt_n: Top-center
    gcm_start_pt_ne: Top-right
    gcm_start_pt_w: Mid-left
    gcm_start_pt_e: Mid-right
    gcm_start_pt_sw: Bottom-left
    gcm_start_pt_s: Bottom-center
    gcm_start_pt_se: Bottom-right
    gcm_val_name_empty: Enter a name for this toolpath.
    gcm_val_name_charset: Toolpath name may only contain letters, digits, space, period,
      underscore, and hyphen.
    gcm_val_nonneg: Enter a valid non-negative number.
    gcm_val_number: Enter a valid number.
    gcm_val_below_min: Value is below the minimum.
    gcm_val_tool_num_used: That tool number is already in use.
    gcm_val_tool_name: Enter a name for this tool.
    gcm_list_tags_prefix: 'Tags:'
    gcm_list_no_name: No name
    gcm_list_tags_none: none
    gcm_row_delete_tp_title: Delete toolpath
    gcm_row_duplicate_tp_title: Duplicate toolpath
    gcm_tp_row_title: Click to select; double-click to edit
    gcm_tp_type_profile: Profile
    gcm_tp_type_drill: Drill
    gcm_tp_type_pocket: Pocket
    gcm_tp_type_fluting: Fluting
    gcm_layers_empty: No layers found — load nesting first
    gcm_layers_all: All layers
    gcm_layer_show: Show layer
    gcm_layer_hide: Hide layer
    gcm_layers_show_all: Show all layers
    gcm_layers_hide_all: Hide all layers
    gcm_preview_layers_btn: Layers
    gcm_preview_layers_title: Layers on selected sheet
    gcm_tool_dup_warn: "⚠ T%s already used by another tool"
    gcm_tools_empty: No tools defined — click + Add
    gcm_tool_delete_title: Delete tool
    gcm_tool_num_label: Tool Number (T#)
    gcm_tool_name_label: Name
    gcm_tool_type_label: Type
    gcm_tool_type_end_mill: End Mill
    gcm_tool_type_ball: Ball Nose
    gcm_tool_type_vbit: V-Bit
    gcm_tool_type_drill: Drill Bit
    gcm_tool_type_custom: Custom
    gcm_tool_notes_label: Notes
    gcm_tool_section_geometry: Geometry
    gcm_tool_section_profile: Tool profile
    gcm_tool_capture_profile: Capture profile from component
    gcm_tool_recapture_profile: Recapture profile from component
    gcm_tool_clear_profile: Clear profile
    gcm_tool_capture_status: Click a 2-D profile component in SketchUp…
    gcm_tool_diameter: Diameter Ø (mm)
    gcm_tool_pass_depth: Pass Depth (mm)
    gcm_tool_tip_angle: Tip Angle (°)
    gcm_tool_stepover: Stepover (mm)
    gcm_tool_section_feeds: Feeds & Speeds
    gcm_close_save_confirm: Save changes to G-code settings before closing?
    gcm_err_no_toolpaths_export: No toolpaths to export.
    gcm_filter_post_txt_pp: "POST (*.txt, *.pp)"
    gcm_filter_vectric_pp: "Vectric (*.pp)"
    gcm_filter_text_txt: "Text (*.txt)"
    gcm_filter_all_files: "All files (*.*)"
    gcm_filter_json: "JSON (*.json)"
    gcm_filter_aspire_template: "Aspire Template (*.ToolpathTemplate)"
    gcm_aspire_btn_label: Aspire
    gcm_label_vcarve: V-carve corners
    gcm_sharp_external_corners: Sharp external corners
    gcm_sharp_internal_corners: Sharp internal corners (3D)
    gcm_allowance_cut_out_tool: Allowance for cut out tool
    gcm_corner_allowance_title: "Default (Aspire-style) = cut depth × tan(half V-bit angle). Editable. Leave blank to restore the default. Enter this value in Allowance Offset when making a separate end-mill cut-out toolpath."
    gcm_info_tool: Tool
    gcm_info_layer: Layer
    gcm_info_feed: Feed
    gcm_info_z: Z
    gcm_info_dir: Dir
    gcm_preview3d_view_iso: "3D"
    gcm_preview3d_view_top: Top
    gcm_preview3d_view_front: Front
    gcm_preview3d_view_side: Side
    gcm_preview3d_view_title: "%s view"
    gcm_preview2d_title_prefix: "2D · "
    gcm_preview2d_panel_gcode: G-code
    gcm_preview2d_panel_info: Info
    gcm_preview2d_panel_sheets: Sheets
    gcm_preview2d_play_all_title: Play every sheet in order from the selected one
    gcm_preview2d_copy_title: Copy G-code to clipboard
    gcm_preview2d_copied: Copied
    gcm_layer_color_title: "Click to change color for %s"
    gcm_default_end_mill_n: "End Mill %s"
    gcm_default_drill_diam: "Drill Ø%s mm"
    gcm_default_end_mill_diam: "End Mill Ø%s mm"
    gcm_aria_remove_tag: "Remove %s"
    gcm_tool_spindle_rpm: Spindle (RPM)
    gcm_tool_xy_feed: XY Feed (mm/min)
    gcm_tool_plunge_feed: Plunge (mm/min)
    gcm_tool_no_pick_msg: No tools defined — add tools in the Tools tab first.
    gcm_tool_pick_pass_suffix: " pass"
    gcm_tags_none_hint: No tags assigned — use Select tags…
    gcm_error_import_not_array: Imported toolpaths must be an array.
    gcm_status_imported: Imported %s toolpath(s) from %s.
    gcm_status_exported: Exported toolpaths to %s.
    gcm_status_post_saved: POST saved (%s chars). If you are signed in, settings sync
      to your account.
    gcm_post_modal_title: POST Processor
    gcm_post_import_btn: Import POST file…
    gcm_post_empty_hint: No POST file loaded — import a .pp or .txt file.
    gcm_post_name_label: Output file name
    gcm_post_units_label: Units
    gcm_post_ext_label: Extension
    gcm_post_line_num_label: Line numbering (start / step)
    gcm_post_preview_label: POST file
    gcm_post_source_file: 'Source: %s'
    gcm_error_select_output_first: Select an output folder first.
    gcm_error_load_nesting_first: Load nesting from model first.
    gcm_progress_computing: Computing toolpaths…
    gcm_progress_emitting: Emitting G-code…
    gcm_progress_writing: Writing files…
    gcm_status_review_warning: Review warning in the dialog.
    gcm_btn_loading: "⏳ Loading…"
    gcm_progress_reading_model: Reading nesting from model…
    gcm_error_prefix: 'Error: '
    gcm_result_none_written: No files were written.
    gcm_alert_files_written: "%s file(s) written."
    gcm_alert_none_generated: No files generated.
    gcm_result_saved_to: "%s file(s) saved to %s"
    gcm_result_preview_stub: G-code was saved. Open the files on disk to view full
      programs.
    gcm_result_truncated: |2-

      … (truncated)
    gcm_status_saved: Saved
    gcm_nesting_refreshed: Nesting refreshed (%s sheet(s)).
    gcm_nesting_none_warning: No nesting sheets found. Export nesting from the model
      first.
    gcm_btn_refresh_nesting: "↻ Refresh Nesting"
    gcm_btn_load_nesting: "⬇ Load Nesting from Model"
    gcm_preview_hint_none_plain: No nesting loaded
    gcm_unsaved_confirm: Save changes to G-code settings before continuing?
    gcm_error_select_output_folder: Please select an output folder.
    gcm_error_no_abf_nesting: No __ABF_Nesting found. Click 'Load Nesting from Model'
      after running the nesting tool.
    gcm_progress_reading_nesting_data: Reading nesting data…
    gcm_progress_generating_gcode: Generating G-code…
    gcm_panel_import_post: Import machine POST file
    gcm_panel_export_toolpaths: Export toolpaths JSON
    gcm_panel_import_toolpaths: Import toolpaths JSON
    gcm_panel_import_aspire_toolpaths: Import Aspire toolpath template
    gcm_val_no_name: no name
    gcm_val_cut_depth: cut depth must be > 0
    gcm_val_no_tags: no tags assigned
    gcm_val_no_tool: no tool selected
    gcm_err_spindle_conflict: 'Tool conflict on spindle slot(s): %s. Each spindle slot may hold only one tool — fix this before saving or exporting G-code.'
    gcm_tpengine_no_ops: 'no operations match tags: %s'
    gcm_tpengine_unsupported_type: 'unsupported toolpath type: %s'
    gcm_sheet_default_name: Sheet
    warehouse_js_confirm_remove: Remove "%s" from this computer?
    warehouse_js_remove_title: Remove
    nest_summary_line: '%s: placed %d/%d on %d sheet(s)'
    nest_missing_label_abort: "Some boards have no label. Add a label to each board before nesting:"
    nest_component_block_abort: "Only groups can be nested. Explode or make these components into groups first:"
    nest_no_matching_sheet_section: 'No matching sheet for:'
    nest_unlabeled_section: 'Boards with no label:'
    nest_unnested_section: 'Boards NOT nested:'
    nest_nothing: Nothing to nest.
    nest_preflight_stop_title: 'NESTING STOPPED — some selected objects cannot be nested (nothing was placed). Fix them and re-run:'
    nest_count_line: 'Board count: %d selected, %d nestable, %d blocked.'
    nest_count_mismatch: '⚠ BOARD COUNT MISMATCH — %d selected, only %d nested, %d missing:'
    nest_not_a_board_section: 'Not recognised as a board (extra wrapper group? geometry inside sub-groups?):'
    nest_invalid_section: 'Invalid geometry (no cutting polygon):'
    nest_inner_material_confirm: "Some boards have materials on inner faces (primitives). Remove those materials now? Nesting will stop and those boards will stay selected."
    nest_inner_material_section: 'Boards with inner material — reset inner objects to the default colour before nesting:'
    nest_failed_select_footer: Boards that did not land on a sheet will be selected automatically after closing this message.
    nest_reason_invalid_polygon: could not build a cutting polygon (invalid board?)
    nest_reason_no_matching_sheet: no matching sheet (%s)
    nest_reason_too_big: does not fit even an empty sheet (part larger than the sheet after margins?)
    nest_reason_no_sheet: could not create an overflow sheet
    nest_reason_no_space: no space left on the sheets
    topbot_blocked_title: TOP/BOT sheet positions DO NOT match — export blocked.
    topbot_sheet_line: 'Sheet %s:'
    topbot_missing_top: 'Part #%s: present on the BOT sheet but MISSING on the TOP sheet'
    topbot_misaligned: 'Part #%s: off by X %s mm, Y %s mm'
    topbot_fix_hint: Fix the part positions (or re-nest), then export again.
    topbot_gcode_blocked: TOP/BOT positions do not match — G-code export blocked.
    # ── tool messages / prompts / status (i18n sweep 2026-07-16) ──
    abf_label_select_first: Select one or more groups/components first.
    abf_label_error: "ABF Extra Label error: %s"
    abf_label_applied: Applied label to %s board(s). Skipped %s.
    abf_label_reindex_prompt: "Reindex?\n\nYes = delete all existing labels and renumber from 0\nNo  = continue numbering from the current maximum"
    abf_label_operation: ABF Extra Label
    abf_rotate_operation: Rotate Label
    abf_flip_operation: Flip Label
    abf_nesting_select_first: Select one or more board-like groups/components first.
    abf_nesting_error_board: "ABF Extra Nesting error: %s\n\nBoard: %s\n(selected — fix its geometry, then re-run nesting)"
    abf_nesting_error: "ABF Extra Nesting error: %s"
    abf_nesting_margins_invalid: Margins must be ≥ 0 and numeric.
    abf_nesting_margin_parts_prompt: "Margin between parts (mm):"
    abf_nesting_margin_border_prompt: "Margin to sheet border (mm):"
    abf_nesting_margins_title: ABF Extra Nesting
    abf_nesting_recreate_root_prompt: "Create a new nesting root?\n\nYes  = delete the old nesting root and create a new one\nNo   = nest into the existing nesting root"
    abf_nesting_operation: ABF Extra Nesting
    abf_nesting_progress_analysing: "Analysing %s board(s)..."
    abf_nesting_progress_packing_group: "Packing group %s/%s (%s, %s board(s))..."
    abf_nesting_progress_packing_onto: "Packing onto %s (%s/%s, %s/%s placed)..."
    abf_nesting_progress_overflow: "Creating overflow sheet %s (%s/%s placed)..."
    abf_nesting_back_label: Back face
    abf_flip_select_labeled: Select a labelled board to flip its f/b face.
    abf_flip_error: "Flip Label error: %s"
    abf_rotate_select_labeled: Select a labelled board (run ABF Extra Label first) to rotate.
    abf_rotate_error: "Rotate Label error: %s"
    bend_error: "GG Cabinet Tools Bend error:\n%s"
    cnc_relief_placed: Placed %s circles.
    cnc_relief_final_d: Final diameter set to %s mm
    cnc_relief_preview_d: Preview diameter set to %s mm
    cnc_relief_vcb_hint: Type final w5 or preview number (mm)
    cnc_relief_select_first: Select one or more Groups/ComponentInstances, then run tool.
    ecd_selection_empty: Selection is empty. Please select one or more entities and run again.
    ecd_invalid_filename: Invalid file name.
    ecd_exported: "Exported:\n%s"
    ecd_export_failed: "Failed to export:\n%s"
    ecd_exported_json: "Exported JSON:\n%s"
    ecd_export_json_failed: "Failed to export JSON:\n%s"
    ecd_dir_not_exist: "Directory does not exist:\n%s"
    ecd_menu_dump: "GG: Dump Selection to Console"
    ecd_menu_txt: "GG: Export Selection to TXT…"
    ecd_menu_json: "GG: Export Selection to JSON…"
    ecd_txt_title: GG Entity Console Dump — Export to TXT
    ecd_json_title: GG Entity Console Dump — Export to JSON
    ecd_filename_prompt: Output file name (no extension)
    ecd_dir_prompt: Output directory (path)
    explode_error: "Explode → Groups error: %s"
    gcode_profile_capture_hint: Click a 2-D profile component to capture the tool profile (Esc to cancel).
    gcode_profile_reason_not_component: Select a 2-D component or group.
    gcode_profile_reason_not_closed_loop: The profile must be a single closed loop.
    gcode_profile_reason_not_flat: The profile must be flat on the X-Y plane (all points z = 0).
    gcode_profile_reason_failed: Could not capture the tool profile.
    layer_manager_none_found: No layers/tags found (in selection or model).
    layer_manager_save_empty_name: Enter a tag name in the search box.
    layer_manager_save_exists: "Tag \"%s\" already exists."
    layer_manager_save_created: "Created tag \"%s\"."
    layer_manager_save_create_op: Create tag
    layer_manager_save_no_selection: Select objects to assign the tag to.
    layer_manager_save_applied: "Saved tag \"%s\" on the selection."
    layer_manager_highlight_all_on: Highlight every filtered tag (except Untagged/Layer0)
    layer_manager_highlight_all_off: Turn off every highlight (except Untagged/Layer0)
    layer_manager_highlight_row_on: Highlight this tag
    layer_manager_highlight_row_off: Stop highlighting this tag
    layer_manager_save_confirm_title: Save tag
    layer_manager_save_confirm_hint: "Assign tag \"%s\" to the current selection?"
    layer_manager_save_confirm_recursive: Assign recursively (include nested geometry)
    layer_manager_save_confirm_rename: Also rename instances to this tag name (recursive with above)
    layer_manager_save_confirm_ok: Save
    layer_manager_save_confirm_cancel: Cancel
    move_vertices_cursor_vertex: Vertex
    move_vertices_instruction_select: Box-select vertices · click to pick the arrow start point
    move_vertices_instruction_moving: Move the mouse (Tab changes axis, Ctrl frees the lock) · VCB/2nd point · Enter to finish
    move_vertices_snap_endpoint: Endpoint
    move_vertices_snap_edge_mid: Midpoint of edge
    move_vertices_snap_on_edge: On edge
    move_vertices_snap_guide: On guide line
    move_vertices_snap_guide_end: Guide line endpoint
    move_vertices_snap_guide_mid: Guide line midpoint
    move_vertices_snap_intersection: Intersection
    move_vertices_snap_origin: Origin
    move_vertices_snap_axis_red: On red axis (X)
    move_vertices_snap_axis_green: On green axis (Y)
    move_vertices_snap_axis_blue: On blue axis (Z)
    nesting_dxf_no_sheets: No nesting sheets found (named `…-sheet-N`).
    nesting_dxf_savepanel_title: Export DXF — choose destination folder
    nesting_dxf_mkdir_failed: "Could not create export folder:\n%s"
    nesting_editor_status_ron_start: R_On starts at %s (zigzag an outline)
    nesting_editor_status_cut_start: Cut index starts at %s (zigzag a part)
    nesting_editor_status_find_select: "Find 3D board: select part(s) first"
    nesting_editor_status_find_selected: "Find 3D board: selected %s board(s)"
    nesting_editor_vcb_start_index: Start index
    nesting_editor_outline_title: Outline cut line
    nesting_editor_outline_offset_prompt: Offset from centre (mm)
    nesting_editor_outline_extend_prompt: Extend each end (mm)
    nesting_editor_title: Nesting Editor
    nesting_editor_collision_gap_prompt: Collision gap (mm)
    nesting_editor_border_gap_prompt: Sheet border gap (mm)
    tenon_hud_hint: Adjust tenon/mortise parameters from the HUD while the tool is active.
    unsolid_shell_pick_next: Pick next solid to merge (Esc to finish).
    unsolid_shell_pick_first: Pick first solid.
    unsolid_trim_pick_target: Pick TARGET (2).
    unsolid_trim_pick_cutter: Pick CUTTER (1).
    plugin_name_version: GG Cabinet Tools (%s)
    main_label_print_unavailable: Label printing module is not available in this plugin install.
    main_settings_unavailable: Settings module is not available in this plugin install.
    label_print_dialog_title: Label Print
    label_print_hint: "( Click Print Label, choose a printer and paper size that match the label ratio, and always export a PDF of the labels )"
    label_print_btn_print: Print Label
    label_print_btn_pdf: PDF
    label_print_brand_label: Brand name
    label_print_title_label: Title
    label_print_settings_label: Settings
    label_print_ratio_label: Label size
    label_print_width_label: Width
    label_print_height_label: Height
    label_print_qr_label: QR Code
    label_print_qr_id: Part ID
    label_print_qr_name: Part name
    label_print_btn_save: Save settings
    label_print_saved: "✓ Saved"
    label_print_note: Note
    label_print_model_fallback: Model
    label_print_untitled: Untitled
    label_print_empty: No labels yet. Run ABF nesting, then reopen this dialog.
    label_print_parts_count_tpl: "%s parts"
    label_print_sheet_fallback_tpl: "Sheet %s"
    label_print_qr_missing: QR library missing
    label_print_template_label: Label template
    label_print_template_option_3: ABF - Label template 3
    label_print_subtemplate_label: Sub-template
    label_print_subtemplate_none: "— None —"
