$fn = 200;

lid_height = 26.6;
lid_inner_depth = 23.5;
small_diameter = 26.5;
large_diameter = 32;

lip_height = 5.15;
lip_protrudes_inside = 0.25;
lip_protrudes_height = 0.60;

lid_thickness = 1.14;
reduction = 2;

straw_diameter = 2.1;
straw_access = 21.5;

protrudes_arc_width = 3; // mm of arc length per tab

module outer_cylinder()
{
  outer_large_diameter = large_diameter + 2*lid_thickness;
  cylinder(h = lid_height, d1 = outer_large_diameter, d2 = outer_large_diameter - reduction);
}

module inner_cylinder()
{
  inner_diameter = small_diameter;
  cylinder(h = lid_inner_depth, d = inner_diameter);
}

module lip()
{
  cylinder(h = lip_height, d = large_diameter);
}

module straw_holder()
{
  outer_large_diameter = large_diameter + 2*lid_thickness;
  for (i = [0:3])
  {
    translate([0, outer_large_diameter/2, lid_height - straw_diameter/2 + i*1])
      rotate([90, 0, 0])
        cylinder(h = outer_large_diameter, d = straw_diameter);        
  }
  translate([0, 0, lid_height - straw_diameter])
    cylinder(h = straw_diameter, d1 = straw_access - 4*straw_diameter, d2 = straw_access);
}

module protrudes()
{
  inner_r = (large_diameter - 2*lip_protrudes_inside) / 2;
  outer_r = (large_diameter + 2*lid_thickness) / 2;
  tab_width = outer_r - inner_r;

  // Convert 3mm arc length to degrees at the mid-radius
  mid_r = (inner_r + outer_r) / 2;
  arc_angle = (protrudes_arc_width / (2 * PI * mid_r)) * 360;

  for (i = [0:3])
  {
    rotate([0, 0, i * 90])
    rotate_extrude(angle = arc_angle, $fn = 200)
    translate([inner_r, 0, 0])
    // Triangle: flat base, peaks at centre — no overhangs, no supports needed
    polygon([[0, 0], [tab_width, 0], [tab_width/2, lip_protrudes_height]]);
  }
}

union()
{
  difference()
  {
    outer_cylinder();
    inner_cylinder();
    lip();
    straw_holder();
  }

  protrudes();
}